<?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>129210</bug_id>
          
          <creation_ts>2014-02-22 11:05:41 -0800</creation_ts>
          <short_desc>FTL should do polymorphic PutById inlining</short_desc>
          <delta_ts>2014-02-24 17:57:38 -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>528+ (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>
          
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>983614</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-22 11:05:41 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983615</commentid>
    <comment_count>1</comment_count>
      <attachid>224977</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-22 11:06:19 -0800</bug_when>
    <thetext>Created attachment 224977
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983627</commentid>
    <comment_count>2</comment_count>
      <attachid>224980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-22 12:28:39 -0800</bug_when>
    <thetext>Created attachment 224980
profiling side is done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983661</commentid>
    <comment_count>3</comment_count>
      <attachid>224990</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-22 20:22:54 -0800</bug_when>
    <thetext>Created attachment 224990
more stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983662</commentid>
    <comment_count>4</comment_count>
      <attachid>224991</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-22 20:38:37 -0800</bug_when>
    <thetext>Created attachment 224991
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983786</commentid>
    <comment_count>5</comment_count>
      <attachid>225023</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-23 19:52:10 -0800</bug_when>
    <thetext>Created attachment 225023
the code is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983792</commentid>
    <comment_count>6</comment_count>
      <attachid>225025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-23 20:36:27 -0800</bug_when>
    <thetext>Created attachment 225025
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983793</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-23 20:37:26 -0800</bug_when>
    <thetext>Attachment 225025 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:161:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:187:  The parameter name &quot;chain&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2011:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2024:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2028:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2043:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2045:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2052:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:398:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:407:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:409:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:423:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:434:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:436:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:456:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:461:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:465:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 18 in 32 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>983794</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-23 20:43:47 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 225025 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:161:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]

You expected wrong.

&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:187:  The parameter name &quot;chain&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Fixed.

&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2011:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2024:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2028:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2043:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2045:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2052:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:398:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:407:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:409:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:421:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:423:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:434:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:436:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:456:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:461:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:465:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]

Fixed.

&gt; Total errors found: 18 in 32 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983795</commentid>
    <comment_count>9</comment_count>
      <attachid>225026</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-23 20:44:18 -0800</bug_when>
    <thetext>Created attachment 225026
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983796</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-23 20:46:24 -0800</bug_when>
    <thetext>Attachment 225026 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:161:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2011:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 32 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>983927</commentid>
    <comment_count>11</comment_count>
      <attachid>225071</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-24 09:14:04 -0800</bug_when>
    <thetext>Created attachment 225071
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983928</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-24 09:15:18 -0800</bug_when>
    <thetext>Attachment 225071 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:161:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2011:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 28 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>983930</commentid>
    <comment_count>13</comment_count>
      <attachid>225073</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-24 09:23:20 -0800</bug_when>
    <thetext>Created attachment 225073
the patch

Forgot LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983931</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-24 09:24:27 -0800</bug_when>
    <thetext>Attachment 225073 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/PutByIdStatus.cpp:161:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:2011:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 32 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>983941</commentid>
    <comment_count>15</comment_count>
      <attachid>225073</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-02-24 10:25:10 -0800</bug_when>
    <thetext>Comment on attachment 225073
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=225073&amp;action=review

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1969
&gt; +        if (!isFTL(m_graph.m_plan.mode)) {
&gt; +            emitPutById(base, identifierNumber, value, isDirect);
&gt; +            return;
&gt; +        }

We will need to support polymorphic put_by_id in the DFG (and baseline, and possibly even the interpreter) to make caching of DOM setters actually useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983946</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-24 10:47:38 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 225073 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225073&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1969
&gt; &gt; +        if (!isFTL(m_graph.m_plan.mode)) {
&gt; &gt; +            emitPutById(base, identifierNumber, value, isDirect);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; 
&gt; We will need to support polymorphic put_by_id in the DFG (and baseline, and possibly even the interpreter) to make caching of DOM setters actually useful.

As I&apos;ve told you before, we already support caching polymorphic put_by_id in baseline, DFG, and FTL. This patch doesn&apos;t change that. This patch has to do with inlining, not caching. 

So if you think that Dom setters are blocked on any of this, then you&apos;re in luck because there isn&apos;t anything to block on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983972</commentid>
    <comment_count>17</comment_count>
      <attachid>225073</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-02-24 11:25:43 -0800</bug_when>
    <thetext>Comment on attachment 225073
the patch

r=me too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984130</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-24 17:57:38 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/164620</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224977</attachid>
            <date>2014-02-22 11:06:19 -0800</date>
            <delta_ts>2014-02-22 12:28:39 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14728</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBACiAJCTBGOTMzMkEzMTRDQTdE
RDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEE5
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNG
QzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZF
RjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAv
KiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODMyLDYgKzE4
MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMx
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRB
NzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2Zp
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NkVCQjExNjY3NkVGNDAwOEJB
REUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBACiAJCQkJMEZDOTdGMzIxODIwMjBENzAw
MkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhD
MTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGRjYwQUJGMTY3NDBGODEw
MDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJCQkwRkY2MEFDMDE2NzQwRjgx
MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAtNTM4Myw2ICs1Mzg5LDcgQEAK
IAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODcz
QTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNzYsNiArNjE4Myw3IEBACiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QjFDQkQxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3
IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAx
NjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw3IEBACiAjZGVmaW5lIFB1dEJ5SWRTdGF0dXNf
aAogCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKLSNpbmNsdWRlICJJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNsdWRlICJQdXRC
eUlkVmFyaWFudC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC00NSw1MSArNDQsMjcgQEAgcHVibGljOgogICAg
IGVudW0gU3RhdGUgewogICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5m
b3JtYXRpb24uCiAgICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAgICAgIC8vIEl0J3MgY2FjaGVk
IGFzIGEgZGlyZWN0IHN0b3JlIGludG8gYW4gb2JqZWN0IHByb3BlcnR5IGZvciBjYXNlcyB3aGVy
ZSB0aGUgb2JqZWN0Ci0gICAgICAgIC8vIGFscmVhZHkgaGFzIHRoZSBwcm9wZXJ0eS4KLSAgICAg
ICAgU2ltcGxlUmVwbGFjZSwKLSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSB0cmFuc2l0aW9u
IGZyb20gb25lIHN0cnVjdHVyZSB0aGF0IGxhY2tzIHRoZSBwcm9wZXJ0eSB0byBvbmUgdGhhdAot
ICAgICAgICAvLyBpbmNsdWRlcyB0aGUgcHJvcGVydHksIGFuZCBhIGRpcmVjdCBzdG9yZSB0byB0
aGlzIG5ldyBwcm9wZXJ0eS4KLSAgICAgICAgU2ltcGxlVHJhbnNpdGlvbiwKKyAgICAgICAgLy8g
SXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBraW5kLgorICAgICAgICBTaW1w
bGUsCiAgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93IHBhdGguCiAgICAg
ICAgIFRha2VzU2xvd1BhdGgKICAgICB9OwogICAgIAogICAgIFB1dEJ5SWRTdGF0dXMoKQogICAg
ICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICAgICAgLCBtX29sZFN0cnVjdHVyZSgw
KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKDApCi0gICAgICAgICwgbV9zdHJ1Y3R1cmVDaGFp
bigwKQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAgIH0KICAg
ICAKICAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0YXRlKQogICAgICAgICA6IG1f
c3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX25l
d1N0cnVjdHVyZSgwKQotICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkKLSAgICAgICAgLCBt
X29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAK
LSAgICBQdXRCeUlkU3RhdHVzKAotICAgICAgICBTdGF0ZSBzdGF0ZSwKLSAgICAgICAgU3RydWN0
dXJlKiBvbGRTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlLAotICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVjdHVyZUNoYWluLAot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
LSAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9uZXdT
dHJ1Y3R1cmUobmV3U3RydWN0dXJlKQotICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oc3RydWN0
dXJlQ2hhaW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIFB1dEJ5SWRTdGF0dXMo
Y29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAgIDogbV9zdGF0ZShTaW1wbGUp
CiAgICAgewotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0
YXRlID09IFRha2VzU2xvd1BhdGgpID09ICFtX29sZFN0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VS
VCgobV9zdGF0ZSAhPSBTaW1wbGVUcmFuc2l0aW9uKSA9PSAhbV9uZXdTdHJ1Y3R1cmUpOwotICAg
ICAgICBBU1NFUlQoISgobV9zdGF0ZSAhPSBTaW1wbGVUcmFuc2l0aW9uKSAmJiBtX3N0cnVjdHVy
ZUNoYWluKSk7Ci0gICAgICAgIEFTU0VSVCgobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1f
c3RhdGUgPT0gVGFrZXNTbG93UGF0aCkgPT0gKG1fb2Zmc2V0ID09IGludmFsaWRPZmZzZXQpKTsK
KyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1
bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwpAQCAtMTAxLDE0ICs3Niwx
NSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgIT0gTm9JbmZvcm1hdGlvbjsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9vbCBpc1NpbXBsZVJlcGxhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVJlcGxhY2U7IH0KLSAgICBib29sIGlz
U2ltcGxlVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlVHJhbnNp
dGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNp
bXBsZTsgfQogICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gVGFrZXNTbG93UGF0aDsgfQogICAgIAotICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlKCkg
Y29uc3QgeyByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9Ci0gICAgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4oKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZUNo
YWluLmdldCgpOyB9Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3Zh
cmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4mIHZh
cmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQorICAgIGNvbnN0IFB1dEJ5SWRW
YXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhd
OyB9CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAjaWYgRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFB1dEJ5
SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29u
dGV4dChvdXQsIDApOworfQorCit2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiPGVtcHR5
PiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAg
ICAgb3V0LnByaW50KCI8UmVwbGFjZTogIiwgaW5Db250ZXh0KHN0cnVjdHVyZSgpLCBjb250ZXh0
KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAiPFRyYW5z
aXRpb246ICIsIGluQ29udGV4dChvbGRTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIgLT4gIiwKKyAg
ICAgICAgICAgIGluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsICIsCisgICAg
ICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChzdHJ1Y3R1cmVDaGFpbigpLCBjb250ZXh0KSwg
IiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFu
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQdXRCeUlkVmFyaWFu
dF9oCisjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKKworI2luY2x1ZGUgIkludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgUHV0QnlJZFZhcmlhbnQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7Cisg
ICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbgorICAg
IH07CisgICAgCisgICAgUHV0QnlJZFZhcmlhbnQoKQorICAgICAgICA6IG1fa2luZChOb3RTZXQp
CisgICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgw
KQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24oCisgICAgICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKKyAgICAgICAgUGFzc1Jl
ZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgICAgIHJlc3VsdC5t
X25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJl
Q2hhaW4gPSBzdHJ1Y3R1cmVDaGFpbjsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyBy
ZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UpOworICAgICAgICByZXR1
cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7
CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fbmV3U3RydWN0dXJlOworICAgIH0KKyAg
ICAKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKKyAgICB9CisgICAgCisgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIFN0cnVjdHVy
ZSogbV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKKyAgICBS
ZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9zdHJ1Y3R1cmVDaGFpbjsKKyAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gUHV0QnlJZFZhcmlhbnRfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224980</attachid>
            <date>2014-02-22 12:28:39 -0800</date>
            <delta_ts>2014-02-22 20:22:54 -0800</delta_ts>
            <desc>profiling side is done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20531</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBACiAJCTBGOTMzMkEzMTRDQTdE
RDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEE5
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNG
QzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZF
RjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAv
KiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODMyLDYgKzE4
MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMx
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRB
NzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2Zp
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NkVCQjExNjY3NkVGNDAwOEJB
REUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBACiAJCQkJMEZDOTdGMzIxODIwMjBENzAw
MkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhD
MTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGRjYwQUJGMTY3NDBGODEw
MDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJCQkwRkY2MEFDMDE2NzQwRjgx
MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAtNTM4Myw2ICs1Mzg5LDcgQEAK
IAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODcz
QTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNzYsNiArNjE4Myw3IEBACiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QjFDQkQxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3
IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsMjUgKzEyMywyMiBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KCk7CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLT5yZXNldEJ5R0MpCi0gICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKIAogICAgIHN3aXRjaCAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAg
Ly8gSWYgdGhlIEpJVCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhlbiBhc3N1bWUg
dGhhdCB0aGlzIHRha2VzIHNsb3cgcGF0aC4KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19w
dXRfYnlfaWRfcmVwbGFjZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQogICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KAogICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1
aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cygKLSAgICAgICAgICAgICAgICBTaW1wbGVSZXBsYWNlLAotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksCi0gICAgICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICBvZmZzZXQp
OworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCksIG9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBhY2Nl
c3NfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgpAQCAtMTUxLDggKzE0OCw3IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAogICAgICAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKLSAg
ICAgICAgICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLAorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAg
ICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluKApAQCAtMTYwLDEzICsxNTYsNTEgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBzdHViSW5m
by0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpIDogMCwKICAgICAgICAgICAgICAg
ICBvZmZzZXQpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgYWNjZXNz
X3B1dF9ieV9pZF9saXN0OiB7CisgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Qg
PSBzdHViSW5mby0+dS5wdXRCeUlkTGlzdC5saXN0OworICAgICAgICAKKyAgICAgICAgUHV0QnlJ
ZFN0YXR1cyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIFB1dEJ5SWRBY2Nlc3M6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJv
ZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFyaWFudHMuYXBwZW5kKFB1
dEJ5SWRWYXJpYW50OjpzaW1wbGUoc3RydWN0dXJlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUo
KS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAg
ICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAg
ICAgICAgICAgICAgIGFjY2Vzcy5zdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLAor
ICAgICAgICAgICAgICAgICAgICBhY2Nlc3MuY2hhaW4oKSA/IGFkb3B0UmVmKG5ldyBJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
YWNjZXNzLnN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpIDogMCwKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBwb2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBw
cm9iYWJseSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzCi0gICAgICAgIC8vIHdlIGNvdWxk
IGRvIGFib3V0IGl0LgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
LCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0yMjMsNyArMjU3LDcgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgLy8gdGhl
IHNwZWNpYWxpemVkIHNsb3QuCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1w
bGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRC
eUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAg
IC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZv
cmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQpAQCAtMjc2LDcgKzMxMCwyNiBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0
aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CiAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2lt
cGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9m
ZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwg
dHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOworfQorCit2b2lkIFB1dEJ5SWRT
dGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5m
b3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1wbGU6
CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAg
b3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsNyBAQAogI2Rl
ZmluZSBQdXRCeUlkU3RhdHVzX2gKIAogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0jaW5j
bHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0
LmgiCisjaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHVi
SW5mby5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEgKzQ0
LDI3IEBAIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNhY2hl
ZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAotICAg
ICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBwcm9w
ZXJ0eSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhhcyB0
aGUgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3MgY2Fj
aGVkIGFzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUgcHJv
cGVydHkgdG8gb25lIHRoYXQKLSAgICAgICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBhbmQg
YSBkaXJlY3Qgc3RvcmUgdG8gdGhpcyBuZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRyYW5z
aXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUg
a2luZC4KKyAgICAgICAgU2ltcGxlLAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRh
a2Ugc2xvdyBwYXRoLgogICAgICAgICBUYWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAgICBQ
dXRCeUlkU3RhdHVzKCkKICAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgICAg
ICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAgICAg
ICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0
KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBz
dGF0ZSkKICAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0dXJl
KDApCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNo
YWluKDApCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQ
YXRoKTsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUgc3Rh
dGUsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSwKLSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
PiBzdHJ1Y3R1cmVDaGFpbiwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAg
ICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0dXJl
KQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBtX3N0
cnVjdHVyZUNoYWluKHN0cnVjdHVyZUNoYWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
KyAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAgICAg
ICA6IG1fc3RhdGUoU2ltcGxlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09IE5v
SW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1Y3R1
cmUpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0gIW1f
bmV3U3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNp
dGlvbikgJiYgbV9zdHJ1Y3R1cmVDaGFpbikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0g
Tm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNldCA9
PSBpbnZhbGlkT2Zmc2V0KSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9j
ayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlk
KTsKQEAgLTEwMSwxNCArNzYsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJv
b2wgaXNTaW1wbGVSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVSZXBs
YWNlOyB9Ci0gICAgYm9vbCBpc1NpbXBsZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IFNpbXBsZVRyYW5zaXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1Y3R1
cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0gICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVyZTsg
fQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0
QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0K
KyAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRv
cltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJM
RShERkdfSklUKQpAQCAtMTIwLDEwICs5Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1dEJ5
SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgU3Ry
dWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwot
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwotICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4g
bV92YXJpYW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRC
eUlkVmFyaWFudC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFudDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAw
KTsKK30KKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmlu
dCgiPFJlcGxhY2U6ICIsIGluQ29udGV4dChzdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsICIsIG9m
ZnNldCgpLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVHJhbnNp
dGlvbjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAgICAgICAgIjxUcmFuc2l0aW9uOiAiLCBp
bkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCisgICAgICAgICAgICBp
bkNvbnRleHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLAorICAgICAgICAgICAgcG9p
bnRlckR1bXBJbkNvbnRleHQoc3RydWN0dXJlQ2hhaW4oKSwgY29udGV4dCksICIsICIsIG9mZnNl
dCgpLCAiPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAorI2RlZmlu
ZSBQdXRCeUlkVmFyaWFudF9oCisKKyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgi
CisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFB1dEJ5SWRWYXJpYW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RT
ZXQsCisgICAgICAgIFJlcGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24KKyAgICB9OworICAgIAor
ICAgIFB1dEJ5SWRWYXJpYW50KCkKKyAgICAgICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAs
IG1fb2xkU3RydWN0dXJlKDApCisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKKyAgICAgICAg
LCBtX29mZnNldChpbnZhbGlkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHJlcGxhY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAorICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVj
dHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgICAgIFBhc3NSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
KyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
b2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9uZXdTdHJ1Y3R1
cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgICAgIHJlc3VsdC5tX3N0cnVjdHVyZUNoYWluID0gc3Ry
dWN0dXJlQ2hhaW47CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
bik7CisgICAgICAgIHJldHVybiBtX25ld1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0
dXJlQ2hhaW4uZ2V0KCk7CisgICAgfQorICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBt
X29mZnNldDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBTdHJ1Y3R1cmUqIG1fb2xkU3Ry
dWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7CisgICAgUmVmUHRyPEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3RydWN0dXJlQ2hhaW47CisgICAgUHJvcGVydHlPZmZzZXQg
bV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dEJ5SWRW
YXJpYW50X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224990</attachid>
            <date>2014-02-22 20:22:54 -0800</date>
            <delta_ts>2014-02-22 20:38:37 -0800</delta_ts>
            <desc>more stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56790</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBACiAJCTBGOTMzMkEzMTRDQTdE
RDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyQTUxNENBN0RERDAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTNCNEE5
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNG
QzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVBy
b2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZF
RjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAv
KiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODMyLDYgKzE4
MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkU3RhdHVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJ
ZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QjE0Q0E3REMx
MDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRB
NzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2Zp
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NkVCQjExNjY3NkVGNDAwOEJB
REUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBACiAJCQkJMEZDOTdGMzIxODIwMjBENzAw
MkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmggKi8sCiAJ
CQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJ
CTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8sCisJCQkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLywKKwkJCQkwRjkz
QjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLywKIAkJCQkwRjlGQzhD
MTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJCTBGRjYwQUJGMTY3NDBGODEw
MDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJCQkwRkY2MEFDMDE2NzQwRjgx
MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAtNTM4Myw2ICs1Mzg5LDcgQEAK
IAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZf
NjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5M0I0QUExOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODcz
QTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNzYsNiArNjE4Myw3IEBACiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAwQ0I2N0Y4IC8q
IERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QjFDQkQxODYx
MjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3
IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNp
b24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkxMSW50
RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NiwxNSArNTgsMTUgQEAgUHV0
QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5nZXQoKTsKICAgICBpZiAoIXN0
cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwg
MCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTElu
dDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29m
X2xpbmUpKSB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5v
SW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7
CiAgICAgfQogICAgIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwpAQCAtODEsMTQgKzgzLDE0IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJu
IFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7Cisg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLCBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisg
ICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLAogICAgICAgICBjaGFpbiA/IGFkb3B0UmVm
KG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hh
aW4pKSA6IDAsCiAgICAgICAgIG9mZnNldCk7CiAjZWxzZQotICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTEwMiw3ICsxMDQs
NyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5
dGVjb2RlSW5kZXgpCiAgICAgICAgIHx8IGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9j
aywgYnl0ZWNvZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xv
d1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpOwogICAgIFB1dEJ5SWRTdGF0
dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1
YkluZm8sIHVpZCk7CkBAIC0xMTIsNyArMTE0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZSAvLyBFTkFCTEUoSklU
KQogICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKQEAgLTEyMywy
NSArMTI1LDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJl
c2V0QnlHQykKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwg
MCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwogCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNh
c2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBJZiB0aGUgSklUIHNhdyBpdCBidXQgZGlkbid0
IG9wdGltaXplIGl0LCB0aGVuIGFzc3VtZSB0aGF0IHRoaXMgdGFrZXMgc2xvdyBwYXRoLgotICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlk
T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CiAgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVw
bGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAg
ICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAg
ICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJ
ZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAwLCAw
LAotICAgICAgICAgICAgICAgIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxh
Y2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQotICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6
CkBAIC0xNTEsOCArMTUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJl
LT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24s
CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUu
Z2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3Ry
dWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0
aW9uLmNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCkBAIC0xNjAs
MTMgKzE1OCw1MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAg
ICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdl
dCgpKSkgOiAwLAogICAgICAgICAgICAgICAgIG9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNl
dCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgUG9s
eW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLT51LnB1dEJ5SWRMaXN0Lmxpc3Q7
CisgICAgICAgIAorICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nl
c3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0
Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVw
bGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAg
ICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJl
LCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjog
eworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICAg
ICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJs
b2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZh
cmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1
cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBhY2Nlc3Mu
Y2hhaW4oKSA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nl
c3MuY2hhaW4oKSkpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhbmRsZSBwb2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBwcm9iYWJseSBoYXZlIHNvbWUgaW50ZXJl
c3RpbmcgdGhpbmdzCi0gICAgICAgIC8vIHdlIGNvdWxkIGRvIGFib3V0IGl0LgotICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQog
fQogI2VuZGlmCkBAIC0yMjMsNyArMjU5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxpemVkIHNsb3QuCiAgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAs
IDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1
Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRo
YXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlz
IHJlYWxseQpAQCAtMjc2LDcgKzMxMiwyNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2
ZVNwZWNpZmljVmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAg
ICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJl
LCB0cmFuc2l0aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5
SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFz
ZSgpLCBvZmZzZXQpOworfQorCit2b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3Jt
YXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIs
IGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0
aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTY0NTQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsOCArMjcsNyBAQAogI2RlZmluZSBQdXRCeUlkU3Rh
dHVzX2gKIAogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAi
UHV0QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEgKzQ0LDI3IEBAIHB1YmxpYzoK
ICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5v
IGluZm9ybWF0aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNh
Y2hlZCBhcyBhIGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgY2FzZXMg
d2hlcmUgdGhlIG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhhcyB0aGUgcHJvcGVydHkuCi0g
ICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgdHJhbnNp
dGlvbiBmcm9tIG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUgcHJvcGVydHkgdG8gb25lIHRo
YXQKLSAgICAgICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBhbmQgYSBkaXJlY3Qgc3RvcmUg
dG8gdGhpcyBuZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAg
IC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAg
U2ltcGxlLAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgog
ICAgICAgICBUYWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAgICBQdXRCeUlkU3RhdHVzKCkK
ICAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1
cmUoMCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAgICAgICAsIG1fc3RydWN0dXJl
Q2hhaW4oMCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKICAgICAgICAg
OiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0dXJlKDApCi0gICAgICAgICwg
bV9uZXdTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKDApCi0gICAgICAg
ICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAg
ICAgCi0gICAgUHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUgc3RhdGUsCi0gICAgICAgIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwK
LSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFp
biwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICA6IG1fc3RhdGUoc3Rh
dGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlKQotICAgICAgICAsIG1f
bmV3U3RydWN0dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKHN0
cnVjdHVyZUNoYWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICBQdXRCeUlkU3Rh
dHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2lt
cGxlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwg
bV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICBB
U1NFUlQoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0gIW1fbmV3U3RydWN0dXJlKTsK
LSAgICAgICAgQVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgJiYgbV9zdHJ1
Y3R1cmVDaGFpbikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8
fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0
KSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKICAg
ICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIFN0dWJJbmZvTWFw
JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKQEAgLTEwMSwxNCAr
NzYsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGVSZXBs
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVSZXBsYWNlOyB9Ci0gICAgYm9v
bCBpc1NpbXBsZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVRy
YW5zaXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9
PSBTaW1wbGU7IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IFRha2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlKiBuZXdT
dHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVyZTsgfQotICAgIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1
cmVDaGFpbi5nZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+
JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRC
eUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2lu
ZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShERkdfSklUKQpAQCAt
MTIwLDEwICs5Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0
ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBs
KiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgU3RydWN0dXJlKiBtX29sZFN0
cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIFJlZlB0cjxJbnRl
bmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwotICAgIFByb3BlcnR5T2Zmc2V0
IG1fb2Zmc2V0OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9pZCBQ
dXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90
U2V0OgorICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAg
ICI8UmVwbGFjZTogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQp
LCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBj
YXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8VHJhbnNp
dGlvbjogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAi
IC0+ICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwg
Y29udGV4dCksICIsICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChzdHJ1Y3R1
cmVDaGFpbigpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQdXRCeUlkVmFyaWFudF9oCisjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKKworI2lu
Y2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNl
dC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHV0QnlJZFZhcmlhbnQgeworcHVibGlj
OgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAg
ICAgICAgVHJhbnNpdGlvbgorICAgIH07CisgICAgCisgICAgUHV0QnlJZFZhcmlhbnQoKQorICAg
ICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKKyAgICAg
ICAgLCBtX25ld1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVwbGFj
ZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAorICAgICAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgICAgIFBh
c3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgICAgIHJlc3VsdC5tX29sZFN0
cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0g
bmV3U3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmVDaGFpbiA9IHN0cnVjdHVy
ZUNoYWluOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0g
Tm90U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVy
ZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBs
YWNlKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAg
fQorICAgIAorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZUNoYWluLmdldCgpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOwor
ICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgU3Ry
dWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwor
ICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOworICAg
IFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBQdXRCeUlkVmFyaWFudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0MCw3ICsxNjQwLDcgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykKICAgICAgICAgICAgIHNldC5hZGRBbGwobm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBmaWx0ZXIodmFs
dWUsIHNldCk7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc2V0KTsKICAgICAgICAg
Zm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0x
NjQ4LDcgKzE2NDgsNjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAg
ICAgICAgCisgICAgICAgIAorICAgIGNhc2UgTXVsdFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEFT
U0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91
bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KKworICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIGJv
b2wgZG9uZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKSAhPSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2Rl
LT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZl
U3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pOworICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1f
Z3JhcGgsIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZl
U3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb25lKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0
IG5ld1NldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
UmVwbGFjZSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
bmV3U2V0LmFkZEFsbCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAgICAgICBpZiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisg
ICAgICAgICAgICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1ZSwgc2V0KSBhcyBh
IHdheSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtzIGJlY2F1c2UKKyAg
ICAgICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBiZSBUT1AgYmVmb3Jl
IHRoaXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKKyAgICAgICAgLy8gd2F5IG9mIHNldHRp
bmcuCisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYg
KHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKQEAgLTE2ODUsMTggKzE3MzgsMjAgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRl
bnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWRE
aXJlY3QpOwotICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAg
ICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlv
bigpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1
Y3R1cmVzKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHMo
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhdHVzLmlz
U2ltcGxlKCkgJiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgeworICAgICAgICAgICAgICAg
IGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChz
dGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBzdGF0dXNbMF0u
bmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1
Y3R1cmVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3Rh
bnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc5LDcgKzE3OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRT
dGF0dXMmKTsKLSAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJp
YW50Jik7CisgICAgdm9pZCBlbWl0UHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpOworICAgIHZv
aWQgaGFuZGxlUHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBib29s
IGlzRGlyZWN0KTsKKyAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKFN0cnVjdHVyZSosIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKIAogICAgIE5vZGUqIGdldFNjb3BlKGJvb2wg
c2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKQEAgLTE4MzQsMTUgKzE4MzksMTYg
QEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hlY2tzKGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmVtaXRQ
cm90b3R5cGVDaGVja3MoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEludGVuZGVkU3RydWN0
dXJlQ2hhaW4qIGNoYWluKQogewogICAgIE5vZGUqIGJhc2UgPSAwOwotICAgIG1fZ3JhcGguY2hh
aW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuY2hhaW4oKSk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50
U3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKTsK
KyAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShjaGFpbik7CisgICAgU3RydWN0dXJlKiBj
dXJyZW50U3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0
ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5jaGFpbigpLT5zaXpl
KCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFpbi0+c2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUt
PnByb3RvdHlwZUZvckxvb2t1cChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAg
ICAgICBjdXJyZW50U3RydWN0dXJlID0gdmFyaWFudC5jaGFpbigpLT5hdChpKTsKKyAgICAgICAg
Y3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5hdChpKTsKICAgICAgICAgYmFzZSA9IGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsK
ICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZSk7CkBAIC0xODY4LDEyICsxODc0LDE4IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkp
CisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlk
KCk7CisgICAgCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3Mg
Zm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAg
Ly8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0
aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5k
IHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgogICAgICAgICBmb3IgKHVuc2ln
bmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudElu
ZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNo
YWluKCkpCi0gICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyhnZXRCeUlkU3RhdHVz
W3ZhcmlhbnRJbmRleF0pOworICAgICAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5jaGFpbigpKSB7CisgICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcygKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZVNl
dCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBnZXRCeUlkU3Rh
dHlzW3ZhcmlhbnRJbmRleF0uY2hhaW4oKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0CkBAIC0xODk1LDgg
KzE5MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAg
ICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAg
ICBpZiAodmFyaWFudC5jaGFpbigpKQotICAgICAgICBiYXNlID0gZW1pdFByb3RvdHlwZUNoZWNr
cyh2YXJpYW50KTsKKyAgICBpZiAodmFyaWFudC5jaGFpbigpKSB7CisgICAgICAgIGJhc2UgPSBl
bWl0UHJvdG90eXBlQ2hlY2tzKAorICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5z
aW5nbGV0b25TdHJ1Y3R1cmUoKSwgdmFyaWFudC5jaGFpbigpKTsKKyAgICB9CiAgICAgCiAgICAg
Ly8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNl
IG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25l
IHdpdGgKQEAgLTE5MTgsNiArMTkzMiwxMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlJZCgKICAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBwcmVkaWN0aW9uLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKIH0KIAordm9pZCBCeXRlQ29kZVBh
cnNlcjo6ZW1pdFB1dEJ5SWQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpCit7CisgICAgaWYgKGlzRGlyZWN0KQor
ICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVy
KSwgYmFzZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBP
cEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKK30KKwordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKKyAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlk
U3RhdHVzLCBib29sIGlzRGlyZWN0KQoreworICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBs
ZSgpKSB7CisgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAg
IGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBp
bGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGlu
ZWRQdXRCeUlkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFu
dHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghcHV0QnlJ
ZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGVtaXRQcm90b3R5cGVDaGVja3MoCisgICAg
ICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5vbGRTdHJ1Y3R1cmUo
KSwKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVj
dHVyZUNoYWluKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YS5hZGQoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlh
bnRzKCk7CisgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OworICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFz
ZSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChnZXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIAorICAgIGlmICh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICBhZGRUb0dyYXBoKENoZWNr
U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1
cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmll
ck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC5j
b21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJ
bmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgaWYg
KHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSAmJiAhdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5p
c1N0aWxsVmFsaWQoKSkgeworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVt
YmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1f
Z3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Cisg
ICAgaWYgKCFpc0RpcmVjdCkKKyAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLCB2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOworICAgIAorICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICBTdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKAorICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisKKyAgICBpZiAodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAhPSB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHRo
ZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCisgICAgICAgIC8vIHN0b3JpbmcgaW50byB0aGUg
b3V0LW9mLWxpbmUgc3RvcmFnZS4KKyAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBpZiAoIXZhcmlh
bnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKKyAgICAgICAg
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LAorICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1
dHRlcmZseSwgYmFzZSk7CisgICAgfQorICAgICAgICAgICAgICAgIAorICAgIGFkZFRvR3JhcGgo
UHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBQdXRCeU9mZnNldCwKKyAgICAgICAgT3BJ
bmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAorICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UsCisgICAgICAgIGJhc2UsCisgICAgICAgIHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKKyAgICBzdG9yYWdl
QWNjZXNzRGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgIG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworCisgICAgaWYgKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3Rp
Y2VJbmxpbmVkUHV0QnlJZCgpOworfQorCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9Q
YXJzZUJsb2NrKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMu
c2l6ZSgpOyArK2kpCkBAIC0yNTgwLDkxICsyNzExLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9zLAogICAgICAgICAgICAgICAgIGN1
cnJlbnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVy
XSk7Ci0gICAgICAgICAgICBib29sIGNhbkNvdW50QXNJbmxpbmVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKSB7Ci0gICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgICAgIGNhbkNvdW50QXNJbmxpbmVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwdXRC
eUlkU3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHB1dEJ5SWRT
dGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlUHV0
QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgcHV0QnlJZFN0YXR1cy5vZmZzZXQoKSwg
dmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgKLSAgICAgICAgICAgICAgICBwdXRCeUlk
U3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpCi0gICAgICAgICAgICAgICAgJiYgKCFwdXRCeUlk
U3RhdHVzLnN0cnVjdHVyZUNoYWluKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgcHV0QnlJZFN0
YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShwdXRCeUlkU3Rh
dHVzLnN0cnVjdHVyZUNoYWluKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAgICAgICAgICAg
IGlmICghZGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5v
bGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjaygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90
b3R5cGUoKS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwdXRC
eUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hh
aW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjayhwcm90b3R5cGUuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm9sZFN0cnVj
dHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7Ci0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0K
LSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSkpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAgICAgIT0gcHV0QnlJZFN0YXR1cy5uZXdT
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0aGUgcHJvcGVydHkgc3Rv
cmFnZSB0aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAv
LyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpOwotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVz
Lm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRh
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdldEJ1dHRl
cmZseSwgYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0
dXMub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YmFzZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICAgICAg
UHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuc2l6ZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
LAotICAgICAgICAgICAgICAgICAgICBiYXNlLAotICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gcHV0QnlJZFN0YXR1cy5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNz
RGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAgICAgICAgICAgICAg
ICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRpcmVjdCkKLSAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBi
YXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FuQ291bnRBc0lubGluZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGNhbkNvdW50QXNJ
bmxpbmVkICYmIG1fZ3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Ci0KKyAgICAgICAgICAgIGhh
bmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMs
IGRpcmVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAg
ICB9CiAKQEAgLTMyNTksMTEgKzMzMDcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKICAgICAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAg
ICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KCptX3ZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSB8fCBzdGF0dXNbMF0ua2luZCgpICE9IFB1dEJ5
SWRWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3Bl
KSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2Vs
bENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzLm9sZFN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0
cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVyZSgpKTsKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51
bWJlciwgc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZzZXQ+KG9wZXJhbmQpLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50
aWwgYWZ0ZXIgcHV0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMTUsOSArMjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsK
LSAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLApAQCAtMjI1LDk2ICsyMjIsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3Qp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKLSAgICAgICAgICAgICAgICAvLyBhbmQg
bWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBh
bmQgbm90Ci0gICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0YXR1
c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2lu
dCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVl
ZHNDZWxsQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBo
YW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNl
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEg
PSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0
dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShzdGF0dXMuc3RydWN0
dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBFZGdlIHBy
b3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cy5p
c1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgY2hpbGRFZGdlLAotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRp
b24oKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBF
ZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9y
YWdlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBvcmlnaW4sIAotICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwg
RWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
LSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKQEAgLTQ0NSw2ICszNTksMTA3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwog
ICAgIH0KIAorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKwor
ICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKKyAgICAgICAgYm9v
bCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWND
ZWxsOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNl
LCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCisgICAgICAgIC8vIGFuZCBt
YWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFu
ZCBub3QKKyAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAgbV9pbnRlcnBy
ZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlm
IChuZWVkc1dhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0
dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgfSBlbHNlIGlmIChuZWVkc0NlbGxDaGVjaykgewor
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7CisgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25v
d25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uRGF0
YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAgICAgICAgICAg
U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
UHV0QnlJZCkgeworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0
aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXND
ZWxsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0dXJl
Q2hhaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHZhcmlhbnQuc3Ry
dWN0dXJlQ2hhaW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2VsbCgp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAgICAg
CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKKyAgICAgICAgZWxzZSBpZiAoCisgICAg
ICAgICAgICB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQorICAgICAg
ICAgICAgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNl
dCgpKSk7CisgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCisgICAgICAgICAgICAgICAgb3JpZ2luLCBP
cEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9y
aWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwKKyAg
ICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCisgICAgICAg
ICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBj
aGlsZEVkZ2UpKSk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBFZGdlKHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGRO
b2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRh
KSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
c2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9y
ZUJhcnJpZXIsIG9yaWdpbiwgCisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSwgS25vd25DZWxsVXNlKSwKKyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgp
LCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQg
PSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgfQorCiAgICAgdm9pZCBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4
SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODMwLDYgKzgzMCw3IEBAIHB1YmxpYzoK
ICAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hEYXRhOwogICAgIEJhZzxTd2l0Y2hEYXRhPiBt
X3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlP
ZmZzZXREYXRhOworICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zm
c2V0RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlh
YmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFt
ZXM7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorYm9vbCBNdWx0aVB1dEJ5T2Zmc2V0RGF0
YTo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICh2YXJpYW50c1tpXS5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEJyYW5jaFRhcmdldDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEzIEBAIHN0
cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CiAgICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAy
PiB2YXJpYW50czsKIH07CiAKK3N0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZh
cmlhbnRzOworICAgIAorICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OworfTsKKwog
c3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3Vz
U3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUs
NiArMTc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdl
dEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIG1hY3JvKE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0VHlw
ZWRBcnJheUJ5dGVPZmZzZXQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3Bl
LCBOb2RlUmVzdWx0SlMpIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224991</attachid>
            <date>2014-02-22 20:38:37 -0800</date>
            <delta_ts>2014-02-23 19:52:10 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>75196</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBA
CisyMDE0LTAyLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBkbyBwb2x5bW9ycGhpYyBQdXRCeUlkIGlubGluaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkyMTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jl
c3MsIGFsbW9zdCBkb25lLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVz
OjpkdW1wKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChK
U0M6OlB1dEJ5SWRTdGF0dXM6OlB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjppc1NpbXBsZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om51bVZhcmlh
bnRzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6dmFyaWFudHMpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjphdCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om9w
ZXJhdG9yW10pOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRW
YXJpYW50Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZh
cmlhbnQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAg
IChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6aXNTZXQpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6
UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50
OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZUNoYWluKToKKyAg
ICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjplbWl0UHJvdG90eXBlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmVtaXRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMp
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZz
ZXQpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aVB1
dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6TXVs
dGlQdXRCeU9mZnNldERhdGE6OnJlYWxsb2NhdGVzU3RvcmFnZSk6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzTXVsdGlQdXRCeU9mZnNldERhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Om11bHRpUHV0QnlPZmZzZXREYXRhKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
Ojpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlOjppZGVudGlmeVJlZHVuZGFudFN0cnVjdHVyZUNoZWNrcyk6CisgICAgICAgIChKU0M6
OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNr
cyk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisKIDIw
MTQtMDItMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZW1vdmUgc29tZSB1bnJlYWNoYWJsZSBjb2RlICgtV3VucmVhY2hhYmxlLWNvZGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDYgKzgyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9QcmVj
aXNlSnVtcFRhcmdldHMuY3BwCiAgICAgYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwCiAgICAgYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKyAgICBi
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKICAgICBieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNl
LmNwcAogICAgIGJ5dGVjb2RlL1NhbXBsaW5nVG9vbC5jcHAKICAgICBieXRlY29kZS9TcGVjaWFs
UG9pbnRlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw4IEBAIGphdmFzY3JpcHRj
b3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0S2luZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmggXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0
cy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3Rh
dHVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRW
YXJpYW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVj
ZVdoaXRlc3BhY2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
U2FtcGxpbmdUb29sLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFNwZWNpYWxQb2ludGVyLmNwcCIgLz4KQEAgLTg1OCw2ICs4NTksNyBAQAogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VK
dW1wVGFyZ2V0cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
QnlJZFN0YXR1cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
QnlJZFZhcmlhbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1
dEtpbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVjZVdo
aXRlc3BhY2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFNhbXBs
aW5nVG9vbC5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTcsNiArMzU3LDggQEAKIAkJ
MEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTkxNENBN0RDMTAwODVG
M0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwICovOyB9OwogCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYz
QzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzJB
NTE0Q0E3REREMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3Ry
dWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE3MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi87IH07CisJCTBGOTNCNEFBMThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJE
OUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTZFQkIzMTY2NzZFRjYwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRo
SklUVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NzQ5NzExNjg3
QURFNDAwQTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJ
bmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE4MzIsNiArMTgzNCw4IEBACiAJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5QTE0Q0E3
REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQdXRCeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlk
VmFyaWFudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRF
MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2RUJC
MTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrV2l0aEpJVFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpTQ2VsbElubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDZWxsSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDU4NSw2ICs0NTg5LDggQEAKIAkJCQkwRkM5
N0YzMjE4MjAyMEQ3MDAyQzlCMjYgLyogUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG9pbnQuaCAqLywKIAkJCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5jcHAgKi8sCiAJCQkJMEY5MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMu
aCAqLywKKwkJCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3Bw
ICovLAorCQkJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oICov
LAogCQkJCTBGOUZDOEMxMTRFMUI1RkIwMEQ1MkFFMCAvKiBQdXRLaW5kLmggKi8sCiAJCQkJMEZG
NjBBQkYxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwICovLAogCQkJCTBG
RjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggKi8sCkBAIC01Mzgz
LDYgKzUzODksNyBAQAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAw
Rjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDA4NzNFMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjE3Niw2ICs2MTgzLDcgQEAKIAkJCQkwRjlGQjRGNDE3RkNC
OTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjZCMUNCRDE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVy
R2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0
MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY5M0I0QTkxOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDhBMzI5MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ4NTMyNzE4
N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAj
aW5jbHVkZSAiTExJbnREYXRhLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU2LDE1
ICs1OCwxNSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAKICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGluc3RydWN0aW9uWzRdLnUuc3RydWN0dXJlLmdldCgp
OwogICAgIGlmICghc3RydWN0dXJlKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0lu
Zm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgCiAgICAgaWYgKGluc3RydWN0aW9uWzBdLnUu
b3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUobGxpbnRfb3BfcHV0X2J5X2lkKQogICAgICAgICB8
fCBpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1
dF9ieV9pZF9vdXRfb2ZfbGluZSkpIHsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAg
ICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAg
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAgICAgCi0g
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVJlcGxhY2UsIHN0cnVjdHVyZSwgMCwg
MCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVj
dHVyZSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CkBAIC04MSwxNCArODMsMTQg
QEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogICAgIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9m
aWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQot
ICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZh
bGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7
CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoCi0gICAgICAgIFNpbXBsZVRyYW5zaXRp
b24sIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLAorICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6
dHJhbnNpdGlvbigKKyAgICAgICAgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsCiAgICAgICAgIGNo
YWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4ocHJvZmlsZWRCbG9jaywg
c3RydWN0dXJlLCBjaGFpbikpIDogMCwKICAgICAgICAgb2Zmc2V0KTsKICNlbHNlCi0gICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7
CisgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAjZW5kaWYKIH0KIApA
QCAtMTAyLDcgKzEwNCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAocHJvZmlsZWRCbG9jay0+bGlrZWx5VG9U
YWtlU2xvd0Nhc2UoYnl0ZWNvZGVJbmRleCkKICAgICAgICAgfHwgaGFzRXhpdFNpdGUobG9ja2Vy
LCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAogICAgIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbyA9IG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSk7CiAg
ICAgUHV0QnlJZFN0YXR1cyByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm8obG9ja2VyLCBwcm9m
aWxlZEJsb2NrLCBzdHViSW5mbywgdWlkKTsKQEAgLTExMiw3ICsxMTQsNyBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgcmV0dXJuIHJlc3VsdDsKICNlbHNl
IC8vIEVOQUJMRShKSVQpCiAgICAgVU5VU0VEX1BBUkFNKG1hcCk7Ci0gICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIApAQCAtMTIzLDI1ICsxMjUsMjIgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpj
b21wdXRlRm9yUwogICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygpOwogICAgIAogICAgIGlm
IChzdHViSW5mby0+cmVzZXRCeUdDKQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAKICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NU
eXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfdW5zZXQ6CiAgICAgICAgIC8vIElmIHRoZSBKSVQgc2F3
IGl0IGJ1dCBkaWRuJ3Qgb3B0aW1pemUgaXQsIHRoZW4gYXNzdW1lIHRoYXQgdGhpcyB0YWtlcyBz
bG93IHBhdGguCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAs
IDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6
IHsKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgK
ICAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAgICAgaWYg
KGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0
dXMoCi0gICAgICAgICAgICAgICAgU2ltcGxlUmVwbGFjZSwKLSAgICAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLAotICAgICAg
ICAgICAgICAgIDAsIDAsCi0gICAgICAgICAgICAgICAgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSgKKyAgICAgICAgICAgICAgICBzdHViSW5mby0+
dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBvZmZzZXQpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAsIDAs
IDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFu
c2l0aW9uX25vcm1hbDoKQEAgLTE1MSw4ICsxNTAsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNp
dGlvbi5zdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKICAgICAgICAgICAgICAgICAqcHJvZmls
ZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkg
ewotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoCi0gICAgICAgICAgICAgICAgU2lt
cGxlVHJhbnNpdGlvbiwKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNp
dGlvbigKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2
aW91c1N0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUu
cHV0QnlJZFRyYW5zaXRpb24uY2hhaW4gPyBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbigKQEAgLTE2MCwxMyArMTU4LDUxIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5z
aXRpb24uY2hhaW4uZ2V0KCkpKSA6IDAsCiAgICAgICAgICAgICAgICAgb2Zmc2V0KTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAw
LCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDog
eworICAgICAgICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0ID0gc3R1YkluZm8tPnUucHV0
QnlJZExpc3QubGlzdDsKKyAgICAgICAgCisgICAgICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgUHV0QnlJZEFjY2VzcyYgYWNjZXNzID0gbGlzdC0+YXQoaSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRC
eUlkQWNjZXNzOjpSZXBsYWNlOiB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAg
ICAgICAgICAgICAgIHJlc3VsdC5tX3ZhcmlhbnRzLmFwcGVuZChQdXRCeUlkVmFyaWFudDo6cmVw
bGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeUlkQWNjZXNz
OjpUcmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0K
KyAgICAgICAgICAgICAgICAgICAgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50
bHkoKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhcmlhbnRzLmFw
cGVuZChQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYWNj
ZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MubmV3U3RydWN0dXJlKCksCisgICAgICAgICAgICAg
ICAgICAgIGFjY2Vzcy5jaGFpbigpID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hh
aW4oCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLCBhY2Nlc3Mub2xkU3Ry
dWN0dXJlKCksIGFjY2Vzcy5jaGFpbigpKSkgOiAwLAorICAgICAgICAgICAgICAgICAgICBvZmZz
ZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgaGFuZGxlIHBvbHltb3JwaGljIFB1dEJ5SWQuIFdlIHByb2JhYmx5IGhh
dmUgc29tZSBpbnRlcmVzdGluZyB0aGluZ3MKLSAgICAgICAgLy8gd2UgY291bGQgZG8gYWJvdXQg
aXQuCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAsIDAsIDAs
IGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTIyMyw3ICsyNTksNyBAQCBQdXRCeUlkU3RhdHVz
IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAvLyB0aGUgc3BlY2lhbGl6
ZWQgc2xvdC4KICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVJlcGxhY2Us
IHN0cnVjdHVyZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KTsKICAgICB9CiAgICAgCiAgICAgLy8gT3VyIGh5
cG90aGVzaXMgaXMgdGhhdCB3ZSdyZSBkb2luZyBhIHRyYW5zaXRpb24uIEJlZm9yZSB3ZSBwcm92
ZSB0aGF0IHRoaXMgaXMgcmVhbGx5CkBAIC0yNzYsNyArMzEyLDI2IEBAIFB1dEJ5SWRTdGF0dXMg
UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5z
aXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsKICAgICBBU1NFUlQoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVUcmFuc2l0
aW9uLCBzdHJ1Y3R1cmUsIHRyYW5zaXRpb24sIGNoYWluLnJlbGVhc2UoKSwgb2Zmc2V0KTsKKyAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oc3RydWN0dXJlLCB0cmFuc2l0aW9u
LCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7Cit9CisKK3ZvaWQgUHV0QnlJZFN0YXR1czo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAg
IGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCIoTm9JbmZvcm1hdGlvbiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAg
b3V0LnByaW50KCIoIiwgbGlzdER1bXAobV92YXJpYW50cyksICIpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQucHJpbnQo
IihUYWtlc1Nsb3dQYXRoKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCShy
ZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw4ICsyNyw3IEBACiAjZGVm
aW5lIFB1dEJ5SWRTdGF0dXNfaAogCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKLSNpbmNs
dWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQu
aCIKKyNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJ
bmZvLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC00NSw1MSArNDQs
MjcgQEAgcHVibGljOgogICAgIGVudW0gU3RhdGUgewogICAgICAgICAvLyBJdCdzIHVuY2FjaGVk
IHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCiAgICAgICAgIE5vSW5mb3JtYXRpb24sCi0gICAg
ICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgZGlyZWN0IHN0b3JlIGludG8gYW4gb2JqZWN0IHByb3Bl
cnR5IGZvciBjYXNlcyB3aGVyZSB0aGUgb2JqZWN0Ci0gICAgICAgIC8vIGFscmVhZHkgaGFzIHRo
ZSBwcm9wZXJ0eS4KLSAgICAgICAgU2ltcGxlUmVwbGFjZSwKLSAgICAgICAgLy8gSXQncyBjYWNo
ZWQgYXMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHN0cnVjdHVyZSB0aGF0IGxhY2tzIHRoZSBwcm9w
ZXJ0eSB0byBvbmUgdGhhdAotICAgICAgICAvLyBpbmNsdWRlcyB0aGUgcHJvcGVydHksIGFuZCBh
IGRpcmVjdCBzdG9yZSB0byB0aGlzIG5ldyBwcm9wZXJ0eS4KLSAgICAgICAgU2ltcGxlVHJhbnNp
dGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBzaW1wbGUgc3RvcmUgb2Ygc29tZSBr
aW5kLgorICAgICAgICBTaW1wbGUsCiAgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFr
ZSBzbG93IHBhdGguCiAgICAgICAgIFRha2VzU2xvd1BhdGgKICAgICB9OwogICAgIAogICAgIFB1
dEJ5SWRTdGF0dXMoKQogICAgICAgICA6IG1fc3RhdGUoTm9JbmZvcm1hdGlvbikKLSAgICAgICAg
LCBtX29sZFN0cnVjdHVyZSgwKQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKDApCi0gICAgICAg
ICwgbV9zdHJ1Y3R1cmVDaGFpbigwKQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQp
CiAgICAgewogICAgIH0KICAgICAKICAgICBleHBsaWNpdCBQdXRCeUlkU3RhdHVzKFN0YXRlIHN0
YXRlKQogICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUo
MCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAgICAgICAsIG1fc3RydWN0dXJlQ2hh
aW4oMCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1Bh
dGgpOwogICAgIH0KICAgICAKLSAgICBQdXRCeUlkU3RhdHVzKAotICAgICAgICBTdGF0ZSBzdGF0
ZSwKLSAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsCi0gICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlLAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+
IHN0cnVjdHVyZUNoYWluLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX29sZFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmUp
Ci0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKQotICAgICAgICAsIG1fc3Ry
dWN0dXJlQ2hhaW4oc3RydWN0dXJlQ2hhaW4pCi0gICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgIFB1dEJ5SWRTdGF0dXMoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCisgICAgICAg
IDogbV9zdGF0ZShTaW1wbGUpCiAgICAgewotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9J
bmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09ICFtX29sZFN0cnVjdHVy
ZSk7Ci0gICAgICAgIEFTU0VSVCgobV9zdGF0ZSAhPSBTaW1wbGVUcmFuc2l0aW9uKSA9PSAhbV9u
ZXdTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQoISgobV9zdGF0ZSAhPSBTaW1wbGVUcmFuc2l0
aW9uKSAmJiBtX3N0cnVjdHVyZUNoYWluKSk7Ci0gICAgICAgIEFTU0VSVCgobV9zdGF0ZSA9PSBO
b0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCkgPT0gKG1fb2Zmc2V0ID09
IGludmFsaWRPZmZzZXQpKTsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CiAg
ICAgfQogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiwgU3R1YkluZm9NYXAmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQp
OwpAQCAtMTAxLDE0ICs3NiwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlvbjsgfQogICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uOyB9Ci0gICAgYm9v
bCBpc1NpbXBsZVJlcGxhY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVJlcGxh
Y2U7IH0KLSAgICBib29sIGlzU2ltcGxlVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUgPT0gU2ltcGxlVHJhbnNpdGlvbjsgfQorICAgIGJvb2wgaXNTaW1wbGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQogICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQogICAgIAotICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7IH0KLSAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmV3U3RydWN0dXJlOyB9
Ci0gICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4oKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZUNoYWluLmdldCgpOyB9Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBj
b25zdCB7IHJldHVybiBtX3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxQdXRC
eUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50czsgfQor
ICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAjaWYgRU5BQkxF
KERGR19KSVQpCkBAIC0xMjAsMTAgKzk2LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgUHV0QnlJ
ZFN0YXR1cyBjb21wdXRlRnJvbUxMSW50KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIFN0cmluZ0ltcGwqIHVpZCk7CiAgICAgCiAgICAgU3RhdGUgbV9zdGF0ZTsKLSAgICBTdHJ1
Y3R1cmUqIG1fb2xkU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1cmU7Ci0g
ICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3RydWN0dXJlQ2hhaW47Ci0gICAg
UHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgVmVjdG9yPFB1dEJ5SWRWYXJpYW50LCAxPiBt
X3ZhcmlhbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlB1dEJ5
SWRWYXJpYW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFB1dEJ5SWRWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDAp
OworfQorCit2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgY2FzZSBOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgUmVwbGFjZToKKyAgICAgICAgb3V0LnByaW50
KAorICAgICAgICAgICAgIjxSZXBsYWNlOiAiLCBwb2ludGVyRHVtcEluQ29udGV4dChzdHJ1Y3R1
cmUoKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGNhc2UgVHJhbnNpdGlvbjoKKyAgICAgICAgb3V0LnByaW50KAorICAgICAg
ICAgICAgIjxUcmFuc2l0aW9uOiAiLCBwb2ludGVyRHVtcEluQ29udGV4dChvbGRTdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIgLT4gIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5l
d1N0cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgIiwKKyAgICAgICAgICAgIHBvaW50ZXJEdW1wSW5D
b250ZXh0KHN0cnVjdHVyZUNoYWluKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFB1dEJ5SWRWYXJpYW50X2gKKyNkZWZpbmUgUHV0QnlJZFZh
cmlhbnRfaAorCisjaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgorI2luY2x1ZGUg
IlByb3BlcnR5T2Zmc2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBQdXRCeUlkVmFy
aWFudCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgTm90U2V0LAorICAgICAg
ICBSZXBsYWNlLAorICAgICAgICBUcmFuc2l0aW9uCisgICAgfTsKKyAgICAKKyAgICBQdXRCeUlk
VmFyaWFudCgpCisgICAgICAgIDogbV9raW5kKE5vdFNldCkKKyAgICAgICAgLCBtX29sZFN0cnVj
dHVyZSgwKQorICAgICAgICAsIG1fbmV3U3RydWN0dXJlKDApCisgICAgICAgICwgbV9vZmZzZXQo
aW52YWxpZE9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeUlkVmFy
aWFudCByZXBsYWNlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
CisgICAgeworICAgICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBSZXBsYWNlOworICAgICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHRyYW5zaXRpb24o
CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSwKKyAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVD
aGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJZFZhcmlh
bnQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gVHJhbnNpdGlvbjsKKyAgICAgICAg
cmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gb2xkU3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9u
ZXdTdHJ1Y3R1cmUgPSBuZXdTdHJ1Y3R1cmU7CisgICAgICAgIHJlc3VsdC5tX3N0cnVjdHVyZUNo
YWluID0gc3RydWN0dXJlQ2hhaW47CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSAhPSBOb3RTZXQ7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFpc1NldCgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgcmV0dXJu
IG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24gfHwg
a2luZCgpID09IFJlcGxhY2UpOworICAgICAgICByZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAg
fQorICAgIAorICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX25ld1N0
cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0
dXJlQ2hhaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0
aW9uKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlQ2hhaW4uZ2V0KCk7CisgICAgfQorICAg
IAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBLaW5kIG1f
a2luZDsKKyAgICBTdHJ1Y3R1cmUqIG1fb2xkU3RydWN0dXJlOworICAgIFN0cnVjdHVyZSogbV9u
ZXdTdHJ1Y3R1cmU7CisgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fc3RydWN0
dXJlQ2hhaW47CisgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFB1dEJ5SWRWYXJpYW50X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQwLDcg
KzE2NDAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgc2V0LmFkZEFsbChub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldLnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAg
ICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBz
ZXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KQEAgLTE2NDgsNyArMTY0OCw2MCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeU9mZnNldDogewogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgICAgICAgICAKKyAgICAgICAgCisgICAgY2FzZSBNdWx0UHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2Ug
ZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgorCisgICAgICAgIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgewor
ICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzKCkuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAgICAgICAgICAgY2xvYmJlclN0
cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5zZXQobV9ncmFwaCwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICAgICAgICAgIGRvbmUgPSB0
cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGRvbmUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgIAorICAgICAg
ICBTdHJ1Y3R1cmVTZXQgbmV3U2V0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQuc3RydWN0dXJlKCkpKQorICAgICAg
ICAgICAgICAgICAgICBuZXdTZXQuYWRkQWxsKHZhcmlhbnQuc3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICBuZXdTZXQuYWRkQWxsKHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBVc2UgZmlsdGVyKHZh
bHVlLCBzZXQpIGFzIGEgd2F5IG9mIHNldHRpbmcgdGhlIHN0cnVjdHVyZSBzZXQuIFRoaXMgd29y
a3MgYmVjYXVzZQorICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgbWFkZSB0aGUgc2V0
IGJlIFRPUCBiZWZvcmUgdGhpcy4gRmlsdGVyaW5nIHRvcCBpcyBhbm90aGVyIAorICAgICAgICAv
LyB3YXkgb2Ygc2V0dGluZy4KKyAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBuZXdTZXQp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7
CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgp
OwogICAgICAgICBpZiAodmFsdWUgPT0gbm9kZS0+ZnVuY3Rpb24oKSkgewpAQCAtMTY4NSwxOCAr
MTczOCwyMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICAgICAgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmll
cnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldLAogICAgICAgICAgICAgICAgIG5vZGUtPm9w
KCkgPT0gUHV0QnlJZERpcmVjdCk7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlUmVw
bGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1
cmUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhj
bG9iYmVyTGltaXQpOwotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNl
dChtX2dyYXBoLCBzdGF0dXMubmV3U3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChzdGF0dXMuaXNTaW1wbGUoKSAmJiBzdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJl
cGxhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKHN0YXR1c1swXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3Jh
cGgsIHN0YXR1c1swXS5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBjbG9iYmVyTGltaXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDEyIEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxh
dGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICAgICAg
Y29uc3QgR2V0QnlJZFN0YXR1cyYpOwotICAgIE5vZGUqIGVtaXRQcm90b3R5cGVDaGVja3MoY29u
c3QgR2V0QnlJZFZhcmlhbnQmKTsKKyAgICB2b2lkIGVtaXRQdXRCeUlkKAorICAgICAgICBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgYm9vbCBpc0Rp
cmVjdCk7CisgICAgdm9pZCBoYW5kbGVQdXRCeUlkKAorICAgICAgICBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgY29uc3QgUHV0QnlJZFN0YXR1cyYs
CisgICAgICAgIGJvb2wgaXNEaXJlY3QpOworICAgIE5vZGUqIGVtaXRQcm90b3R5cGVDaGVja3Mo
U3RydWN0dXJlKiwgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pOwogCiAgICAgTm9kZSog
Z2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpOwogICAgIApAQCAtMTgz
NCwxNSArMTgzOSwxNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQo
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm90
b3R5cGVDaGVja3MoY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQpCitOb2RlKiBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdFByb3RvdHlwZUNoZWNrcygKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4pCiB7CiAgICAgTm9kZSogYmFzZSA9IDA7Ci0g
ICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkodmFyaWFudC5jaGFpbigpKTsKLSAgICBTdHJ1
Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpLnNpbmdsZXRv
blN0cnVjdHVyZSgpOworICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KGNoYWluKTsKKyAg
ICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgSlNPYmplY3Qq
IGN1cnJlbnRPYmplY3QgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50
LmNoYWluKCktPnNpemUoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNo
YWluLT5zaXplKCk7ICsraSkgewogICAgICAgICBjdXJyZW50T2JqZWN0ID0gYXNPYmplY3QoY3Vy
cmVudFN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3VwKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrKSk7Ci0gICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmUgPSB2YXJpYW50LmNoYWluKCktPmF0
KGkpOworICAgICAgICBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmF0KGkpOwogICAgICAgICBi
YXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGN1cnJlbnRPYmplY3QsIGN1cnJl
bnRTdHJ1Y3R1cmUpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVChiYXNlKTsKQEAgLTE4Njgs
MTIgKzE4NzQsMTggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fZ3JhcGgu
Y29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNl
SW5saW5lZEdldEJ5SWQoKTsKKyAgICAKICAgICAgICAgLy8gMSkgRW1pdCBwcm90b3R5cGUgc3Ry
dWN0dXJlIGNoZWNrcyBmb3IgYWxsIGNoYWlucy4gVGhpcyBjb3VsZCBzb3J0IG9mIG1heWJlIG5v
dCBiZQogICAgICAgICAvLyAgICBvcHRpbWFsLCBpZiB0aGVyZSBpcyBzb21lIHJhcmVseSBleGVj
dXRlZCBjYXNlIGluIHRoZSBjaGFpbiB0aGF0IHJlcXVpcmVzIGEgbG90CiAgICAgICAgIC8vICAg
IG9mIGNoZWNrcyBhbmQgdGhvc2UgY2hlY2tzIGFyZSBub3Qgd2F0Y2hwb2ludGFibGUuCiAgICAg
ICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpOyB2YXJpYW50SW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmIChnZXRCeUlkU3RhdHVzW3Zh
cmlhbnRJbmRleF0uY2hhaW4oKSkKLSAgICAgICAgICAgICAgICBlbWl0UHJvdG90eXBlQ2hlY2tz
KGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XSk7CisgICAgICAgICAgICBpZiAoZ2V0QnlJZFN0
YXR1c1t2YXJpYW50SW5kZXhdLmNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBlbWl0UHJvdG90
eXBlQ2hlY2tzKAorICAgICAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAg
ICAgIGdldEJ5SWRTdGF0eXNbdmFyaWFudEluZGV4XS5jaGFpbigpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gMikgRW1pdCBhIE11bHRpR2V0QnlPZmZz
ZXQKQEAgLTE4OTUsOCArMTkwNywxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRC
eUlkKAogICAgICAgICAgICAgICAgIAogICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKSksIGJh
c2UpOwogICAgIAotICAgIGlmICh2YXJpYW50LmNoYWluKCkpCi0gICAgICAgIGJhc2UgPSBlbWl0
UHJvdG90eXBlQ2hlY2tzKHZhcmlhbnQpOworICAgIGlmICh2YXJpYW50LmNoYWluKCkpIHsKKyAg
ICAgICAgYmFzZSA9IGVtaXRQcm90b3R5cGVDaGVja3MoCisgICAgICAgICAgICB2YXJpYW50LnN0
cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpLCB2YXJpYW50LmNoYWluKCkpOworICAg
IH0KICAgICAKICAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2UgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRvCiAgICAgLy8gZW5zdXJl
IHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVu
dGlsIHdlJ3JlIGRvbmUgd2l0aApAQCAtMTkxOCw2ICsxOTMyLDEyMyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIHByZWRp
Y3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOwogfQogCit2
b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHV0QnlJZCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwgYm9vbCBpc0RpcmVjdCkKK3sKKyAgICBp
ZiAoaXNEaXJlY3QpCisgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgZWxzZQorICAgICAgICBhZGRUb0dy
YXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOworfQor
Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAorICAgIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLAorICAgIGNvbnN0IFB1dEJ5SWRT
dGF0dXMmIHB1dEJ5SWRTdGF0dXMsIGJvb2wgaXNEaXJlY3QpCit7CisgICAgaWYgKCFwdXRCeUlk
U3RhdHVzLmlzU2ltcGxlKCkpIHsKKyAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkp
CisgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgIGVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA+
IDEpIHsKKyAgICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkgeworICAgICAg
ICAgICAgZW1pdFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIGlzRGlyZWN0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24o
KS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNEaXJl
Y3QpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gcHV0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpOyB2YXJpYW50SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKCFwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uc3RydWN0dXJlQ2hhaW4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgZW1pdFByb3RvdHlw
ZUNoZWNrcygKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
Lm9sZFN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzW3Zhcmlh
bnRJbmRleF0uc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhKiBkYXRhID0gbV9ncmFwaC5tX211
bHRpUHV0QnlPZmZzZXREYXRhLmFkZCgpOworICAgICAgICBkYXRhLT52YXJpYW50cyA9IHB1dEJ5
SWRTdGF0dXMudmFyaWFudHMoKTsKKyAgICAgICAgZGF0YS0+aWRlbnRpZmllck51bWJlciA9IGlk
ZW50aWZpZXJOdW1iZXI7CisgICAgICAgIGFkZFRvR3JhcGgoTXVsdGlQdXRCeU9mZnNldCwgT3BJ
bmZvKGRhdGEpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKSA9PSAxKTsKKyAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IHB1dEJ5SWRTdGF0dXNbMF07CisgICAgCisgICAgaWYg
KHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2
YXJpYW50LnN0cnVjdHVyZSgpKSksIGJhc2UpOworICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCB2YWx1ZSk7CisgICAgICAg
IGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKTsKKyAgICBpZiAodmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpICYmICF2YXJpYW50LnN0cnVj
dHVyZUNoYWluKCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIGVtaXRQdXRCeUlkKGJhc2Us
IGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkodmFyaWFudC5zdHJ1Y3R1
cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0
dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKKyAgICBpZiAoIWlzRGlyZWN0KQorICAgICAgICBlbWl0UHJvdG90eXBlQ2hl
Y2tzKHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSk7CisK
KyAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgCisgICAgTm9kZSogcHJvcGVydHlTdG9yYWdl
OworICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGgu
YWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKwor
ICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCisgICAg
ICAgICE9IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgIC8vIElmIHdlJ3JlIGdyb3dpbmcgdGhlIHByb3Bl
cnR5IHN0b3JhZ2UgdGhlbiBpdCBtdXN0IGJlIGJlY2F1c2Ugd2UncmUKKyAgICAgICAgLy8gc3Rv
cmluZyBpbnRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdlLgorICAgICAgICBBU1NFUlQoIWlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgIGlmICghdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAg
ICBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dy
YXBoKAorICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksCisgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0
ZXJmbHksIGJhc2UpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGJhc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFk
ZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKKyAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2Up
OworICAgICAgICAgICAgICAgIAorICAgIGFkZFRvR3JhcGgoCisgICAgICAgIFB1dEJ5T2Zmc2V0
LAorICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksCisg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSwKKyAgICAgICAgYmFzZSwKKyAgICAgICAgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIAorICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRh
OworICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Cisg
ICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7
CisKKyAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICBtX2dyYXBoLmNvbXBp
bGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cit9CisKIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OnByZXBhcmVUb1BhcnNlQmxvY2soKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTI1ODAsOTEgKzI3MTEsOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2RmZ0NvZGVCbG9jaywKICAgICAgICAgICAg
ICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZvcywgbV9kZmdTdHViSW5mb3MsCiAgICAg
ICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lk
ZW50aWZpZXJOdW1iZXJdKTsKLSAgICAgICAgICAgIGJvb2wgY2FuQ291bnRBc0lubGluZWQgPSB0
cnVlOwotICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpIHsKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICAgICAgY2FuQ291
bnRBc0lubGluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAg
ICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBwdXRCeUlkU3Rh
dHVzLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKAotICAgICAgICAg
ICAgICAgIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkKLSAgICAgICAgICAgICAg
ICAmJiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKQotICAgICAgICAgICAgICAgICAg
ICB8fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmlzU3RpbGxWYWxpZCgpKSkgewot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6
aWx5KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFw
dXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNr
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJl
KCktPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHV0QnlJZFN0YXR1
cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50
V2l0aFN0cnVjdHVyZUNoZWNrKHByb3RvdHlwZS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHB1dEJ5SWRT
dGF0dXMub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3Bl
cnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJh
bnNpdGlvbkRhdGEgPQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1
Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm5ld1N0
cnVjdHVyZSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1cy5vbGRTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICAgICAhPSBwdXRC
eUlkU3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRo
ZSBwcm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHN0b3JpbmcgaW50byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZS4KLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9m
ZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
IXB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRv
R3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZz
ZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwg
YmFzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNl
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAotICAgICAg
ICAgICAgICAgICAgICBQdXRCeU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAotICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsCi0gICAgICAgICAgICAg
ICAgICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNj
ZXNzRGF0YS5vZmZzZXQgPSBwdXRCeUlkU3RhdHVzLm9mZnNldCgpOwotICAgICAgICAgICAgICAg
IHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFn
ZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZGlyZWN0KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9w
SW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRp
Zmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjYW5Db3VudEFzSW5s
aW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoY2FuQ291bnRBc0lubGluZWQgJiYgbV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAg
ICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKLQor
ICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwg
cHV0QnlJZFN0YXR1cywgZGlyZWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9i
eV9pZCk7CiAgICAgICAgIH0KIApAQCAtMzI1OSwxMSArMzMwNywxMSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3Bl
cnR5OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxIHx8IHN0YXR1c1swXS5r
aW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBz
dGF0dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxs
Q29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxS
ZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCks
IGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBz
Y29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAg
ICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4K
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoK
QEAgLTU0NCw2ICs1NDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBTZXR0aW5n
IGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS53cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpAQCAtNjE3LDYgKzYyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICAgICAgICAgIGNhc2UgTWFrZVJvcGU6
CiAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBUaGlzIGVpdGhlciBleGl0cywgY2F1c2VzIGEgR0MgKGxhenkgc3Ry
aW5nIGFsbG9jYXRpb24pLCBvciBjbG9iYmVycwpAQCAtNjY4LDYgKzY3OSwxNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtNzA5LDcgKzcyOCwxMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmll
ck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDkgKzQ2OSwyMyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOwor
ICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHJlYWQoQWJzdHJhY3RI
ZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlm
aWVyTnVtYmVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBNdWx0aVB1
dEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFk
KEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFBy
b3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikp
OworICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1
cmVzKCkpCisgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgaWYg
KG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpIHsKKyAg
ICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBjbG9iYmVy
aXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE3NCw2ICsxNzQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICBFZGdl
IGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gY2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0
YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3Zl
blN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVj
dHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywg
bm9kZSwgc3RydWN0dXJlLCB2YXJpYW50LCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAg
ICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAgIGNh
c2UgR2V0QnlJZEZsdXNoOiB7CkBAIC0yMTUsOSArMjM2LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KTsKLSAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAog
ICAgICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLApAQCAtMjI1LDk2ICsyNDMsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJl
Y3QpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCisgICAgICAgICAg
ICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFT
U0VSVChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1
c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKLSAgICAgICAgICAgICAgICAvLyBh
bmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51
ZSBhbmQgbm90Ci0gICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0
YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hw
b2ludCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bmVlZHNDZWxsQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMu
aXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRh
dGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3Ry
dWN0dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShzdGF0dXMuc3Ry
dWN0dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4o
KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHBy
b3RvdHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2Vs
bCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBFZGdl
IHByb3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1
cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0g
c3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IEVkZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwgY2hpbGRFZGdlLAotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gRWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5z
aXRpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dy
YXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2lu
LCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVy
ZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlT
dG9yYWdlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBvcmlnaW4sIAotICAg
ICAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNl
KSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0
YTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zm
c2V0KCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ0NSw2ICszODAsMTA3IEBAIHByaXZhdGU6CiAgICAg
ICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEp
OwogICAgIH0KIAorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgTm9kZSogbm9kZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0g
bm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsK
KworICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwor
ICAgICAgICAKKyAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2Rl
KGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKKyAgICAgICAg
Ym9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNw
ZWNDZWxsOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBl
bHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCisgICAgICAgIC8vIGFu
ZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVl
IGFuZCBub3QKKyAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAgbV9pbnRl
cnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGlmIChuZWVkc1dhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8oc3Ry
dWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgfSBlbHNlIGlmIChuZWVkc0NlbGxDaGVjaykg
eworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2l0aW9u
RGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0cnVjdHVy
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gUHV0QnlJZCkgeworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90
b3R5cGUoKS5pc051bGwoKSkgeworICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9j
aywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCku
YXNDZWxsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0
dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHZhcmlhbnQu
c3RydWN0dXJlQ2hhaW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkp
OworICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2Vs
bCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKKyAgICAgICAgZWxzZSBpZiAoCisg
ICAgICAgICAgICB2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZQorICAg
ICAgICAgICAgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdl
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9m
ZnNldCgpKSk7CisgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCisgICAgICAgICAgICAgICAgb3JpZ2lu
LCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIs
IG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwK
KyAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCisgICAg
ICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2lu
LCBjaGlsZEVkZ2UpKSk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikgeworICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5h
ZGROb2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25E
YXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0Rh
dGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9uYWxT
dG9yZUJhcnJpZXIsIG9yaWdpbiwgCisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSwgS25vd25DZWxsVXNlKSwKKyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9k
ZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgPSB2YXJpYW50Lm9mZnNldCgpOworICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgfQorCiAgICAgdm9pZCBh
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgTm9kZSogd2Vha0NvbnN0
YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODkxLDYgKzg5MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAg
ICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgaW5zZXJ0
U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEluc3RhbmNlT2Y6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGFwcGVhcnMg
YnJva2VuOiBDaGVja0hhc0luc3RhbmNlIGFscmVhZHkgZG9lcyBhbiB1bmNvbmRpdGlvbmFsIGNl
bGwKICAgICAgICAgICAgIC8vIGNoZWNrLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3NDc5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsMTIgQEAgdm9pZCBHcmFwaDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgaW5Db250ZXh0KGRhdGEudmFyaWFudHNbaV0sIGNvbnRleHQpKTsKICAgICB9CisgICAgaWYg
KG5vZGUtPmhhc011bHRpUHV0QnlPZmZzZXREYXRhKCkpIHsKKyAgICAgICAgTXVsdGlQdXRCeU9m
ZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOworICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJpZCIsIGRhdGEuaWRlbnRpZmllck51bWJlciwgInsiLCBpZGVudGlm
aWVycygpW2RhdGEuaWRlbnRpZmllck51bWJlcl0sICJ9Iik7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOworICAg
IH0KICAgICBBU1NFUlQobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSA9PSBub2Rl
LT5oYXNMb2NhbCgqdGhpcykpOwogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KnRoaXMpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzMCw2ICs4MzAsNyBAQCBw
dWJsaWM6CiAgICAgQmFnPEJyYW5jaERhdGE+IG1fYnJhbmNoRGF0YTsKICAgICBCYWc8U3dpdGNo
RGF0YT4gbV9zd2l0Y2hEYXRhOwogICAgIEJhZzxNdWx0aUdldEJ5T2Zmc2V0RGF0YT4gbV9tdWx0
aUdldEJ5T2Zmc2V0RGF0YTsKKyAgICBCYWc8TXVsdGlQdXRCeU9mZnNldERhdGE+IG1fbXVsdGlQ
dXRCeU9mZnNldERhdGE7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxp
bmVWYXJpYWJsZURhdGE7CiAgICAgT3duUHRyPElubGluZUNhbGxGcmFtZVNldD4gbV9pbmxpbmVD
YWxsRnJhbWVzOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxC
eXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCwzMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2Jvb2wgTXVsdGlQdXRCeU9m
ZnNldERhdGE6OndyaXRlc1N0cnVjdHVyZXMoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQg
aSA9IHZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAodmFyaWFudHNbaV0ua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBNdWx0aVB1dEJ5T2Zmc2V0
RGF0YTo6cmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLmtpbmQo
KSAhPSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ldLm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpID09CisgICAgICAgICAgICB2YXJpYW50c1tpXS5uZXdTdHJ1Y3R1cmUoKS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBC
cmFuY2hUYXJnZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBpZiAoIWJs
b2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2NDU0
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Nyw2ICs1NywxNCBAQCBzdHJ1Y3QgTXVsdGlHZXRCeU9mZnNldERhdGEgewogICAgIFZl
Y3RvcjxHZXRCeUlkVmFyaWFudCwgMj4gdmFyaWFudHM7CiB9OwogCitzdHJ1Y3QgTXVsdGlQdXRC
eU9mZnNldERhdGEgeworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXI7CisgICAgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKKyAgICAKKyAgICBib29sIHdyaXRlc1N0cnVj
dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0OworfTsK
Kwogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZp
b3VzU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAtNDYwLDcgKzQ2
OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICB2b2lkIGNvbnZlcnRUb1B1dEJ5T2Zmc2V0
KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0KTsK
KyAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3Qg
fHwgbV9vcCA9PSBNdWx0aVB1dEJ5T2Zmc2V0KTsKICAgICAgICAgbV9vcEluZm8gPSBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4OwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDMoY2hpbGRyZW4uY2hp
bGQyKCkpOwogICAgICAgICBjaGlsZHJlbi5zZXRDaGlsZDIoY2hpbGRyZW4uY2hpbGQxKCkpOwpA
QCAtMTA5MSw2ICsxMDk5LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PE11bHRpR2V0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOwogICAgIH0KICAg
ICAKKyAgICBib29sIGhhc011bHRpUHV0QnlPZmZzZXREYXRhKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBvcCgpID09IE11bHRpUHV0QnlPZmZzZXQ7CisgICAgfQorICAgIAorICAgIE11bHRpUHV0
QnlPZmZzZXREYXRhJiBtdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpCisgICAgeworICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlQdXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaGFzRnVuY3Rpb25EZWNsSW5kZXgoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gTmV3RnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDYgKzE3NSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRCeU9mZnNldCwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTXVsdGlHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhNdWx0aVB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0QXJy
YXlMZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFR5cGVkQXJyYXlCeXRl
T2Zmc2V0LCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRTY29wZSwgTm9kZVJlc3Vs
dEpTKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICBjYXNl
IERGRzo6SnVtcDoKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDcgQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRl
cjoKICAgICBjYXNlIENoZWNrOgogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNl
IE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBj
YXNlIEdldEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Njg5LDYgKzQ2ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja0luQm91bmRzOgogICAgIGNhc2UgQXJpdGhJTXVsOgog
ICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAwNiw2ICs1MDA2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2Ug
Q2hlY2tJbkJvdW5kczoKICAgICBjYXNlIEFyaXRoSU11bDoKICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw2ICsyNDYsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNl
dDoKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIERvbid0IGNvdW50IHRoZXNlIHVzZXMuCiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTM0Niw2ICszNDcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGNhc2UgSGFyZFBoYW50b206CiAgICAgICAgICAgICAgICAgY2FzZSBN
b3ZIaW50OgogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAg
ICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IGNvdW50IHRoZXNlIHVzZXMuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdl
dEJ5SWQ6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgICAgICAv
LyBUaGVzZSBhcmUgT0suCiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NzQsNiArNDc0LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKICAgICAgICAgICAgIGNvbXBpbGVQdXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGNvbXBpbGVN
dWx0aVB1dEJ5T2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CiAgICAgICAgICAgICBjb21waWxlR2V0R2xvYmFsVmFyKCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTMyMjEsNiArMzIyNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG9mZnNldFJlbGF0aXZlVG9CYXNlKGRhdGEub2Zmc2V0KSkpOwogICAgIH0KICAgICAKKyAgICB2
b2lkIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIEZJWE1FISEKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBjb21waWxlR2V0R2xvYmFsVmFyKCkKICAgICB7CiAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+cmVnaXN0ZXJQ
b2ludGVyKCkpKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225023</attachid>
            <date>2014-02-23 19:52:10 -0800</date>
            <delta_ts>2014-02-23 20:36:27 -0800</delta_ts>
            <desc>the code is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90971</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dy
ZXNzLCBhbG1vc3QgZG9uZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tTExJbnQpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1
czo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpQdXRCeUlkU3RhdHVzKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFN0YXR1czo6aXNTaW1wbGUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpudW1WYXJp
YW50cyk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OnZhcmlhbnRzKToKKyAgICAgICAg
KEpTQzo6UHV0QnlJZFN0YXR1czo6YXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6ZHVtcCk6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OlB1dEJ5SWRW
YXJpYW50KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlB1dEJ5
SWRWYXJpYW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmlzU2V0KToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6
OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFu
dDo6b2xkU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6Om5ld1N0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVDaGFpbik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6ZW1pdFByb3RvdHlwZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjplbWl0UHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpjaGVja1N0cnVjdHVyZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpDU0VQaGFzZTo6c3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24p
OgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnZXRCeU9mZnNldExvYWRFbGltaW5hdGlv
bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5h
dGlvbik6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlQ
dXRCeU9mZnNldERhdGE6OndyaXRlc1N0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok11
bHRpUHV0QnlPZmZzZXREYXRhOjpyZWFsbG9jYXRlc1N0b3JhZ2UpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0QnlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc011bHRpUHV0QnlPZmZzZXREYXRhKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjptdWx0aVB1dEJ5T2Zmc2V0RGF0YSk6CisgICAgICAgICog
ZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlND
OjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVj
a3MpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTXVsdGlQdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmxvYWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OnN0b3JlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphZGRy
ZXNzT2ZQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnN0b3Jh
Z2VGb3JUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6ZW1pdFN0b3JlQmFycmllcik6CisKIDIwMTQtMDItMjMgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVcGRhdGUgRmVhdHVyZURlZmluZXMueGNjb25maWcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2NDU0NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtODIsNiArODIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5dGVjb2Rl
L1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKICAgICBieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAor
ICAgIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAogICAgIGJ5dGVjb2RlL1JlZHVjZVdoaXRl
c3BhY2UuY3BwCiAgICAgYnl0ZWNvZGUvU2FtcGxpbmdUb29sLmNwcAogICAgIGJ5dGVjb2RlL1Nw
ZWNpYWxQb2ludGVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNiArMTgyLDggQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRLaW5kLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9SZWR1Y2VXaGl0ZXNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuaCBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNyw2ICszMzcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBU
YXJnZXRzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5
SWRTdGF0dXMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0
QnlJZFZhcmlhbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UmVkdWNlV2hpdGVzcGFjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTYW1wbGluZ1Rvb2wuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcU3BlY2lhbFBvaW50ZXIuY3BwIiAvPgpAQCAtODU4LDYgKzg1OSw3IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHJl
Y2lzZUp1bXBUYXJnZXRzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRCeUlkU3RhdHVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRCeUlkVmFyaWFudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcUHV0S2luZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVk
dWNlV2hpdGVzcGFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
U2FtcGxpbmdUb29sLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Nyw2ICszNTcsOCBA
QAogCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5OTE0Q0E3REMx
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi87IH07CiAJCTBGOTMzMkE0MTRDQTdERDkw
MDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjNDNiAv
KiBTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0QTcx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLzsgfTsKKwkJMEY5M0I0QUEx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRF
MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9j
a1dpdGhKSVRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk3NDk3
MTE2ODdBREU0MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpT
Q2VsbElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTgzMiw2ICsxODM0LDggQEAKIAkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHV0QnlJZFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjlB
MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFB1dEJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNG
IC8qIFB1dEJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1
dEJ5SWRWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
OTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tXaXRoSklUVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlNDZWxs
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NlbGxJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NTg1LDYgKzQ1ODksOCBAQAogCQkJ
CTBGQzk3RjMyMTgyMDIwRDcwMDJDOUIyNiAvKiBQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5n
V2F0Y2hwb2ludC5oICovLAogCQkJCTBGOTMzMjk5MTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmNwcCAqLywKIAkJCQkwRjkzMzI5QTE0Q0E3REMxMDA4NUYzQzYgLyogUHV0QnlJZFN0
YXR1cy5oICovLAorCQkJCTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgKi8sCisJCQkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmggKi8sCiAJCQkJMEY5RkM4QzExNEUxQjVGQjAwRDUyQUUwIC8qIFB1dEtpbmQuaCAqLywKIAkJ
CQkwRkY2MEFCRjE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgKi8sCiAJ
CQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLywKQEAg
LTUzODMsNiArNTM4OSw3IEBACiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1Nh
ZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0UxN0NCRThEMzAwQzNFNjQzIC8qIE1hcFByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTc2LDYgKzYxODMsNyBAQAogCQkJCTBGOUZCNEY0
MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkIxQ0JEMTg2MTI0NkEwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldy
YXBwZXJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAw
Q0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkzQjRBOTE4Qjky
QzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
OEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1
MzI3MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTAg
QEAKICNpbmNsdWRlICJMTEludERhdGEuaCIKICNpbmNsdWRlICJMb3dMZXZlbEludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljUHV0QnlJ
ZExpc3QuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFp
bi5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAt
NTYsMTUgKzU4LDE1IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20K
IAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gaW5zdHJ1Y3Rpb25bNF0udS5zdHJ1Y3R1cmUu
Z2V0KCk7CiAgICAgaWYgKCFzdHJ1Y3R1cmUpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKICAgICBpZiAoaW5zdHJ1Y3Rpb25b
MF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWQpCiAgICAg
ICAgIHx8IGluc3RydWN0aW9uWzBdLnUub3Bjb2RlID09IExMSW50OjpnZXRPcGNvZGUobGxpbnRf
b3BfcHV0X2J5X2lkX291dF9vZl9saW5lKSkgewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlk
KTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCi0gICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgICAg
ICAKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlUmVwbGFjZSwgc3RydWN0dXJl
LCAwLCAwLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uo
c3RydWN0dXJlLCBvZmZzZXQpOwogICAgIH0KICAgICAKICAgICBBU1NFUlQoc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKQEAgLTgxLDE0ICs4
MywxNCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgCiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAs
IGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0
aW9uKTsKICAgICAKLSAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKLSAgICAgICAgU2ltcGxlVHJh
bnNpdGlvbiwgc3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsCisgICAgcmV0dXJuIFB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKAorICAgICAgICBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwKICAgICAg
ICAgY2hhaW4gPyBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbihwcm9maWxlZEJs
b2NrLCBzdHJ1Y3R1cmUsIGNoYWluKSkgOiAwLAogICAgICAgICBvZmZzZXQpOwogI2Vsc2UKLSAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zm
c2V0KTsKKyAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICNlbmRpZgog
fQogCkBAIC0xMDIsNyArMTA0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChwcm9maWxlZEJsb2NrLT5saWtl
bHlUb1Rha2VTbG93Q2FzZShieXRlY29kZUluZGV4KQogICAgICAgICB8fCBoYXNFeGl0U2l0ZShs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKQotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgCiAgICAgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgp
KTsKICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIs
IHByb2ZpbGVkQmxvY2ssIHN0dWJJbmZvLCB1aWQpOwpAQCAtMTEyLDcgKzExNCw3IEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICByZXR1cm4gcmVzdWx0Owog
I2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAgICBVTlVTRURfUEFSQU0obWFwKTsKLSAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQogfQogCkBAIC0xMjMsMjUgKzEyNSwyMiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKCk7CiAgICAgCiAg
ICAgaWYgKHN0dWJJbmZvLT5yZXNldEJ5R0MpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKIAogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFj
Y2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc191bnNldDoKICAgICAgICAgLy8gSWYgdGhlIEpJ
VCBzYXcgaXQgYnV0IGRpZG4ndCBvcHRpbWl6ZSBpdCwgdGhlbiBhc3N1bWUgdGhhdCB0aGlzIHRh
a2VzIHNsb3cgcGF0aC4KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVz
KFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVw
bGFjZTogewogICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPQogICAgICAgICAgICAgc3R1
YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAogICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAg
ICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cygKLSAgICAgICAgICAgICAgICBTaW1wbGVSZXBsYWNlLAotICAgICAgICAgICAgICAg
IHN0dWJJbmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksCi0g
ICAgICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICBvZmZzZXQpOworICAgICAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKAorICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIG9mZnNldCk7
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwg
MCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgpAQCAtMTUxLDggKzE1MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLnN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAogICAgICAgICAgICAgICAgICpw
cm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZz
ZXQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cygKLSAgICAgICAgICAgICAg
ICBTaW1wbGVUcmFuc2l0aW9uLAorICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9u
LnByZXZpb3VzU3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1
dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKSwKICAgICAgICAgICAgICAgICBzdHViSW5m
by0+dS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKApAQCAtMTYwLDEzICsxNTgsNTEgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlk
VHJhbnNpdGlvbi5jaGFpbi5nZXQoKSkpIDogMCwKICAgICAgICAgICAgICAgICBvZmZzZXQpOwog
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAs
IDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9s
aXN0OiB7CisgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3QgPSBzdHViSW5mby0+
dS5wdXRCeUlkTGlzdC5saXN0OworICAgICAgICAKKyAgICAgICAgUHV0QnlJZFN0YXR1cyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkQWNjZXNzJiBhY2Nlc3MgPSBsaXN0LT5hdChpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IFB1dEJ5SWRBY2Nlc3M6OlJlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFyaWFudHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50
OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dEJ5SWRB
Y2Nlc3M6OlRyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPQorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MubmV3U3RydWN0dXJlKCktPmdldENvbmN1
cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdmFyaWFu
dHMuYXBwZW5kKFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKAorICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3Mub2xkU3RydWN0dXJlKCksIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgYWNjZXNzLmNoYWluKCkgPyBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGFjY2Vzcy5v
bGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLmNoYWluKCkpKSA6IDAsCisgICAgICAgICAgICAgICAgICAg
IG9mZnNldCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKLSAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgcG9seW1vcnBoaWMgUHV0QnlJZC4gV2UgcHJvYmFi
bHkgaGF2ZSBzb21lIGludGVyZXN0aW5nIHRoaW5ncwotICAgICAgICAvLyB3ZSBjb3VsZCBkbyBh
Ym91dCBpdC4KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwg
MCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMjIzLDcgKzI1OSw3IEBAIFB1dEJ5SWRT
dGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIC8vIHRoZSBzcGVj
aWFsaXplZCBzbG90LgogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlUmVw
bGFjZSwgc3RydWN0dXJlLCAwLCAwLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFZh
cmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpOwogICAgIH0KICAgICAKICAgICAvLyBP
dXIgaHlwb3RoZXNpcyBpcyB0aGF0IHdlJ3JlIGRvaW5nIGEgdHJhbnNpdGlvbi4gQmVmb3JlIHdl
IHByb3ZlIHRoYXQgdGhpcyBpcyByZWFsbHkKQEAgLTI3Niw3ICszMTIsMjYgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIEFTU0VSVCghdHJhbnNpdGlvbi0+
dHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkpOwogICAgIEFTU0VSVChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpOwogICAgIAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFNpbXBsZVRy
YW5zaXRpb24sIHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQp
OworICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvbihzdHJ1Y3R1cmUsIHRyYW5z
aXRpb24sIGNoYWluLnJlbGVhc2UoKSwgb2Zmc2V0KTsKK30KKwordm9pZCBQdXRCeUlkU3RhdHVz
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7
CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQucHJpbnQoIihOb0luZm9ybWF0
aW9uKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgU2ltcGxlOgorICAg
ICAgICBvdXQucHJpbnQoIigiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgICAgIG91dC5w
cmludCgiKFRha2VzU2xvd1BhdGgpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDggKzI3LDcgQEAK
ICNkZWZpbmUgUHV0QnlJZFN0YXR1c19oCiAKICNpbmNsdWRlICJFeGl0aW5nSklUVHlwZS5oIgot
I2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU9m
ZnNldC5oIgorI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
U3R1YkluZm8uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKQEAgLTQ1LDUx
ICs0NCwyNyBAQCBwdWJsaWM6CiAgICAgZW51bSBTdGF0ZSB7CiAgICAgICAgIC8vIEl0J3MgdW5j
YWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4KICAgICAgICAgTm9JbmZvcm1hdGlvbiwK
LSAgICAgICAgLy8gSXQncyBjYWNoZWQgYXMgYSBkaXJlY3Qgc3RvcmUgaW50byBhbiBvYmplY3Qg
cHJvcGVydHkgZm9yIGNhc2VzIHdoZXJlIHRoZSBvYmplY3QKLSAgICAgICAgLy8gYWxyZWFkeSBo
YXMgdGhlIHByb3BlcnR5LgotICAgICAgICBTaW1wbGVSZXBsYWNlLAotICAgICAgICAvLyBJdCdz
IGNhY2hlZCBhcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc3RydWN0dXJlIHRoYXQgbGFja3MgdGhl
IHByb3BlcnR5IHRvIG9uZSB0aGF0Ci0gICAgICAgIC8vIGluY2x1ZGVzIHRoZSBwcm9wZXJ0eSwg
YW5kIGEgZGlyZWN0IHN0b3JlIHRvIHRoaXMgbmV3IHByb3BlcnR5LgotICAgICAgICBTaW1wbGVU
cmFuc2l0aW9uLAorICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIHNpbXBsZSBzdG9yZSBvZiBz
b21lIGtpbmQuCisgICAgICAgIFNpbXBsZSwKICAgICAgICAgLy8gSXQncyBrbm93biB0byBvZnRl
biB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgVGFrZXNTbG93UGF0aAogICAgIH07CiAgICAgCiAg
ICAgUHV0QnlJZFN0YXR1cygpCiAgICAgICAgIDogbV9zdGF0ZShOb0luZm9ybWF0aW9uKQotICAg
ICAgICAsIG1fb2xkU3RydWN0dXJlKDApCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKLSAg
ICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKDApCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9m
ZnNldCkKICAgICB7CiAgICAgfQogICAgIAogICAgIGV4cGxpY2l0IFB1dEJ5SWRTdGF0dXMoU3Rh
dGUgc3RhdGUpCiAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX29sZFN0cnVj
dHVyZSgwKQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKDApCi0gICAgICAgICwgbV9zdHJ1Y3R1
cmVDaGFpbigwKQotICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9zdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogICAgIAotICAgIFB1dEJ5SWRTdGF0dXMoCi0gICAgICAgIFN0YXRl
IHN0YXRlLAotICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwKLSAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUsCi0gICAgICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gc3RydWN0dXJlQ2hhaW4sCi0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAg
ICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0dXJlKG9sZFN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZShuZXdTdHJ1Y3R1cmUpCi0gICAgICAgICwg
bV9zdHJ1Y3R1cmVDaGFpbihzdHJ1Y3R1cmVDaGFpbikKLSAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgUHV0QnlJZFN0YXR1cyhjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCkKKyAg
ICAgICAgOiBtX3N0YXRlKFNpbXBsZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgobV9zdGF0ZSA9
PSBOb0luZm9ybWF0aW9uIHx8IG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aCkgPT0gIW1fb2xkU3Ry
dWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlICE9IFNpbXBsZVRyYW5zaXRpb24pID09
ICFtX25ld1N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVCghKChtX3N0YXRlICE9IFNpbXBsZVRy
YW5zaXRpb24pICYmIG1fc3RydWN0dXJlQ2hhaW4pKTsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRl
ID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAobV9vZmZz
ZXQgPT0gaW52YWxpZE9mZnNldCkpOworICAgICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50
KTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2Rl
QmxvY2sqLCBTdHViSW5mb01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFN0cmluZ0ltcGwq
IHVpZCk7CkBAIC0xMDEsMTQgKzc2LDE1IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9CiAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IE5vSW5mb3JtYXRpb247IH0KLSAg
ICBib29sIGlzU2ltcGxlUmVwbGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxl
UmVwbGFjZTsgfQotICAgIGJvb2wgaXNTaW1wbGVUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZSA9PSBTaW1wbGVUcmFuc2l0aW9uOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxlOyB9CiAgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoOyB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX29sZFN0cnVjdHVyZTsgfQot
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9uZXdTdHJ1Y3R1
cmU7IH0KLSAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2hhaW4uZ2V0KCk7IH0KLSAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorICAgIHNpemVfdCBudW1WYXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9y
PFB1dEJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRz
OyB9CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKICNpZiBF
TkFCTEUoREZHX0pJVCkKQEAgLTEyMCwxMCArOTYsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBQ
dXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBTdGF0ZSBtX3N0YXRlOwotICAg
IFN0cnVjdHVyZSogbV9vbGRTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVy
ZTsKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9zdHJ1Y3R1cmVDaGFpbjsK
LSAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKKyAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQs
IDE+IG1fdmFyaWFudHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UHV0QnlJZFZhcmlhbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgUHV0QnlJZFZhcmlh
bnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91
dCwgMCk7Cit9CisKK3ZvaWQgUHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICBjYXNlIE5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBSZXBsYWNlOgorICAgICAgICBvdXQu
cHJpbnQoCisgICAgICAgICAgICAiPFJlcGxhY2U6ICIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KHN0
cnVjdHVyZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgY2FzZSBUcmFuc2l0aW9uOgorICAgICAgICBvdXQucHJpbnQoCisg
ICAgICAgICAgICAiPFRyYW5zaXRpb246ICIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG9sZFN0cnVj
dHVyZSgpLCBjb250ZXh0KSwgIiAtPiAiLAorICAgICAgICAgICAgcG9pbnRlckR1bXBJbkNvbnRl
eHQobmV3U3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLAorICAgICAgICAgICAgcG9pbnRlckR1
bXBJbkNvbnRleHQoc3RydWN0dXJlQ2hhaW4oKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpLCAi
PiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUHV0QnlJZFZhcmlhbnRfaAorI2RlZmluZSBQdXRC
eUlkVmFyaWFudF9oCisKKyNpbmNsdWRlICJJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiCisjaW5j
bHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFB1dEJ5
SWRWYXJpYW50IHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBOb3RTZXQsCisg
ICAgICAgIFJlcGxhY2UsCisgICAgICAgIFRyYW5zaXRpb24KKyAgICB9OworICAgIAorICAgIFB1
dEJ5SWRWYXJpYW50KCkKKyAgICAgICAgOiBtX2tpbmQoTm90U2V0KQorICAgICAgICAsIG1fb2xk
U3RydWN0dXJlKDApCisgICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX29m
ZnNldChpbnZhbGlkT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFB1dEJ5
SWRWYXJpYW50IHJlcGxhY2UoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFJlcGxhY2U7CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgdHJhbnNp
dGlvbigKKyAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlLAorICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IHN0cnVj
dHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBQdXRCeUlk
VmFyaWFudCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBUcmFuc2l0aW9uOworICAg
ICAgICByZXN1bHQubV9vbGRTdHJ1Y3R1cmUgPSBvbGRTdHJ1Y3R1cmU7CisgICAgICAgIHJlc3Vs
dC5tX25ld1N0cnVjdHVyZSA9IG5ld1N0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fc3RydWN0
dXJlQ2hhaW4gPSBzdHJ1Y3R1cmVDaGFpbjsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpICE9IE5vdFNldDsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlcGxhY2UpOworICAgICAgICBy
ZXR1cm4gbV9vbGRTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlv
biB8fCBraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsK
KyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG1f
bmV3U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBz
dHJ1Y3R1cmVDaGFpbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsKKyAgICB9
CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIEtp
bmQgbV9raW5kOworICAgIFN0cnVjdHVyZSogbV9vbGRTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJl
KiBtX25ld1N0cnVjdHVyZTsKKyAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gbV9z
dHJ1Y3R1cmVDaGFpbjsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUHV0QnlJZFZhcmlhbnRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
NDAsNyArMTY0MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBzZXQuYWRkQWxsKG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV0uc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAK
LSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOworICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIHNldCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMTY0OCw3ICsxNjQ4LDYwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAKKyAgICBjYXNlIE11bHRQdXRCeU9m
ZnNldDogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8g
RWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCisKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMoKS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgIT0gc3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAg
ICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKKyAgICAgICAgICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAgICAgICAgCisg
ICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5zdHJ1Y3R1cmUoKSkpCisg
ICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGRBbGwodmFyaWFudC5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOworICAgICAg
ICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQu
b2xkU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgICAgIG5ld1NldC5hZGRBbGwodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFVzZSBmaWx0
ZXIodmFsdWUsIHNldCkgYXMgYSB3YXkgb2Ygc2V0dGluZyB0aGUgc3RydWN0dXJlIHNldC4gVGhp
cyB3b3JrcyBiZWNhdXNlCisgICAgICAgIC8vIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBtYWRlIHRo
ZSBzZXQgYmUgVE9QIGJlZm9yZSB0aGlzLiBGaWx0ZXJpbmcgdG9wIGlzIGFub3RoZXIgCisgICAg
ICAgIC8vIHdheSBvZiBzZXR0aW5nLgorICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIG5l
d1NldCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rp
b246IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZh
bHVlKCk7CiAgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CkBAIC0xNjg1
LDE4ICsxNzM4LDIwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVu
dGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0sCiAgICAgICAgICAgICAgICAgbm9k
ZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0KTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1w
bGVSZXBsYWNlKCkpIHsKLSAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0YXR1
cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewotICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuc2V0KG1fZ3JhcGgsIHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpICYmIHN0YXR1cy5udW1WYXJpYW50cygpID09IDEp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6UmVwbGFjZSkgeworICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFu
dHModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXMo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbikgeworICAgICAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVy
TGltaXQpOworICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQo
bV9ncmFwaCwgc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksMTIgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNw
ZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAg
ICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7Ci0gICAgTm9kZSogZW1pdFByb3RvdHlwZUNoZWNr
cyhjb25zdCBHZXRCeUlkVmFyaWFudCYpOworICAgIHZvaWQgZW1pdFB1dEJ5SWQoCisgICAgICAg
IE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBib29s
IGlzRGlyZWN0KTsKKyAgICB2b2lkIGhhbmRsZVB1dEJ5SWQoCisgICAgICAgIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBjb25zdCBQdXRCeUlkU3Rh
dHVzJiwKKyAgICAgICAgYm9vbCBpc0RpcmVjdCk7CisgICAgTm9kZSogZW1pdFByb3RvdHlwZUNo
ZWNrcyhTdHJ1Y3R1cmUqLCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbik7CiAKICAgICBO
b2RlKiBnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCk7CiAgICAgCkBA
IC0xODM0LDE1ICsxODM5LDE2IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeU9m
ZnNldCgKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6ZW1p
dFByb3RvdHlwZUNoZWNrcyhjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCkKK05vZGUqIEJ5
dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hlY2tzKAorICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbikKIHsKICAgICBOb2RlKiBiYXNlID0g
MDsKLSAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseSh2YXJpYW50LmNoYWluKCkpOwotICAg
IFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuc2lu
Z2xldG9uU3RydWN0dXJlKCk7CisgICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkoY2hhaW4p
OworICAgIFN0cnVjdHVyZSogY3VycmVudFN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBKU09i
amVjdCogY3VycmVudE9iamVjdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZh
cmlhbnQuY2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgY2hhaW4tPnNpemUoKTsgKytpKSB7CiAgICAgICAgIGN1cnJlbnRPYmplY3QgPSBhc09iamVj
dChjdXJyZW50U3RydWN0dXJlLT5wcm90b3R5cGVGb3JMb29rdXAobV9pbmxpbmVTdGFja1RvcC0+
bV9jb2RlQmxvY2spKTsKLSAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9IHZhcmlhbnQuY2hhaW4o
KS0+YXQoaSk7CisgICAgICAgIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+YXQoaSk7CiAgICAg
ICAgIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soY3VycmVudE9iamVjdCwg
Y3VycmVudFN0cnVjdHVyZSk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUKGJhc2UpOwpAQCAt
MTg2OCwxMiArMTg3NCwxOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAobV9n
cmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5u
b3RpY2VJbmxpbmVkR2V0QnlJZCgpOworICAgIAogICAgICAgICAvLyAxKSBFbWl0IHByb3RvdHlw
ZSBzdHJ1Y3R1cmUgY2hlY2tzIGZvciBhbGwgY2hhaW5zLiBUaGlzIGNvdWxkIHNvcnQgb2YgbWF5
YmUgbm90IGJlCiAgICAgICAgIC8vICAgIG9wdGltYWwsIGlmIHRoZXJlIGlzIHNvbWUgcmFyZWx5
IGV4ZWN1dGVkIGNhc2UgaW4gdGhlIGNoYWluIHRoYXQgcmVxdWlyZXMgYSBsb3QKICAgICAgICAg
Ly8gICAgb2YgY2hlY2tzIGFuZCB0aG9zZSBjaGVja3MgYXJlIG5vdCB3YXRjaHBvaW50YWJsZS4K
ICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBnZXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgewotICAgICAgICAgICAgaWYgKGdldEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jaGFpbigpKQotICAgICAgICAgICAgICAgIGVtaXRQcm90b3R5cGVD
aGVja3MoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdKTsKKyAgICAgICAgICAgIGlmIChnZXRC
eUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY2hhaW4oKSkgeworICAgICAgICAgICAgICAgIGVtaXRQ
cm90b3R5cGVDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIGdldEJ5SWRTdGF0dXNbdmFyaWFu
dEluZGV4XS5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0QnlJZFN0YXR5c1t2YXJpYW50SW5kZXhdLmNoYWluKCkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyAyKSBFbWl0IGEgTXVsdGlHZXRC
eU9mZnNldApAQCAtMTg5NSw4ICsxOTA3LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5SWQoCiAgICAgICAgICAgICAgICAgCiAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
KSwgYmFzZSk7CiAgICAgCi0gICAgaWYgKHZhcmlhbnQuY2hhaW4oKSkKLSAgICAgICAgYmFzZSA9
IGVtaXRQcm90b3R5cGVDaGVja3ModmFyaWFudCk7CisgICAgaWYgKHZhcmlhbnQuY2hhaW4oKSkg
eworICAgICAgICBiYXNlID0gZW1pdFByb3RvdHlwZUNoZWNrcygKKyAgICAgICAgICAgIHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkuc2luZ2xldG9uU3RydWN0dXJlKCksIHZhcmlhbnQuY2hhaW4oKSk7
CisgICAgfQogICAgIAogICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQgdG8KICAgICAvLyBl
bnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxp
dmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCkBAIC0xOTE4LDYgKzE5MzIsMTIzIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwg
cHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiB9
CiAKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKAorICAgIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGUqIHZhbHVlLCBib29sIGlzRGlyZWN0KQorewor
ICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKKyAgICBlbHNlCisgICAgICAgIGFk
ZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7
Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCisgICAgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsCisgICAgY29uc3QgUHV0
QnlJZFN0YXR1cyYgcHV0QnlJZFN0YXR1cywgYm9vbCBpc0RpcmVjdCkKK3sKKyAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNT
ZXQoKSkKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgZW1p
dFB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIGlzRGlyZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAocHV0QnlJZFN0YXR1cy5udW1WYXJpYW50
cygpID4gMSkgeworICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKSB7Cisg
ICAgICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNE
aXJlY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxh
dGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFp
c0RpcmVjdCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2YXJpYW50SW5kZXggPSBwdXRC
eUlkU3RhdHVzLm51bVZhcmlhbnRzKCk7IHZhcmlhbnRJbmRleC0tOykgeworICAgICAgICAgICAg
ICAgIGlmIChwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0ua2luZCgpICE9IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5zdHJ1Y3R1cmVDaGFpbigp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBlbWl0UHJv
dG90eXBlQ2hlY2tzKAorICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzW3ZhcmlhbnRJ
bmRleF0ub2xkU3RydWN0dXJlKCksCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNb
dmFyaWFudEluZGV4XS5zdHJ1Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEqIGRhdGEgPSBtX2dyYXBo
Lm1fbXVsdGlQdXRCeU9mZnNldERhdGEuYWRkKCk7CisgICAgICAgIGRhdGEtPnZhcmlhbnRzID0g
cHV0QnlJZFN0YXR1cy52YXJpYW50cygpOworICAgICAgICBkYXRhLT5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgYWRkVG9HcmFwaChNdWx0aVB1dEJ5T2Zmc2V0
LCBPcEluZm8oZGF0YSksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlQoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID09IDEpOworICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcHV0QnlJZFN0YXR1c1swXTsKKyAgICAKKyAg
ICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KHZhcmlhbnQuc3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgICAgIGhhbmRsZVB1dEJ5T2Zm
c2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksIHZhbHVlKTsKKyAg
ICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgICAgIG1fZ3JhcGguY29t
cGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pOworICAgIGlmICh2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkgJiYgIXZhcmlhbnQu
c3RydWN0dXJlQ2hhaW4oKS0+aXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgZW1pdFB1dEJ5SWQo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIGlzRGlyZWN0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseSh2YXJpYW50LnN0
cnVjdHVyZUNoYWluKCkpOworICAgICAgICAgICAgICAgIAorICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKSksIGJhc2UpOworICAgIGlmICghaXNEaXJlY3QpCisgICAgICAgIGVtaXRQcm90b3R5
cGVDaGVja3ModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigp
KTsKKworICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAKKyAgICBOb2RlKiBwcm9wZXJ0eVN0
b3JhZ2U7CisgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gbV9n
cmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKKyAgICAgICAgU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkp
OworCisgICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkK
KyAgICAgICAgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
eworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0aGUg
cHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQorICAgICAgICAv
LyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UuCisgICAgICAgIEFTU0VSVCgh
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KSB7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAgICAg
ICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBi
YXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwKKyAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdl
dEJ1dHRlcmZseSwgYmFzZSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gYmFzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOworICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
YmFzZSk7CisgICAgICAgICAgICAgICAgCisgICAgYWRkVG9HcmFwaCgKKyAgICAgICAgUHV0QnlP
ZmZzZXQsCisgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgp
KSwKKyAgICAgICAgcHJvcGVydHlTdG9yYWdlLAorICAgICAgICBiYXNlLAorICAgICAgICB2YWx1
ZSk7CisgICAgICAgICAgICAgICAgCisgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vz
c0RhdGE7CisgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsK
KyAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKKyAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NE
YXRhKTsKKworICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgIG1fZ3JhcGgu
Y29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKK30KKwogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VCbG9jaygpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQpAQCAtMjU4MCw5MSArMjcxMSw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fZGZnQ29kZUJsb2NrLAogICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLCBtX2RmZ1N0dWJJbmZvcywK
ICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCBtX2dyYXBoLmlkZW50aWZpZXJz
KClbaWRlbnRpZmllck51bWJlcl0pOwotICAgICAgICAgICAgYm9vbCBjYW5Db3VudEFzSW5saW5l
ZCA9IHRydWU7Ci0gICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMuaXNTZXQoKSkgewotICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgICAgICAgICBj
YW5Db3VudEFzSW5saW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpKSksIGJhc2UpOwotICAgICAg
ICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHB1dEJ5
SWRTdGF0dXMub2Zmc2V0KCksIHZhbHVlKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoCi0gICAg
ICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKQotICAgICAgICAg
ICAgICAgICYmICghcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpCi0gICAgICAgICAgICAg
ICAgICAgIHx8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+aXNTdGlsbFZhbGlkKCkp
KSB7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFpbnMoKS5h
ZGRMYXppbHkocHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNl
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWRpcmVjdCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIXB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJl
Q2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1
Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSBwdXRCeUlk
U3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2socHJvdG90eXBlLmFzQ2VsbCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBU1NFUlQocHV0
QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSog
cHJvcGVydHlTdG9yYWdlOwotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KiB0cmFuc2l0aW9uRGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm9s
ZFN0cnVjdHVyZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMu
bmV3U3RydWN0dXJlKCkpKTsKLQotICAgICAgICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzLm9s
ZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAgICAgICE9
IHB1dEJ5SWRTdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGdyb3dp
bmcgdGhlIHByb3BlcnR5IHN0b3JhZ2UgdGhlbiBpdCBtdXN0IGJlIGJlY2F1c2Ugd2UncmUKLSAg
ICAgICAgICAgICAgICAgICAgLy8gc3RvcmluZyBpbnRvIHRoZSBvdXQtb2YtbGluZSBzdG9yYWdl
LgotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHB1dEJ5SWRTdGF0
dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICghcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9w
SW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSwg
YWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVy
Zmx5LCBiYXNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGJhc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoCi0g
ICAgICAgICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICBPcElu
Zm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZSwKLSAgICAgICAg
ICAgICAgICAgICAgdmFsdWUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCA9IHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCk7Ci0gICAgICAgICAg
ICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1i
ZXI7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChz
dG9yYWdlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGlmIChkaXJlY3QpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVj
dCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGNhbkNvdW50
QXNJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChjYW5Db3VudEFzSW5saW5lZCAmJiBtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OwotCisgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZh
bHVlLCBwdXRCeUlkU3RhdHVzLCBkaXJlY3QpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
cHV0X2J5X2lkKTsKICAgICAgICAgfQogCkBAIC0zMjU5LDExICszMzA3LDExIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFs
UHJvcGVydHk6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigqbV92bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIHVpZCwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEgfHwgc3RhdHVz
WzBdLmtpbmQoKSAhPSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgZ2V0KFZp
cnR1YWxSZWdpc3RlcihzY29wZSkpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmpl
Y3QsIHN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGhhbmRsZVB1dEJ5T2Zmc2V0
KGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0PihvcGVy
YW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAvLyBL
ZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDcg
KzQ5NSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAg
ICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0
dXJlLgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVz
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6
CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOgpAQCAtNTQ0LDYgKzU0OSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFNl
dHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUuCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CkBAIC02MTcsNiArNjI3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgICAgICAgICAgY2FzZSBNYWtl
Um9wZToKICAgICAgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgICAgIGNhc2Ug
TXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIFRoaXMgZWl0aGVyIGV4aXRzLCBjYXVzZXMgYSBHQyAobGF6
eSBzdHJpbmcgYWxsb2NhdGlvbiksIG9yIGNsb2JiZXJzCkBAIC02NjgsNiArNjc5LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRC
eU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGJhc2UpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVj
dDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CkBAIC03MDksNyArNzI4LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVu
dGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjksOSArNDY5LDIzIEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVy
ZSk7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgcmVhZChBYnN0
cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLmlk
ZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIE11
bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAg
IHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKE5h
bWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVt
YmVyKSk7CisgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0
cnVjdHVyZXMoKSkKKyAgICAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAg
ICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkg
eworICAgICAgICAgICAgd3JpdGUoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIGNs
b2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTc0LDYgKzE3NCwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogeworICAgICAgICAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgTm9kZSog
Y2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOworICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZz
ZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKKworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0
UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gZGF0YS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgIT0g
c3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJs
b2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHZhcmlhbnQsIGRhdGEuaWRlbnRpZmllck51bWJlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6IHsKQEAgLTIxNSw5ICsyMzYsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9
ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Npbmds
ZXRvbigpOwotICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKLSAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICAgICAgICAgIHZtKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG9yaWdpbi5zZW1hbnRpYyksCkBAIC0yMjUsOTYgKzI0MywxMyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRl
bnRpZmllck51bWJlcl0sCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJ
ZERpcmVjdCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMu
aXNTaW1wbGVSZXBsYWNlKCkgJiYgIXN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZSgpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxz
ZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZAotICAgICAgICAgICAgICAg
IC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNv
bnRpbnVlIGFuZCBub3QKLSAgICAgICAgICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgot
ICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxvY2ssIG5vZGUsIHN0cnVjdHVy
ZSwgc3RhdHVzWzBdLCBpZGVudGlmaWVyTnVtYmVyKTsKICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNX
YXRjaHBvaW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChuZWVkc0NlbGxDaGVjaykgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN0
YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewotICAgICAgICAgICAgICAgICAgICB0cmFuc2l0
aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHN0YXR1cy5u
ZXdTdHJ1Y3R1cmUoKSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHN0YXR1
cy5zdHJ1Y3R1cmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXR1cy5zdHJ1Y3R1cmVD
aGFpbigpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgcHJvdG90eXBlID0gc3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90
b3R5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBwcm90b3R5cGUu
YXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEVkZ2UgcHJvcGVydHlTdG9yYWdlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpOwotICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZz
ZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgTm9kZSog
cmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEo
KS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBFZGdlKHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxl
VHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVjdHVyZSA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBv
cmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KGluZGV4SW5CbG9jaywgcHV0U3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBub2RlLT5jb252
ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9w
ZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG9yaWdpbiwg
Ci0gICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBLbm93bkNl
bGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSwgVW50eXBlZFVzZSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nl
c3NEYXRhOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHN0YXR1
cy5vZmZzZXQoKTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVy
TnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtNDQ1LDYgKzM4MCwxMDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNz
RGF0YSk7CiAgICAgfQogCisgICAgdm9pZCBlbWl0UHV0QnlPZmZzZXQodW5zaWduZWQgaW5kZXhJ
bkJsb2NrLCBOb2RlKiBub2RlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIpCisgICAgeworICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgRWRnZSBjaGlsZEVk
Z2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9k
ZSgpOworCisgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpID09IHN0cnVjdHVy
ZSk7CisgICAgICAgIAorICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpOworICAg
ICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUg
JiB+U3BlY0NlbGw7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRo
aW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKKyAgICAgICAg
Ly8gYW5kIG1ha2Ugc3VyZSB3ZSBzaWduYWwgdG8gdGhlIGxvb3AgdGhhdCBpdCBzaG91bGQgY29u
dGludWUgYW5kIG5vdAorICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgorICAgICAgICBt
X2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5m
byhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENo
ZWNrKSB7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdl
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOworICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIHRyYW5z
aXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBQdXRCeUlkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnN0b3Jl
ZFByb3RvdHlwZSgpLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJ
bkJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGUoKS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkodmFyaWFudC5z
dHJ1Y3R1cmVDaGFpbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YXJpYW50LnN0cnVjdHVyZUNoYWluKCktPnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gdmFy
aWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0Nl
bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLCBwcm90b3R5cGUu
YXNDZWxsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQor
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOworICAgICAgICBlbHNlIGlm
ICgKKyAgICAgICAgICAgIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
CisgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGls
ZEVkZ2UpKTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlh
bnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKKyAgICAgICAgICAgICAgICBv
cmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFy
cmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7
CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQubmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgp
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZSogcmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3Jp
Z2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwK
KyAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBv
cmlnaW4sIGNoaWxkRWRnZSkpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IEVkZ2UocmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dy
YXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0KGluZGV4SW5CbG9jaywgcHV0U3RydWN0dXJlKTsKKyAgICAgICAgfQor
CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDb25kaXRp
b25hbFN0b3JlQmFycmllciwgb3JpZ2luLCAKKyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQy
KCkubm9kZSgpLCBLbm93bkNlbGxVc2UpLAorICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDMo
KS5ub2RlKCksIFVudHlwZWRVc2UpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
Lm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlk
ZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICB9CisKICAgICB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBOb2RlKiB3ZWFr
Q29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OTEsNiArODkxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogeworICAg
ICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBp
bnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgSW5zdGFuY2VPZjogewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBw
ZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9u
YWwgY2VsbAogICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDc0NzkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwxMiBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAg
ICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgeworICAgICAgICBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlk
ZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7
CisgICAgfQogICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpID09
IG5vZGUtPmhhc0xvY2FsKCp0aGlzKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vz
c0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODMwLDYgKzgzMCw3
IEBAIHB1YmxpYzoKICAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hEYXRhOwogICAgIEJhZzxT
d2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBt
X211bHRpR2V0QnlPZmZzZXREYXRhOworICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9t
dWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBt
X2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lu
bGluZUNhbGxGcmFtZXM7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8
RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDMwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorYm9vbCBNdWx0aVB1
dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICh2YXJpYW50c1tp
XS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE11bHRpUHV0QnlP
ZmZzZXREYXRhOjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIGZvciAodW5zaWdu
ZWQgaSA9IHZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAodmFyaWFudHNbaV0u
a2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFyaWFudHNbaV0ub2xkU3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkgPT0KKyAgICAgICAgICAgIHZhcmlhbnRzW2ldLm5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2
b2lkIEJyYW5jaFRhcmdldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGlm
ICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24g
MTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDYgKzU3LDE0IEBAIHN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CiAg
ICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKIH07CiAKK3N0cnVjdCBNdWx0
aVB1dEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBW
ZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIAorICAgIGJvb2wgd3JpdGVz
U3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7
Cit9OworCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSog
cHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC00NjAs
NyArNDY4LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIHZvaWQgY29udmVydFRvUHV0QnlP
ZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJl
Y3QpOworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERp
cmVjdCB8fCBtX29wID09IE11bHRpUHV0QnlPZmZzZXQpOwogICAgICAgICBtX29wSW5mbyA9IHN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMyhjaGlsZHJl
bi5jaGlsZDIoKSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEo
KSk7CkBAIC0xMDkxLDYgKzEwOTksMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlHZXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAg
fQogICAgIAorICAgIGJvb2wgaGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gTXVsdGlQdXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEmIG11bHRpUHV0QnlPZmZzZXREYXRhKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZv
KTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewog
ICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zm
c2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdldEJ5T2Zmc2V0LCBOb2RlUmVz
dWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhH
ZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3BlLCBOb2Rl
UmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICBj
YXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAg
IGNhc2UgREZHOjpKdW1wOgogICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgY2FzZSBTd2l0
Y2g6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2ODksNiArNDY4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAgICAgY2FzZSBBcml0aElN
dWw6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNl
dDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDA2LDYg
KzUwMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBDaGVja0luQm91bmRzOgogICAgIGNhc2UgQXJpdGhJTXVsOgogICAgIGNhc2UgTXVsdGlH
ZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAg
ICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAg
ICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzQ2LDYgKzM0Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAg
ICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgR2V0QnlJZDoKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6
CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAg
ICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY0NTQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3NCw2ICs0NzQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY29t
cGlsZU11bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEdldEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXIoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTY1Niw4ICsxNjU5LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRy
YW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwogICAgICAgICAK
LSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1f
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAorICAgICAgICBt
X291dC5zdG9yZVB0cigKKyAgICAgICAgICAgIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKICAgICB9CiAgICAgCkBA
IC0yNzA4LDEwNSArMjcxMSwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
JiBkYXRhID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpOwotICAgICAgICAKICAg
ICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoZGF0YS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdI
ZWFkZXIoKSkgewotICAgICAgICAgICAgc2V0U3RvcmFnZSh2bUNhbGwoCi0gICAgICAgICAgICAg
ICAgbV9vdXQub3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCi0g
ICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxv
Y2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRy
KGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsK
LSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNp
dHkpLCBtX2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0g
ICAgICAgIAotICAgICAgICBzZXRTdG9yYWdlKHJlc3VsdCk7CisgICAgICAgIHNldFN0b3JhZ2Uo
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBkYXRhLnByZXZpb3VzU3RydWN0dXJlKSk7
CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAg
ICAgewogICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogcHJl
dmlvdXMgPSBkYXRhLnByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHBy
ZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBz
aXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAotCi0gICAg
ICAgIEFTU0VSVChuZXdTaXplID09IGRhdGEubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91cy0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9j
U2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwotICAgICAgICAgICAgc2V0
U3RvcmFnZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSAKLSAgICAgICAgICAgIGFsbG9jYXRlQmFzaWNTdG9y
YWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5k
T2ZTdG9yYWdlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0
SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgIAotICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgbmV3QWxsb2NTaXplKTsK
LSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5h
bmNob3Ioc3RvcmFnZUxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBo
aShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotICAgICAgICBM
VmFsdWUgb2xkU3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAtc2l6ZW9mKEpT
VmFsdWUpIC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0g
aGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7Ci0KLSAgICAgICAg
Zm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsg
b2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAK
LSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9w
ZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAgICAgICAgICAg
bV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5h
dEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9IAotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UocmVz
dWx0KTsgCisgICAgICAgIHNldFN0b3JhZ2UoCisgICAgICAgICAgICByZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgZGF0YS5wcmV2
aW91c1N0cnVjdHVyZSwgZGF0YS5uZXdTdHJ1Y3R1cmUpKTsKICAgICB9CiAgICAgCi0gICAgCiAg
ICAgdm9pZCBjb21waWxlVG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMzE0MCwxMiArMzA2MCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAg
ICAgIAotICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KAotICAg
ICAgICAgICAgICAgIG1fb3V0LmFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMu
cHJvcGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLAotICAgICAgICAgICAgICAgICAgICBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShkYXRhLm9mZnNldCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobG9hZFBy
b3BlcnR5KAorICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5p
ZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCkKQEAgLTMxODksMTEgKzMxMDUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAg
IGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZDY0
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRlbnRpZmllck51bWJlcl0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRSZWxhdGl2ZVRvQmFzZSh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJl
ciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKQEAgLTMyMTMsMTIg
KzMxMjUsNjIgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPQog
ICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAg
ICAgIHN0b3JlUHJvcGVydHkoCiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQz
KCkpLAotICAgICAgICAgICAgbV9vdXQuYWRkcmVzcygKLSAgICAgICAgICAgICAgICBtX2hlYXBz
LnByb3BlcnRpZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwKLSAgICAgICAgICAgICAgICBsb3dT
dG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZl
VG9CYXNlKGRhdGEub2Zmc2V0KSkpOworICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNo
aWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7
CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZh
cmlhbnRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBl
eGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGZhaWwiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TXVsdGlQdXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEu
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJp
YW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAg
ICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
LCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnN3aXRj
aEluc3RydWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmUpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubmV4dEJsb2NrOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSAgKyAxIDwgZGF0YS52YXJpYW50
cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgICAgIGlm
IChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSA9IGJhc2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZs
eSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBzdG9y
YWdlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFudC5vZmZz
ZXQoKSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgIHdlYWtQ
b2ludGVyKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVBy
b3BlcnR5KHZhbHVlLCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24pOwor
ICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCkBAIC0zNzQ4
LDYgKzM3MTAsMTM4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFs
c2U7CiAgICAgfQogICAgIAorICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwg
aWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVQ
cm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHZhbHVlLCBMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
bV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmll
ck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNz
T2ZQcm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291
dC5hZGRyZXNzKAorICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1i
ZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKyAgICB9CisgICAg
CisgICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICBMVmFsdWUgb2JqZWN0
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAg
CisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBu
ZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQ
dHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgcmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdHVPZkxp
bmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2Uob2JqZWN0LCBwcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBv
YmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBKU09iamVjdF9idXR0ZXJmbHkpLAorICAgICAg
ICAgICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihvYmplY3QpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBpZiAoZGF0YS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwK
KyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxs
b2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7
CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQu
YW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJ
bmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5KSwgbV9jYWxsRnJhbWUpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBtX291
dC5zdG9yZVB0cihyZXN1bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVl
IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1
ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCisgICAg
eworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOworICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBv
dXRPZkxpbmVHcm93dGhGYWN0b3I7IAorCisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3
U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAg
ICAgICAgCisgICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkg
eworICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3
U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJm
bHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1Np
emUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBh
dGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSAKKyAgICAg
ICAgICAgIGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5l
d1NpemUpLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXpl
b2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBuZXdB
bGxvY1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAg
ICAgICAKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdG9yYWdlTG9jYXRpb24gPSB2bUNhbGwo
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgbV9jYWxs
RnJhbWUsIG5ld0FsbG9jU2l6ZSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHN0b3JhZ2VMb2NhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93
QnV0dGVyZmx5KTsKKworICAgICAgICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNW
YWx1ZSkgLSBzaXplb2Yodm9pZCAqKTsKKyAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBo
ZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihvbGRTaXplKTsKKworICAgICAgICBm
b3IgKHB0cmRpZmZfdCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBv
ZmZzZXQgLT0gc2l6ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBt
X291dC5zdG9yZVB0cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIHJlc3VsdCwgb2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMu
SlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKICAgICBMVmFsdWUgZ2V0QnlJZChMVmFsdWUgYmFzZSkKICAgICB7CiAgICAg
ICAgIFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50
aWZpZXJOdW1iZXIoKV07CkBAIC01MTg1LDcgKzUyNzksNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gbV9vdXQubG9hZDgobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuTWFya2VkQmxvY2tfbWFy
a0JpdHMsIG1hcmtlZEJsb2NrLCBtYXJrQnl0ZUluZGV4LCBTY2FsZU9uZSwgTWFya2VkQmxvY2s6
Om9mZnNldE9mTWFya3MoKSkpOwogICAgIH0KIAotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihM
VmFsdWUgYmFzZSwgTFZhbHVlIHZhbHVlLCBFZGdlJiB2YWx1ZUVkZ2UpCisgICAgdm9pZCBlbWl0
U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBMVmFsdWUgdmFsdWUsIEVkZ2UgdmFsdWVFZGdlKQog
ICAgIHsKICNpZiBFTkFCTEUoR0dDKQogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgY29udGludWF0aW9uIikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225025</attachid>
            <date>2014-02-23 20:36:27 -0800</date>
            <delta_ts>2014-02-23 20:44:18 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97011</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIFB1
dEJ5SWRTdGF0dXMgaW5mb3JtIHVzIGFib3V0IHBvbHltb3JwaGljIGNhc2VzIGJ5IHJldHVybmlu
ZyBhbiBhcnJheSBvZgorICAgICAgICBQdXRCeUlkVmFyaWFudHMuIFRoZSBERkcgbm93IGhhcyBh
IG5vZGUgY2FsbGVkIE11bHRpUHV0QnlPZmZzZXQgdGhhdCBpbmRpY2F0ZXMgYQorICAgICAgICBz
ZWxlY3Rpb24gb2YgbXVsdGlwbGUgaW5saW5lZCBQdXRCeUlkVmFyaWFudHMuCisgICAgICAgIAor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTXVsdGlHZXRC
eU9mZnNldCwgd2hpY2ggd2UgYWRkZWQgaW4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTY0MjA3LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGRvZXMgc29t
ZSBGVEwgcmVmYWN0b3JpbmcgdG8gbWFrZSBNdWx0aVB1dEJ5T2Zmc2V0IHNoYXJlIGNvZGUgd2l0
aCBzb21lIG5vZGVzCisgICAgICAgIHRoYXQgZ2VuZXJhdGUgc2ltaWxhciBjb2RlLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpkdW1wKToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OlB1dEJ5
SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjppc1NpbXBsZSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om51bVZhcmlhbnRzKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6dmFyaWFudHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjphdCk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGJ5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpkdW1wKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeUlkVmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6Om9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hl
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrU3RydWN0dXJl
RWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZH
Q2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAq
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3Ry
dWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlQdXRCeU9mZnNldERhdGE6OnJlYWxs
b2NhdGVzU3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6aGFzTXVsdGlQdXRCeU9mZnNldERhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om11
bHRpUHV0QnlPZmZzZXREYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAq
IGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dFN0cnVjdHVyZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG9hZFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZHJlc3NPZlByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmFnZUZvclRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFsbG9jYXRp
b24tY2FzZXMuanM6IEFkZGVkLgorICAgICAgICAoZm9vcyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAoYmF6KToKKyAgICAgICAgKC5vKToKKwogMjAxNC0wMi0yMyAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY0NTQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUv
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisg
ICAgYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNlV2hpdGVz
cGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCiAgICAgYnl0ZWNvZGUvU3Bl
Y2lhbFBvaW50ZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJ
ZFN0YXR1cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxS
ZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFNhbXBsaW5nVG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTcGVjaWFsUG9pbnRlci5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVj
aXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRTdGF0dXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRLaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxSZWR1
Y2VXaGl0ZXNwYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxT
YW1wbGluZ1Rvb2wuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBA
CiAJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEw
MDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENBN0REOTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8q
IFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkzQjRBQTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2Nr
V2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcx
MTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlND
ZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODMyLDYgKzE4MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyog
UHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
dXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUEx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0
QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZD
NkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBACiAJCQkJ
MEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3Rh
dHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJ
CTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJ
CQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAt
NTM4Myw2ICs1Mzg5LDcgQEAKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2Fm
ZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzYsNiArNjE4Myw3IEBACiAJCQkJMEY5RkI0RjQx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUz
MjcxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBA
QAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWlu
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01
NiwxNSArNTgsMTUgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQog
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5n
ZXQoKTsKICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
Tm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblsw
XS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAg
ICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9v
cF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQp
OwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUs
IDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwpAQCAtODEsMTQgKzgz
LDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgq
cHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwg
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogICAgIAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICBTaW1wbGVUcmFu
c2l0aW9uLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLAogICAgICAg
ICBjaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxv
Y2ssIHN0cnVjdHVyZSwgY2hhaW4pKSA6IDAsCiAgICAgICAgIG9mZnNldCk7CiAjZWxzZQotICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZz
ZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmCiB9
CiAKQEAgLTEwMiw3ICsxMDQsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmxpa2Vs
eVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHx8IGhhc0V4aXRTaXRlKGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkp
OwogICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCk7CkBAIC0xMTIsNyArMTE0LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiAj
ZWxzZSAvLyBFTkFCTEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiB9CiAKQEAgLTEyMywyNSArMTI1LDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNj
ZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBJZiB0aGUgSklU
IHNhdyBpdCBidXQgZGlkbid0IG9wdGltaXplIGl0LCB0aGVuIGFzc3VtZSB0aGF0IHRoaXMgdGFr
ZXMgc2xvdyBwYXRoLgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
LCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBs
YWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkoCiAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKAotICAgICAgICAgICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgICAgIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAw
LCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6CkBAIC0xNTEsOCArMTUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAg
IFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24u
cHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0
QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oCkBAIC0xNjAsMTMgKzE1OCw1MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAwLAogICAgICAgICAgICAgICAgIG9mZnNldCk7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwg
MCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xp
c3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLT51
LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgIAorICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
UHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52
bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFj
Y2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3Vy
cmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50
cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLAorICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MuY2hhaW4oKSA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9s
ZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpIDogMCwKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBwb2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBwcm9iYWJs
eSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzCi0gICAgICAgIC8vIHdlIGNvdWxkIGRvIGFi
b3V0IGl0LgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAw
LCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0yMjMsNyArMjU5LDcgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgLy8gdGhlIHNwZWNp
YWxpemVkIHNsb3QuCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBs
YWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIC8vIE91
ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2Ug
cHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQpAQCAtMjc2LDcgKzMxMiwyNiBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJh
bnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7
CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOworfQorCit2b2lkIFB1dEJ5SWRTdGF0dXM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRp
b24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnBy
aW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsOCArMjcsNyBAQAog
I2RlZmluZSBQdXRCeUlkU3RhdHVzX2gKIAogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0j
aW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCisjaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEg
KzQ0LDI3IEBAIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNh
Y2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAot
ICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBw
cm9wZXJ0eSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhh
cyB0aGUgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3Mg
Y2FjaGVkIGFzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUg
cHJvcGVydHkgdG8gb25lIHRoYXQKLSAgICAgICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBh
bmQgYSBkaXJlY3Qgc3RvcmUgdG8gdGhpcyBuZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRy
YW5zaXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNv
bWUga2luZC4KKyAgICAgICAgU2ltcGxlLAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVu
IHRha2Ugc2xvdyBwYXRoLgogICAgICAgICBUYWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAg
ICBQdXRCeUlkU3RhdHVzKCkKICAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAg
ICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAg
ICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0
ZSBzdGF0ZSkKICAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0
dXJlKDApCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVy
ZUNoYWluKDApCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUg
c3RhdGUsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluPiBzdHJ1Y3R1cmVDaGFpbiwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAg
ICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0
dXJlKQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBt
X3N0cnVjdHVyZUNoYWluKHN0cnVjdHVyZUNoYWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAg
ICAgICA6IG1fc3RhdGUoU2ltcGxlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09
IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1
Y3R1cmUpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0g
IW1fbmV3U3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJh
bnNpdGlvbikgJiYgbV9zdHJ1Y3R1cmVDaGFpbikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUg
PT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNl
dCA9PSBpbnZhbGlkT2Zmc2V0KSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCog
dWlkKTsKQEAgLTEwMSwxNCArNzYsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAg
IGJvb2wgaXNTaW1wbGVSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVS
ZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NpbXBsZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlID09IFNpbXBsZVRyYW5zaXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0g
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVy
ZTsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRz
KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7
IH0KKyAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVO
QUJMRShERkdfSklUKQpAQCAtMTIwLDEwICs5Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAg
U3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJl
OwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwot
ICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwg
MT4gbV92YXJpYW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
dXRCeUlkVmFyaWFudC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCAwKTsKK30KKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5w
cmludCgKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAg
ICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsICIsCisgICAgICAgICAgICBwb2ludGVyRHVt
cEluQ29udGV4dChzdHJ1Y3R1cmVDaGFpbigpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQdXRCeUlkVmFyaWFudF9oCisjZGVmaW5lIFB1dEJ5
SWRWYXJpYW50X2gKKworI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNs
dWRlICJQcm9wZXJ0eU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHV0QnlJ
ZFZhcmlhbnQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAg
ICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbgorICAgIH07CisgICAgCisgICAgUHV0
QnlJZFZhcmlhbnQoKQorICAgICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vbGRT
dHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fb2Zm
c2V0KGludmFsaWRPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgcmVwbGFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0
aW9uKAorICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCisgICAgICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0
dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAg
ICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0
Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1
cmVDaGFpbiA9IHN0cnVjdHVyZUNoYWluOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
IHx8IGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9u
ZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0
cnVjdHVyZUNoYWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJh
bnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUNoYWluLmdldCgpOworICAgIH0K
KyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2lu
ZCBtX2tpbmQ7CisgICAgU3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUq
IG1fbmV3U3RydWN0dXJlOworICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0
cnVjdHVyZUNoYWluOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXRCeUlkVmFyaWFudF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0
MCw3ICsxNjQwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIHNldC5hZGRBbGwobm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAot
ICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgc2V0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNjQ4LDcgKzE2NDgsNjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgICAgICAgICAgCisgICAgICAgIAorICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8g
RWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCisKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOworICAgICAgICAgICAgICAgIGNsb2Ji
ZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAgICAKKyAg
ICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVXNlIGZpbHRl
cih2YWx1ZSwgc2V0KSBhcyBhIHdheSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IHdvcmtzIGJlY2F1c2UKKyAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhl
IHNldCBiZSBUT1AgYmVmb3JlIHRoaXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKKyAgICAg
ICAgLy8gd2F5IG9mIHNldHRpbmcuCisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3
U2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjogewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKQEAgLTE2ODUs
MTggKzE3MzgsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2Rl
LT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBs
ZVJlcGxhY2UoKSkgewotICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkgJiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkg
eworICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldCht
X2dyYXBoLCBzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAg
ICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKLSAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tz
KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgdm9pZCBlbWl0UHV0QnlJZCgKKyAgICAgICAg
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wg
aXNEaXJlY3QpOworICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmLAorICAgICAgICBib29sIGlzRGlyZWN0KTsKKyAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hl
Y2tzKFN0cnVjdHVyZSosIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKTsKIAogICAgIE5v
ZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKQEAg
LTE4MzQsMTUgKzE4MzksMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zm
c2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjplbWl0
UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmVtaXRQcm90b3R5cGVDaGVja3MoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKQogewogICAgIE5vZGUqIGJhc2UgPSAw
OwotICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuY2hhaW4oKSk7Ci0gICAg
U3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5n
bGV0b25TdHJ1Y3R1cmUoKTsKKyAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShjaGFpbik7
CisgICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIEpTT2Jq
ZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFy
aWFudC5jaGFpbigpLT5zaXplKCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjaGFpbi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgY3VycmVudE9iamVjdCA9IGFzT2JqZWN0
KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0dXJlID0gdmFyaWFudC5jaGFpbigp
LT5hdChpKTsKKyAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5hdChpKTsKICAgICAg
ICAgYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhjdXJyZW50T2JqZWN0LCBj
dXJyZW50U3RydWN0dXJlKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZSk7CkBAIC0x
ODY4LDEyICsxODc0LDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dy
YXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5v
dGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBl
IHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXli
ZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkg
ZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAv
LyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgog
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFy
aWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1
c1t2YXJpYW50SW5kZXhdLmNoYWluKCkpCi0gICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNo
ZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0pOworICAgICAgICAgICAgaWYgKGdldEJ5
SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jaGFpbigpKSB7CisgICAgICAgICAgICAgICAgZW1pdFBy
b3RvdHlwZUNoZWNrcygKKyAgICAgICAgICAgICAgICAgICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpLAorICAgICAgICAgICAg
ICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY2hhaW4oKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5
T2Zmc2V0CkBAIC0xODk1LDggKzE5MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
R2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkp
LCBiYXNlKTsKICAgICAKLSAgICBpZiAodmFyaWFudC5jaGFpbigpKQotICAgICAgICBiYXNlID0g
ZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50KTsKKyAgICBpZiAodmFyaWFudC5jaGFpbigpKSB7
CisgICAgICAgIGJhc2UgPSBlbWl0UHJvdG90eXBlQ2hlY2tzKAorICAgICAgICAgICAgdmFyaWFu
dC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSwgdmFyaWFudC5jaGFpbigpKTsK
KyAgICB9CiAgICAgCiAgICAgLy8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwogICAgIC8vIGVu
c3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2
ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKQEAgLTE5MTgsNiArMTkzMiwxMjMgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBw
cmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKIH0K
IAordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCisgICAgTm9kZSogYmFzZSwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpCit7Cisg
ICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgYWRk
VG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsK
K30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKKyAgICBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKKyAgICBjb25zdCBQdXRC
eUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0KQoreworICAgIGlmICghcHV0
QnlJZFN0YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1Nl
dCgpKQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICBlbWl0
UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRz
KCkgPiAxKSB7CisgICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAg
ICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0Rp
cmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlz
RGlyZWN0KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5
SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAg
ICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGlmICghcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGVtaXRQcm90
b3R5cGVDaGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudElu
ZGV4XS5vbGRTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2
YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgu
bV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBw
dXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIg
PSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQs
IE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIAorICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgaGFuZGxlUHV0QnlPZmZz
ZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAg
ICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21w
aWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbik7CisgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSAmJiAhdmFyaWFudC5z
dHJ1Y3R1cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBlbWl0UHV0QnlJZChi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuc3Ry
dWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAgCisgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKSwgYmFzZSk7CisgICAgaWYgKCFpc0RpcmVjdCkKKyAgICAgICAgZW1pdFByb3RvdHlw
ZUNoZWNrcyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkp
OworCisgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIE5vZGUqIHByb3BlcnR5U3Rv
cmFnZTsKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dy
YXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAorICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7
CisKKyAgICBpZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQor
ICAgICAgICAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBw
cm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCisgICAgICAgIC8v
IHN0b3JpbmcgaW50byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZS4KKyAgICAgICAgQVNTRVJUKCFp
c0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICBpZiAoIXZhcmlhbnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCisgICAgICAgICAg
ICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJh
c2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRk
VG9HcmFwaCgKKyAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLAorICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBiYXNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CisgICAgfQorICAgICAgICAgICAgICAg
IAorICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBi
YXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBQdXRCeU9m
ZnNldCwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkp
LAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UsCisgICAgICAgIGJhc2UsCisgICAgICAgIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICAKKyAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNz
RGF0YTsKKyAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSB2YXJpYW50Lm9mZnNldCgpOwor
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVy
OworICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0Rh
dGEpOworCisgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKKyAgICAgICAgbV9ncmFwaC5j
b21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworfQorCiB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCkBAIC0yNTgwLDkxICsyNzExLDggQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCiAgICAgICAg
ICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9zLAog
ICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtpZGVudGlmaWVyTnVtYmVyXSk7Ci0gICAgICAgICAgICBib29sIGNhbkNvdW50QXNJbmxpbmVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKSB7Ci0gICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgICAgIGNh
bkNvdW50QXNJbmxpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChwdXRCeUlkU3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAg
ICAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgcHV0QnlJ
ZFN0YXR1cy5vZmZzZXQoKSwgdmFsdWUpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgKLSAgICAg
ICAgICAgICAgICBwdXRCeUlkU3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpCi0gICAgICAgICAg
ICAgICAgJiYgKCFwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCkKLSAgICAgICAgICAgICAg
ICAgICAgfHwgcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkp
IHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFk
ZExhemlseShwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCkpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpKSksIGJhc2Up
OwotICAgICAgICAgICAgICAgIGlmICghZGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxs
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVD
aGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm9sZFN0cnVj
dHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHB1dEJ5SWRT
dGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+YXQoaSktPnN0b3JlZFByb3RvdHlwZSgpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxDb25z
dGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhwcm90b3R5cGUuYXNDZWxsKCkpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VSVChwdXRC
eUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEq
IHRyYW5zaXRpb25EYXRhID0KLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hZGRTdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xk
U3RydWN0dXJlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5u
ZXdTdHJ1Y3R1cmUoKSkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXMub2xk
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAgICAgIT0g
cHV0QnlJZFN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2lu
ZyB0aGUgcHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQotICAg
ICAgICAgICAgICAgICAgICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2Uu
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1
cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBh
ZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHB1dEJ5SWRTdGF0dXMub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYmFzZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
YmFzZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaCgKLSAg
ICAgICAgICAgICAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICBiYXNlLAotICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3Rv
cmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0ID0gcHV0QnlJZFN0YXR1cy5vZmZzZXQoKTsKLSAgICAgICAgICAg
ICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJl
cjsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0
b3JhZ2VBY2Nlc3NEYXRhKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGRpcmVjdCkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0
LCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgY2FuQ291bnRB
c0lubGluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGNhbkNvdW50QXNJbmxpbmVkICYmIG1fZ3JhcGguY29tcGlsYXRpb24oKSkKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7
Ci0KKyAgICAgICAgICAgIGhhbmRsZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFs
dWUsIHB1dEJ5SWRTdGF0dXMsIGRpcmVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfaWQpOwogICAgICAgICB9CiAKQEAgLTMyNTksMTEgKzMzMDcsMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eToKICAgICAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CiAgICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKCptX3ZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwgdWlkLCBm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLm51bVZhcmlhbnRzKCkgIT0gMSB8fCBzdGF0dXNb
MF0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKHNjb3BlKSksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVj
dCwgc3RhdHVzLm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0g
Y2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0
cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQo
YmFzZSwgaWRlbnRpZmllck51bWJlciwgc3RhdGljX2Nhc3Q8UHJvcGVydHlPZmZzZXQ+KG9wZXJh
bmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgIC8vIEtl
ZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyAr
NDk1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5ub3QgY2hhbmdlIHRoZSBzdHJ1Y3R1
cmUuCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLndyaXRlc1N0cnVjdHVyZXMo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoK
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CkBAIC01NDQsNiArNTQ5LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gU2V0
dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKQEAgLTYxNyw2ICs2MjcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAgICAgICAgICBjYXNlIE1ha2VS
b3BlOgogICAgICAgICAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gVGhpcyBlaXRoZXIgZXhpdHMsIGNhdXNlcyBhIEdDIChsYXp5
IHN0cmluZyBhbGxvY2F0aW9uKSwgb3IgY2xvYmJlcnMKQEAgLTY2OCw2ICs2NzksMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gYmFzZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTcwOSw3ICs3MjgsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50
aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2OSw5ICs0NjksMjMgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJl
KTsKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwogICAgICAgICByZWFkKEFic3Ry
YWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkuaWRl
bnRpZmllck51bWJlcikpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTXVs
dGlQdXRCeU9mZnNldDoKKyAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAg
cmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFt
ZWRQcm9wZXJ0aWVzLCBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1i
ZXIpKTsKKyAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3Ry
dWN0dXJlcygpKQorICAgICAgICAgICAgd3JpdGUoSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAg
IGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnJlYWxsb2NhdGVzU3RvcmFnZSgpKSB7
CisgICAgICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgY2xv
YmJlcml6ZUZvckFsbG9jYXRpb24ocmVhZCwgd3JpdGUpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIpKTsKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xNzQsNiArMTc0LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICAgICAg
RWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBOb2RlKiBj
aGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CisgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNl
dERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOworCisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQ
cm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRz
W2ldOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSAhPSBz
dHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGVtaXRQdXRCeU9mZnNldChpbmRleEluQmxv
Y2ssIG5vZGUsIHN0cnVjdHVyZSwgdmFyaWFudCwgZGF0YS5pZGVudGlmaWVyTnVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgICAg
ICBjYXNlIEdldEJ5SWRGbHVzaDogewpAQCAtMjE1LDkgKzIzNiw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0g
IW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwotICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cigKICAgICAgICAgICAgICAgICAgICAgdm0oKSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iob3JpZ2luLnNlbWFudGljKSwKQEAgLTIyNSw5NiArMjQzLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXSwKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBQdXRCeUlk
RGlyZWN0KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5p
c1NpbXBsZVJlcGxhY2UoKSAmJiAhc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKQorICAgICAg
ICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlKCkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RhdHVzLm9sZFN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNl
LCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCi0gICAgICAgICAgICAgICAg
Ly8gYW5kIG1ha2Ugc3VyZSB3ZSBzaWduYWwgdG8gdGhlIGxvb3AgdGhhdCBpdCBzaG91bGQgY29u
dGludWUgYW5kIG5vdAotICAgICAgICAgICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCi0g
ICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgc3RydWN0dXJl
LCBzdGF0dXNbMF0sIGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChuZWVkc1dh
dGNocG9pbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKG5lZWRzQ2VsbENoZWNrKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3du
Q2VsbFVzZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRp
b25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0cnVjdHVyZSwgc3RhdHVzLm5l
d1N0cnVjdHVyZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3AoKSA9PSBQdXRCeUlkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiwgaW5kZXhJbkJsb2NrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jaGFpbnMoKS5hZGRMYXppbHkoc3RhdHVz
LnN0cnVjdHVyZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdHVzLnN0cnVjdHVyZUNo
YWluKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+YXQoaSktPnN0b3JlZFByb3Rv
dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxs
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssIHByb3RvdHlwZS5h
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
RWRnZSBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChz
dGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ID09IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewotICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBH
ZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQo
KSkpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIEtub3duQ2VsbFVzZSkpOwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBOb2RlKiBy
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSkp
OwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IEVkZ2UocmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVU
cmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0g
bV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRy
YW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9y
aWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXhJbkJsb2NrLCBwdXRTdHJ1
Y3R1cmUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3Bl
cnR5U3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBDb25kaXRpb25hbFN0b3JlQmFycmllciwgb3JpZ2luLCAK
LSAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIEtub3duQ2Vs
bFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vz
c0RhdGE7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gc3RhdHVz
Lm9mZnNldCgpOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC00NDUsNiArMzgwLDEwNyBAQCBwcml2YXRlOgog
ICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NE
YXRhKTsKICAgICB9CiAKKyAgICB2b2lkIGVtaXRQdXRCeU9mZnNldCh1bnNpZ25lZCBpbmRleElu
QmxvY2ssIE5vZGUqIG5vZGUsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBQdXRCeUlkVmFy
aWFudCYgdmFyaWFudCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcikKKyAgICB7CisgICAgICAg
IE5vZGVPcmlnaW4gb3JpZ2luID0gbm9kZS0+b3JpZ2luOworICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2Rl
KCk7CisKKyAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJl
KTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CisgICAg
ICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAm
IH5TcGVjQ2VsbDsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhp
bmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZAorICAgICAgICAv
LyBhbmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250
aW51ZSBhbmQgbm90CisgICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCisgICAgICAgIG1f
aW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIAorICAg
ICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCisgICAgICAgICAgICAgICAgT3BJbmZv
KHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hl
Y2spIHsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2Up
OworICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VL
aW5kKEtub3duQ2VsbFVzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IDA7CisgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgdHJhbnNp
dGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAorICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0cnVjdHVyZSwgdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IFB1dEJ5SWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleElu
QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseSh2YXJpYW50LnN0
cnVjdHVyZUNoYWluKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKS0+c2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB2YXJp
YW50LnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2Vs
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssIHByb3RvdHlwZS5h
c0NlbGwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCisg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CisgICAgICAgIGVsc2UgaWYg
KAorICAgICAgICAgICAgdmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UK
KyAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSB2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxk
RWRnZSkpOworICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFu
dC5vZmZzZXQoKSkpOworICAgICAgICAgICAgTm9kZSogYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ug
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAgICAgIG9y
aWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJy
aWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsK
KyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlKiByZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmln
aW4sCisgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAor
ICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9y
aWdpbiwgY2hpbGRFZGdlKSkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gRWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVjdHVyZSA9IG1fZ3Jh
cGguYWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0
aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnQoaW5kZXhJbkJsb2NrLCBwdXRTdHJ1Y3R1cmUpOworICAgICAgICB9CisK
KyAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENvbmRpdGlv
bmFsU3RvcmVCYXJyaWVyLCBvcmlnaW4sIAorICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDIo
KS5ub2RlKCksIEtub3duQ2VsbFVzZSksCisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMygp
Lm5vZGUoKSwgVW50eXBlZFVzZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEu
b2Zmc2V0ID0gdmFyaWFudC5vZmZzZXQoKTsKKyAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRl
bnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgIG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAgIH0KKwogICAgIHZv
aWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25l
ZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIE5vZGUqIHdlYWtD
b25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5MSw2ICs4OTEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OiB7CisgICAg
ICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGlu
c2VydFN0b3JlQmFycmllcihtX2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBJbnN0YW5jZU9mOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBhcHBl
YXJzIGJyb2tlbjogQ2hlY2tIYXNJbnN0YW5jZSBhbHJlYWR5IGRvZXMgYW4gdW5jb25kaXRpb25h
bCBjZWxsCiAgICAgICAgICAgICAvLyBjaGVjay4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwNzQ3OQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDEyIEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CiAgICAgfQorICAg
IGlmIChub2RlLT5oYXNNdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpKSB7CisgICAgICAgIE11bHRpUHV0
QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiaWQiLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsICJ7IiwgaWRl
bnRpZmllcnMoKVtkYXRhLmlkZW50aWZpZXJOdW1iZXJdLCAifSIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZGF0YS52YXJpYW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KGRhdGEudmFyaWFudHNbaV0sIGNvbnRleHQpKTsK
KyAgICB9CiAgICAgQVNTRVJUKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykgPT0g
bm9kZS0+aGFzTG9jYWwoKnRoaXMpKTsKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCp0aGlzKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MzAsNiArODMwLDcg
QEAgcHVibGljOgogICAgIEJhZzxCcmFuY2hEYXRhPiBtX2JyYW5jaERhdGE7CiAgICAgQmFnPFN3
aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKICAgICBCYWc8TXVsdGlHZXRCeU9mZnNldERhdGE+IG1f
bXVsdGlHZXRCeU9mZnNldERhdGE7CisgICAgQmFnPE11bHRpUHV0QnlPZmZzZXREYXRhPiBtX211
bHRpUHV0QnlPZmZzZXREYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1f
aW5saW5lVmFyaWFibGVEYXRhOwogICAgIE93blB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IG1faW5s
aW5lQ2FsbEZyYW1lczsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxG
dWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
MzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitib29sIE11bHRpUHV0
QnlPZmZzZXREYXRhOjp3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSB2YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKHZhcmlhbnRzW2ld
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgTXVsdGlQdXRCeU9m
ZnNldERhdGE6OnJlYWxsb2NhdGVzU3RvcmFnZSgpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICh2YXJpYW50c1tpXS5r
aW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgCisgICAgICAgIGlmICh2YXJpYW50c1tpXS5vbGRTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSA9PQorICAgICAgICAgICAgdmFyaWFudHNbaV0ubmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZv
aWQgQnJhbmNoVGFyZ2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgaWYg
KCFibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
NjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50LmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSAiUHV0
QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtNTcsNiArNTgsMTQg
QEAgc3RydWN0IE11bHRpR2V0QnlPZmZzZXREYXRhIHsKICAgICBWZWN0b3I8R2V0QnlJZFZhcmlh
bnQsIDI+IHZhcmlhbnRzOwogfTsKIAorc3RydWN0IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKKyAg
ICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyOworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwg
Mj4gdmFyaWFudHM7CisgICAgCisgICAgYm9vbCB3cml0ZXNTdHJ1Y3R1cmVzKCkgY29uc3Q7Cisg
ICAgYm9vbCByZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKK307CisKIHN0cnVjdCBTdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZTsKQEAgLTQ2MCw3ICs0NjksNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9QdXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewotICAgICAgICBBU1NFUlQobV9v
cCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCk7CisgICAgICAgIEFTU0VSVCht
X29wID09IFB1dEJ5SWQgfHwgbV9vcCA9PSBQdXRCeUlkRGlyZWN0IHx8IG1fb3AgPT0gTXVsdGlQ
dXRCeU9mZnNldCk7CiAgICAgICAgIG1fb3BJbmZvID0gc3RvcmFnZUFjY2Vzc0RhdGFJbmRleDsK
ICAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQzKGNoaWxkcmVuLmNoaWxkMigpKTsKICAgICAgICAg
Y2hpbGRyZW4uc2V0Q2hpbGQyKGNoaWxkcmVuLmNoaWxkMSgpKTsKQEAgLTEwOTEsNiArMTEwMCwx
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0
aUdldEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNN
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBNdWx0
aVB1dEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgbXVs
dGlQdXRCeU9mZnNldERhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PE11bHRpUHV0QnlPZmZzZXREYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBi
b29sIGhhc0Z1bmN0aW9uRGVjbEluZGV4KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09
IE5ld0Z1bmN0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw2ICsxNzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKE11bHRpR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFB1
dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oTXVsdGlQdXRCeU9mZnNl
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKEdldEFycmF5TGVuZ3RoLCBOb2RlUmVz
dWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCwgTm9kZVJlc3Vs
dEludDMyKSBcCiAgICAgbWFjcm8oR2V0U2NvcGUsIE5vZGVSZXN1bHRKUykgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NTIsNiArNTUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAg
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAg
ICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgY2FzZSBERkc6Okp1bXA6CiAgICAg
ICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjQ1NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgY2FzZSBDaGVj
azoKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY4OSw2ICs0
Njg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNh
c2UgQ2hlY2tJbkJvdW5kczoKICAgICBjYXNlIEFyaXRoSU11bDoKICAgICBjYXNlIE11bHRpR2V0
QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMDYsNiArNTAwNiw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAg
ICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2Ug
TXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1
NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYsNiArMjQ2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBjYXNlIEhhcmRQaGFudG9tOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGlu
dDoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBj
b3VudCB0aGVzZSB1c2VzLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0zNDYsNiArMzQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIEhhcmRQaGFudG9tOgogICAgICAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
ICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgY2FzZSBNdWx0
aVB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBjb3VudCB0aGVzZSB1
c2VzLgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBpbmxpbmUgQ2FwYWJp
bGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRCeUlkOgogICAgIGNhc2Ug
VG9UaGlzOgogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlP
ZmZzZXQ6CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgog
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc0LDYg
KzQ3NCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAg
ICBjb21waWxlUHV0QnlPZmZzZXQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAg
ICAgICAgY29tcGlsZUdldEdsb2JhbFZhcigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjU2
LDggKzE2NTksOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1fcGxh
biwgY29kZUJsb2NrKCksIG1fbm9kZSk7CiAgICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTY0
KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKAorICAgICAg
ICAgICAgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZSksCiAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmUpOwogICAgIH0KICAgICAKQEAgLTI3MDgsMTA1ICsyNzExLDIyIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQogICAg
IHsKICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCk7Ci0gICAgICAgIAogICAgICAgICBMVmFsdWUgb2JqZWN0ID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChkYXRhLnBy
ZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Ci0gICAgICAgICAg
ICBzZXRTdG9yYWdlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKLSAgICAgICAgICAgICAgICBtX2NhbGxG
cmFtZSwgb2JqZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0
RW5kKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoaW5pdGlhbE91dE9mTGluZUNhcGFj
aXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1f
b3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZT
dG9yYWdlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5h
bmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksIG1fY2FsbEZyYW1lKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0g
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVy
Zmx5LCBzbG93QnV0dGVyZmx5KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBvYmpl
Y3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0
b3JhZ2UocmVzdWx0KTsKKyAgICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShvYmplY3QsIGRhdGEucHJldmlvdXNTdHJ1Y3R1cmUpKTsKICAgICB9CiAKICAgICB2b2lkIGNv
bXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIFN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
OwotICAgICAgICAKLSAgICAgICAgU3RydWN0dXJlKiBwcmV2aW91cyA9IGRhdGEucHJldmlvdXNT
dHJ1Y3R1cmU7CiAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotCi0gICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFj
aXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7Ci0gICAgICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6
ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCi0KLSAgICAgICAgQVNTRVJUKG5ld1NpemUgPT0g
ZGF0YS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2
NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmpl
Y3QsIG5ld0FsbG9jU2l6ZSk7Ci0gICAgICAgICAgICBzZXRTdG9yYWdlKHJlc3VsdCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgTFZhbHVlIG9sZFN0b3JhZ2UgPSBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgY29udGludWF0
aW9uIikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9y
YWdlID0gCi0gICAgICAgICAgICBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChtX291dC5j
b25zdEludFB0cihuZXdTaXplKSwgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291dC5hZGQobV9vdXQuY29u
c3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9m
KEpTVmFsdWUpKTsgICAgICAgCi0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RvcmFnZUxvY2F0
aW9uID0gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSksIG1fY2FsbEZyYW1lLCBuZXdBbGxvY1NpemUpOwotICAgICAgICAKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihzdG9yYWdlTG9jYXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1
dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbV9v
dXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLQotICAgICAg
ICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXplb2Yodm9pZCAq
KTsKLSAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihvbGRTaXplKTsKLQotICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQq
KSkgewotICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAotICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
b2xkU3RvcmFnZSwgb2Zmc2V0KSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQs
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwg
b2Zmc2V0KSk7Ci0gICAgICAgIH0gCi0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihy
ZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkp
OwotICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZShyZXN1bHQpOyAKKyAgICAgICAgc2V0U3Rv
cmFnZSgKKyAgICAgICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAg
ICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCBkYXRhLnByZXZpb3VzU3RydWN0dXJlLCBkYXRhLm5l
d1N0cnVjdHVyZSkpOwogICAgIH0KICAgICAKLSAgICAKICAgICB2b2lkIGNvbXBpbGVUb1N0cmlu
ZygpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CkBAIC0zMTQwLDEyICszMDYwLDggQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIGRhdGEgPQogICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIHNldEpTVmFs
dWUoCi0gICAgICAgICAgICBtX291dC5sb2FkNjQoCi0gICAgICAgICAgICAgICAgbV9vdXQuYWRk
cmVzcygKLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRlbnRp
Zmllck51bWJlcl0sCi0gICAgICAgICAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGls
ZDEoKSksCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZlVG9CYXNlKGRhdGEub2Zm
c2V0KSkpKTsKKyAgICAgICAgc2V0SlNWYWx1ZShsb2FkUHJvcGVydHkoCisgICAgICAgICAgICBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIGRhdGEu
b2Zmc2V0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU11bHRpR2V0QnlPZmZzZXQo
KQpAQCAtMzE4OSwxMSArMzEwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSA9IGJhc2U7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbV9v
dXQubG9hZFB0cihwcm9wZXJ0eUJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkNjQoCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRp
ZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5QmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZlVG9CYXNlKHZh
cmlhbnQub2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5
KHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9vdXQuYW5jaG9yKHJlc3VsdCkpOwpAQCAtMzIxMywxMiArMzEyNSw2MiBAQCBwcml2YXRlOgog
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9CiAgICAgICAgICAgICBtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAg
ICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgc3RvcmVQcm9wZXJ0eSgKICAg
ICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSksCi0gICAgICAgICAgICBtX291
dC5hZGRyZXNzKAotICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50
aWZpZXJOdW1iZXJdLAotICAgICAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEo
KSksCi0gICAgICAgICAgICAgICAgb2Zmc2V0UmVsYXRpdmVUb0Jhc2UoZGF0YS5vZmZzZXQpKSk7
CisgICAgICAgICAgICBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIsIGRhdGEub2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTXVs
dGlQdXRCeU9mZnNldCgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0
YSA9IG1fbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0QnlPZmZzZXQg
Y2FzZSAiLCBpKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk11bHRpUHV0QnlPZmZzZXQgZmFpbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNl
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgIFN3aXRjaENhc2Uo
d2Vha1BvaW50ZXIodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEp
KSk7CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAg
ICAgICBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSksIGNhc2Vz
LCBleGl0LCBXZWlnaHQoMCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5tX25leHRCbG9jazsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhibG9ja3NbaV0sIGkgICsgMSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpID8gYmxvY2tzW2kg
KyAxXSA6IGV4aXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2
YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlJlcGxhY2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFy
aWFudC5vZmZzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0Lmxv
YWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCisg
ICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlhbnQub2Zmc2V0KCksIHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICB3ZWFrUG9pbnRlcih2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwgc3RvcmFn
ZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgdGVybWluYXRlKEJh
ZENhY2hlKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXIoKQpAQCAtMzc0OCw2ICszNzEwLDEzNyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwogICAgIH0KICAgICAKKyAg
ICBMVmFsdWUgbG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9v
dXQubG9hZDY0KGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1iZXIsIG9m
ZnNldCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoCisgICAgICAgIExW
YWx1ZSB2YWx1ZSwgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUs
IGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkpOwor
ICAgIH0KKyAgICAKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc09mUHJvcGVydHkoCisgICAgICAg
IExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcygKKyAgICAgICAg
ICAgIG1faGVhcHMucHJvcGVydGllc1tpZGVudGlmaWVyTnVtYmVyXSwgc3RvcmFnZSwgb2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzdG9yYWdl
Rm9yVHJhbnNpdGlvbigKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAorICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5l
eHRTdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkK
KyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIAorICAgICAgICBpZiAocHJldmlv
dXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVyZS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkUHRyKG9iamVjdCwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwg
cHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgb2JqZWN0LCBtX291
dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLAorICAgICAgICAg
ICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0U3RydWN0dXJlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZW1pdFN0b3JlQmFycmllcihvYmplY3QpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBpZiAocHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVh
ZGVyKCkpIHsKKyAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCisgICAgICAg
ICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ug
Y29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAor
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICog
c2l6ZW9mKEpTVmFsdWUpKSwgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmFk
ZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdl
KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
dm1DYWxsKAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksIG1fY2FsbEZyYW1lKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBz
bG93QnV0dGVyZmx5KTsKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBvYmplY3QsIG1f
aGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAor
ICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2
aW91cywgU3RydWN0dXJlKiBuZXh0KQorICAgIHsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBw
cmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICAgICAg
c2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKKworICAg
ICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBpZiAocHJldmlvdXMt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxv
Y1NpemUgPSBtX291dC5jb25zdEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwgbV9j
YWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UgY29udGludWF0aW9uIikpOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgZW5kT2ZTdG9yYWdlID0gCisgICAgICAgICAgICBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFu
ZEdldEVuZChtX291dC5jb25zdEludFB0cihuZXdTaXplKSwgc2xvd1BhdGgpOworICAgICAgICAK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihtX291
dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3Rv
cmFnZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnQ2NChu
ZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgCisgICAgICAgIAorICAgICAgICBMVmFs
dWUgc3RvcmFnZUxvY2F0aW9uID0gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBuZXdBbGxvY1NpemUpOworICAgICAg
ICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihz
dG9yYWdlTG9jYXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0
LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7CisKKyAgICAgICAgcHRyZGlm
Zl90IGhlYWRlclNpemUgPSAtc2l6ZW9mKEpTVmFsdWUpIC0gc2l6ZW9mKHZvaWQgKik7CisgICAg
ICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4ob2xkU2l6ZSk7CisKKyAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVy
U2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRy
KG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3Jh
Z2UsIG9mZnNldCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5h
ZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG1f
b3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgTFZhbHVlIGdldEJ5
SWQoTFZhbHVlIGJhc2UpCiAgICAgewogICAgICAgICBTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBo
LmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwpAQCAtNTE4NSw3ICs1
Mjc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4KG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLk1hcmtlZEJsb2NrX21hcmtCaXRzLCBtYXJrZWRCbG9jaywgbWFya0J5dGVJ
bmRleCwgU2NhbGVPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpKTsKICAgICB9CiAK
LSAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UsIExWYWx1ZSB2YWx1ZSwgRWRn
ZSYgdmFsdWVFZGdlKQorICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSwgTFZh
bHVlIHZhbHVlLCBFZGdlIHZhbHVlRWRnZSkKICAgICB7CiAjaWYgRU5BQkxFKEdHQykKICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9y
ZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFsbG9jYXRpb24tY2FzZXMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQt
Ynktb2Zmc2V0LXJlYWxsb2NhdGlvbi1jYXNlcy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFsbG9jYXRp
b24tY2FzZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDAgQEAKK3ZhciBmb29zID0g
WworICAgIGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQyOyB9LAorICAgIGZ1bmN0aW9uKG8pIHsgby5m
ZiA9IDQyOyB9LAorICAgIGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQyOyB9LAorICAgIGZ1bmN0aW9u
KG8pIHsgby5mZiA9IDQyOyB9LAorICAgIGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQyOyB9LAorICAg
IGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQyOyB9LAorICAgIGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQy
OyB9LAorICAgIGZ1bmN0aW9uKG8pIHsgby5mZiA9IDQyOyB9CitdOworCitpZiAoZm9vcy5sZW5n
dGggIT0gOCkKKyAgICB0aHJvdyAiRXJyb3IiOworCitmdW5jdGlvbiBiYXIobywgbikgeworICAg
IGlmIChuID09IDApCisgICAgICAgIHJldHVybjsKKyAgICBvLm5hID0gMTsKKyAgICBpZiAobiA9
PSAxKQorICAgICAgICByZXR1cm47CisgICAgby5uYiA9IDI7CisgICAgaWYgKG4gPT0gMikKKyAg
ICAgICAgcmV0dXJuOworICAgIG8ubmMgPSAzOworICAgIGlmIChuID09IDMpCisgICAgICAgIHJl
dHVybjsKKyAgICBvLm5kID0gNDsKKyAgICBpZiAobiA9PSA0KQorICAgICAgICByZXR1cm47Cisg
ICAgby5uZSA9IDU7CisgICAgaWYgKG4gPT0gNSkKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmYg
PSA2OworICAgIGlmIChuID09IDYpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5nID0gNzsKKyAg
ICBpZiAobiA9PSA3KQorICAgICAgICByZXR1cm47CisgICAgby5uaCA9IDg7Cit9CisKK2Z1bmN0
aW9uIGJheihvLCBuKSB7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChvLm5hICE9IDEpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVwdGlvbiI7CisgICAgaWYg
KG4gPT0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvLm5iICE9IDIpCisgICAgICAgIHRo
cm93ICJNZW1vcnkgY29ycnVwdGlvbiI7CisgICAgaWYgKG4gPT0gMikKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChvLm5jICE9IDMpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVwdGlvbiI7
CisgICAgaWYgKG4gPT0gMykKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvLm5kICE9IDQpCisg
ICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVwdGlvbiI7CisgICAgaWYgKG4gPT0gNCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChvLm5lICE9IDUpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29y
cnVwdGlvbiI7CisgICAgaWYgKG4gPT0gNSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvLm5m
ICE9IDYpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVwdGlvbiI7CisgICAgaWYgKG4gPT0g
NikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChvLm5nICE9IDcpCisgICAgICAgIHRocm93ICJN
ZW1vcnkgY29ycnVwdGlvbiI7CisgICAgaWYgKG4gPT0gNykKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChvLm5oICE9IDgpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVwdGlvbiI7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgODsgKytpKQorICAgIG5vSW5saW5lKGZvb3NbaV0pOworbm9J
bmxpbmUoYmFyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZh
ciBvID0ge307CisgICAgdmFyIHAgPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6Nn07Cisg
ICAgYmFyKG8sIGkgJSA4KTsKKyAgICBiYXIocCwgaSAlIDgpOworICAgIAorICAgIGZvb3NbaSAl
IDhdKG8pOworICAgIGZvb3NbaSAlIDhdKHApOworICAgIAorICAgIGlmIChvLmZmICE9IDQyKQor
ICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBvOiAiICsgby5mZjsKKyAgICBpZiAocC5mZiAh
PSA0MikKKyAgICAgICAgdGhyb3cgIkJhZCByZXN1bHQgaW4gbzogIiArIHAuZmY7CisgICAgCisg
ICAgaWYgKHAuYSAhPSAxIHx8IHAuYiAhPSAyIHx8IHAuYyAhPSAzIHx8IHAuZCAhPSA0IHx8IHAu
ZSAhPSA1IHx8IHAuZiAhPSA2KQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iCisg
ICAgYmF6KG8sIGkgJSA4KTsKKyAgICBiYXoocCwgaSAlIDgpOworfQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNjQ1NzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBB
ZGQgYSBtaWNyb2JlbmNobWFyayBmb3IgcG9seW1vcnBoaWMgUHV0QnlJZC4KKworICAgICAgICAq
IGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktaWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmpz
OiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIwMTQtMDItMjMgIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHTF0gQWxsb3cgQU5HTEUgdG8gaW5pdGlhbGl6
ZSB1bnVzZWQgdmFyeWluZ3MKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBo
aWMtcHV0LWJ5LWlkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS1pZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS1pZC1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3BvbHltb3JwaGlj
LXB1dC1ieS1pZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnkt
aWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGlj
LXB1dC1ieS1pZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
b2x5bW9ycGhpYy1wdXQtYnktaWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1w
dXQtYnktaWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1i
eS1pZC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3BvbHltb3JwaGljLXB1dC1ieS1pZC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0
IEBACitmdW5jdGlvbiBmb28obykgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kp
CisgICAgICAgIG8uZiA9IChvLmYgfCAwKSArIDQyOworfQorCitub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0OworICAgIGlm
ICgoaSAlIDMpID09IDApCisgICAgICAgIG9iamVjdCA9IHtnOjN9OworICAgIGVsc2UgaWYgKChp
ICUgMykgPT0gMSkKKyAgICAgICAgb2JqZWN0ID0ge2Y6MSwgZzoyfTsKKyAgICBlbHNlIGlmICgo
aSAlIDMpID09IDIpCisgICAgICAgIG9iamVjdCA9IHtnOjEsIGY6Mn07CisgICAgZm9vKG9iamVj
dCk7CisgICAgaWYgKG9iamVjdC5mICE9IDQyICogMTAwICsgKGkgJSAzKSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgb2JqZWN0LmY7Cit9
CisKK3ZhciByID0ge2c6MywgaDo0LCBmOjV9OworZm9vKHIpOworaWYgKHIuZiAhPSA1ICsgNDIg
KiAxMDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHIuZjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225026</attachid>
            <date>2014-02-23 20:44:18 -0800</date>
            <delta_ts>2014-02-24 09:14:04 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96712</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIFB1
dEJ5SWRTdGF0dXMgaW5mb3JtIHVzIGFib3V0IHBvbHltb3JwaGljIGNhc2VzIGJ5IHJldHVybmlu
ZyBhbiBhcnJheSBvZgorICAgICAgICBQdXRCeUlkVmFyaWFudHMuIFRoZSBERkcgbm93IGhhcyBh
IG5vZGUgY2FsbGVkIE11bHRpUHV0QnlPZmZzZXQgdGhhdCBpbmRpY2F0ZXMgYQorICAgICAgICBz
ZWxlY3Rpb24gb2YgbXVsdGlwbGUgaW5saW5lZCBQdXRCeUlkVmFyaWFudHMuCisgICAgICAgIAor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTXVsdGlHZXRC
eU9mZnNldCwgd2hpY2ggd2UgYWRkZWQgaW4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTY0MjA3LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGRvZXMgc29t
ZSBGVEwgcmVmYWN0b3JpbmcgdG8gbWFrZSBNdWx0aVB1dEJ5T2Zmc2V0IHNoYXJlIGNvZGUgd2l0
aCBzb21lIG5vZGVzCisgICAgICAgIHRoYXQgZ2VuZXJhdGUgc2ltaWxhciBjb2RlLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpkdW1wKToKKyAgICAgICAgKiBieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OlB1dEJ5
SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjppc1NpbXBsZSk6CisgICAg
ICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om51bVZhcmlhbnRzKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6dmFyaWFudHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjphdCk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGJ5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlB1dEJ5SWRW
YXJpYW50OjpkdW1wKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpQ
dXRCeUlkVmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlh
bnQ6Om9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hl
Y2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdD
U0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrU3RydWN0dXJl
RWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZH
Q2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAq
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29u
c3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdG
aXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3Ry
dWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlQdXRCeU9mZnNldERhdGE6OnJlYWxs
b2NhdGVzU3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6aGFzTXVsdGlQdXRCeU9mZnNldERhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om11
bHRpUHV0QnlPZmZzZXREYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAq
IGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dFN0cnVjdHVyZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAg
ICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG9hZFByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmVQcm9wZXJ0eSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZHJlc3NPZlByb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmFnZUZvclRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFsbG9jYXRp
b24tY2FzZXMuanM6IEFkZGVkLgorICAgICAgICAoZm9vcyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAoYmF6KToKKyAgICAgICAgKC5vKToKKwogMjAxNC0wMi0yMyAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBGZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY0NTQ1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC04Miw2ICs4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUv
UHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0
dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCisg
ICAgYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNlV2hpdGVz
cGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCiAgICAgYnl0ZWNvZGUvU3Bl
Y2lhbFBvaW50ZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Bl
Y3VsYXRlZFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3Bw
IFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRh
cmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJ
ZFN0YXR1cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRC
eUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxS
ZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFNhbXBsaW5nVG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTcGVjaWFsUG9pbnRlci5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVj
aXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRTdGF0dXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRLaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxSZWR1
Y2VXaGl0ZXNwYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxT
YW1wbGluZ1Rvb2wuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1Nyw4IEBA
CiAJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRDQTdEQzEw
MDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENBN0REOTAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8q
IFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkzQjRBQTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2Nr
V2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTc0OTcx
MTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEgLyogSlND
ZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xODMyLDYgKzE4MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYzQzYgLyog
UHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
dXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOUEx
NENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlhbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0Yg
LyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0
QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZD
NkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBACiAJCQkJ
MEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvaW50LmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRT
dGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3Rh
dHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50
LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICovLAogCQkJ
CTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLywKIAkJ
CQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovLApAQCAt
NTM4Myw2ICs1Mzg5LDcgQEAKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2Fm
ZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczRTE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzYsNiArNjE4Myw3IEBACiAJCQkJMEY5RkI0RjQx
N0ZDQjkxNzAwQ0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2QjFDQkQxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uV3Jh
cHBlckdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyOTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUz
MjcxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBA
QAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlk
TGlzdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWlu
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01
NiwxNSArNTgsMTUgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQog
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5n
ZXQoKTsKICAgICBpZiAoIXN0cnVjdHVyZSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
Tm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblsw
XS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bjb2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAg
ICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNvZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9v
cF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQp
OwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVy
biBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOwor
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUs
IDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShz
dHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwpAQCAtODEsMTQgKzgz
LDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgq
cHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwg
aW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogICAgIAotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICBTaW1wbGVUcmFu
c2l0aW9uLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlh
bnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLAogICAgICAg
ICBjaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxv
Y2ssIHN0cnVjdHVyZSwgY2hhaW4pKSA6IDAsCiAgICAgICAgIG9mZnNldCk7CiAjZWxzZQotICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZz
ZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmCiB9
CiAKQEAgLTEwMiw3ICsxMDQsNyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmxpa2Vs
eVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpCiAgICAgICAgIHx8IGhhc0V4aXRTaXRlKGxv
Y2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkp
OwogICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVpZCk7CkBAIC0xMTIsNyArMTE0LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiAj
ZWxzZSAvLyBFTkFCTEUoSklUKQogICAgIFVOVVNFRF9QQVJBTShtYXApOwotICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCiB9CiAKQEAgLTEyMywyNSArMTI1LDIyIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoKTsKICAgICAKICAg
ICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNj
ZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX3Vuc2V0OgogICAgICAgICAvLyBJZiB0aGUgSklU
IHNhdyBpdCBidXQgZGlkbid0IG9wdGltaXplIGl0LCB0aGVuIGFzc3VtZSB0aGF0IHRoaXMgdGFr
ZXMgc2xvdyBwYXRoLgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
LCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBs
YWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CiAgICAgICAgICAgICBzdHVi
SW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50
bHkoCiAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlk
U3RhdHVzKAotICAgICAgICAgICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgICAgIG9mZnNldCk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2UoCisgICAgICAgICAgICAgICAgc3R1Yklu
Zm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsK
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAw
LCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
dHJhbnNpdGlvbl9ub3JtYWw6CkBAIC0xNTEsOCArMTUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRy
YW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAg
IFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24u
cHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0
QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4oCkBAIC0xNjAsMTMgKzE1OCw1MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRU
cmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAwLAogICAgICAgICAgICAgICAgIG9mZnNldCk7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwg
MCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xp
c3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLT51
LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAgIAorICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2VzcyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
UHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52
bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsK
KyAgICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6
OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFj
Y2Vzczo6VHJhbnNpdGlvbjogeworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9CisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3Vy
cmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50
cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAg
IGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNjZXNzLm5ld1N0cnVjdHVyZSgpLAorICAgICAgICAg
ICAgICAgICAgICBhY2Nlc3MuY2hhaW4oKSA/IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9s
ZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4oKSkpIDogMCwKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBwb2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBwcm9iYWJs
eSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzCi0gICAgICAgIC8vIHdlIGNvdWxkIGRvIGFi
b3V0IGl0LgotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAw
LCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogfQogI2VuZGlmCkBAIC0yMjMsNyArMjU5LDcgQEAgUHV0QnlJZFN0
YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgLy8gdGhlIHNwZWNp
YWxpemVkIHNsb3QuCiAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBs
YWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFy
aWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQogICAgIAogICAgIC8vIE91
ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUgZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2Ug
cHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQpAQCAtMjc2LDcgKzMxMiwyNiBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSk7CiAgICAgCi0gICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJh
bnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7
CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNp
dGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZzZXQpOworfQorCit2b2lkIFB1dEJ5SWRTdGF0dXM6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsK
KyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRp
b24pIik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnBy
aW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
aAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsOCArMjcsNyBAQAog
I2RlZmluZSBQdXRCeUlkU3RhdHVzX2gKIAogI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0j
aW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zm
c2V0LmgiCisjaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVT
dHViSW5mby5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEg
KzQ0LDI3IEBAIHB1YmxpYzoKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNh
Y2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAot
ICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBhIGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBw
cm9wZXJ0eSBmb3IgY2FzZXMgd2hlcmUgdGhlIG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhh
cyB0aGUgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3Mg
Y2FjaGVkIGFzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUg
cHJvcGVydHkgdG8gb25lIHRoYXQKLSAgICAgICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBh
bmQgYSBkaXJlY3Qgc3RvcmUgdG8gdGhpcyBuZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRy
YW5zaXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNv
bWUga2luZC4KKyAgICAgICAgU2ltcGxlLAogICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVu
IHRha2Ugc2xvdyBwYXRoLgogICAgICAgICBUYWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAg
ICBQdXRCeUlkU3RhdHVzKCkKICAgICAgICAgOiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAg
ICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAg
ICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkKLSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zm
c2V0KQogICAgIHsKICAgICB9CiAgICAgCiAgICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0
ZSBzdGF0ZSkKICAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0
dXJlKDApCi0gICAgICAgICwgbV9uZXdTdHJ1Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVy
ZUNoYWluKDApCi0gICAgICAgICwgbV9vZmZzZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Ns
b3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAgUHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUg
c3RhdGUsCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNo
YWluPiBzdHJ1Y3R1cmVDaGFpbiwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAg
ICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0
dXJlKQotICAgICAgICAsIG1fbmV3U3RydWN0dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBt
X3N0cnVjdHVyZUNoYWluKHN0cnVjdHVyZUNoYWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICBQdXRCeUlkU3RhdHVzKGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAg
ICAgICA6IG1fc3RhdGUoU2ltcGxlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09
IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1
Y3R1cmUpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0g
IW1fbmV3U3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJh
bnNpdGlvbikgJiYgbV9zdHJ1Y3R1cmVDaGFpbikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUg
PT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRlID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNl
dCA9PSBpbnZhbGlkT2Zmc2V0KSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVC
bG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCog
dWlkKTsKQEAgLTEwMSwxNCArNzYsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAg
IGJvb2wgaXNTaW1wbGVSZXBsYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVS
ZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NpbXBsZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlID09IFNpbXBsZVRyYW5zaXRpb247IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1
Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0g
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVy
ZTsgfQotICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5nZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRz
KCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7
IH0KKyAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVO
QUJMRShERkdfSklUKQpAQCAtMTIwLDEwICs5Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1
dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwogICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAg
U3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJl
OwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwot
ICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwg
MT4gbV92YXJpYW50czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
dXRCeUlkVmFyaWFudC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFu
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCAwKTsKK30KKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgIGNhc2UgTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5w
cmludCgKKyAgICAgICAgICAgICI8UmVwbGFjZTogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQoc3Ry
dWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLCBvZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBjYXNlIFRyYW5zaXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAg
ICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQob2xkU3RydWN0
dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4
dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCksICIsICIsCisgICAgICAgICAgICBwb2ludGVyRHVt
cEluQ29udGV4dChzdHJ1Y3R1cmVDaGFpbigpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQdXRCeUlkVmFyaWFudF9oCisjZGVmaW5lIFB1dEJ5
SWRWYXJpYW50X2gKKworI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNs
dWRlICJQcm9wZXJ0eU9mZnNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHV0QnlJ
ZFZhcmlhbnQgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAg
ICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJhbnNpdGlvbgorICAgIH07CisgICAgCisgICAgUHV0
QnlJZFZhcmlhbnQoKQorICAgICAgICA6IG1fa2luZChOb3RTZXQpCisgICAgICAgICwgbV9vbGRT
dHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fb2Zm
c2V0KGludmFsaWRPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJ
ZFZhcmlhbnQgcmVwbGFjZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICAgICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3Ry
dWN0dXJlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0
aW9uKAorICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1
Y3R1cmUsCisgICAgICAgIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0
dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAg
ICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0
Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1
cmVDaGFpbiA9IHN0cnVjdHVyZUNoYWluOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJl
dHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9u
IHx8IGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAgICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOwor
ICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRyYW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9u
ZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0
cnVjdHVyZUNoYWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJh
bnNpdGlvbik7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZUNoYWluLmdldCgpOworICAgIH0K
KyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2lu
ZCBtX2tpbmQ7CisgICAgU3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUq
IG1fbmV3U3RydWN0dXJlOworICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0
cnVjdHVyZUNoYWluOworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQdXRCeUlkVmFyaWFudF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0
MCw3ICsxNjQwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzLnNpemUoKTsgaS0tOykKICAgICAgICAgICAgIHNldC5hZGRBbGwobm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAot
ICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgc2V0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNjQ4LDcgKzE2NDgsNjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgICAgICAgICAgCisgICAgICAgIAorICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDogeworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8g
RWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCisKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG9uZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOworICAgICAgICAgICAgICAgIGNsb2Ji
ZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOworICAgICAgICAKKyAg
ICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVXNlIGZpbHRl
cih2YWx1ZSwgc2V0KSBhcyBhIHdheSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlz
IHdvcmtzIGJlY2F1c2UKKyAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhl
IHNldCBiZSBUT1AgYmVmb3JlIHRoaXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKKyAgICAg
ICAgLy8gd2F5IG9mIHNldHRpbmcuCisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3
U2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjogewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKTsKICAgICAgICAgaWYgKHZhbHVlID09IG5vZGUtPmZ1bmN0aW9uKCkpIHsKQEAgLTE2ODUs
MTggKzE3MzgsMjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50
aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2Rl
LT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwotICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBs
ZVJlcGxhY2UoKSkgewotICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdHVz
LmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkgJiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkg
eworICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50
OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0
cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJM
aW1pdCk7CisgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldCht
X2dyYXBoLCBzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xv
YmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAg
ICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsKLSAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tz
KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgdm9pZCBlbWl0UHV0QnlJZCgKKyAgICAgICAg
Tm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wg
aXNEaXJlY3QpOworICAgIHZvaWQgaGFuZGxlUHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwg
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0
dXMmLAorICAgICAgICBib29sIGlzRGlyZWN0KTsKKyAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hl
Y2tzKFN0cnVjdHVyZSosIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qKTsKIAogICAgIE5vZGUqIGdl
dFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KTsKICAgICAKQEAgLTE4MzQs
MTUgKzE4MzksMTYgQEAgTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90
eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50KQorTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmVtaXRQcm90b3R5cGVDaGVja3MoCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluKQogewogICAgIE5vZGUqIGJhc2UgPSAwOwotICAg
IG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuY2hhaW4oKSk7Ci0gICAgU3RydWN0
dXJlKiBjdXJyZW50U3RydWN0dXJlID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25T
dHJ1Y3R1cmUoKTsKKyAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShjaGFpbik7CisgICAg
U3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIEpTT2JqZWN0KiBj
dXJyZW50T2JqZWN0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5j
aGFpbigpLT5zaXplKCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFp
bi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgY3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJl
bnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jaykpOwotICAgICAgICBjdXJyZW50U3RydWN0dXJlID0gdmFyaWFudC5jaGFpbigpLT5hdChp
KTsKKyAgICAgICAgY3VycmVudFN0cnVjdHVyZSA9IGNoYWluLT5hdChpKTsKICAgICAgICAgYmFz
ZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50
U3RydWN0dXJlKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlQoYmFzZSk7CkBAIC0xODY4LDEy
ICsxODc0LDE4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNv
bXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlu
bGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAgICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVj
dHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMuIFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3Qg
YmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwgaWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0
ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCByZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBv
ZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBhcmUgbm90IHdhdGNocG9pbnRhYmxlLgogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMo
KTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1c1t2YXJp
YW50SW5kZXhdLmNoYWluKCkpCi0gICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyhn
ZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0pOworICAgICAgICAgICAgaWYgKGdldEJ5SWRTdGF0
dXNbdmFyaWFudEluZGV4XS5jaGFpbigpKSB7CisgICAgICAgICAgICAgICAgZW1pdFByb3RvdHlw
ZUNoZWNrcygKKyAgICAgICAgICAgICAgICAgICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhd
LnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAg
ICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0uY2hhaW4oKSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0
CkBAIC0xODk1LDggKzE5MDcsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCgKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNl
KTsKICAgICAKLSAgICBpZiAodmFyaWFudC5jaGFpbigpKQotICAgICAgICBiYXNlID0gZW1pdFBy
b3RvdHlwZUNoZWNrcyh2YXJpYW50KTsKKyAgICBpZiAodmFyaWFudC5jaGFpbigpKSB7CisgICAg
ICAgIGJhc2UgPSBlbWl0UHJvdG90eXBlQ2hlY2tzKAorICAgICAgICAgICAgdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKSwgdmFyaWFudC5jaGFpbigpKTsKKyAgICB9
CiAgICAgCiAgICAgLy8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0
aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRp
bCB3ZSdyZSBkb25lIHdpdGgKQEAgLTE5MTgsNiArMTkzMiwxMjMgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBwcmVkaWN0
aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKIH0KIAordm9p
ZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5SWQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpCit7CisgICAgaWYg
KGlzRGlyZWN0KQorICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVu
dGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgYWRkVG9HcmFw
aChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKK30KKwor
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKKyAgICBOb2RlKiBiYXNlLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlKiB2YWx1ZSwKKyAgICBjb25zdCBQdXRCeUlkU3Rh
dHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlzRGlyZWN0KQoreworICAgIGlmICghcHV0QnlJZFN0
YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQor
ICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICBlbWl0UHV0QnlJ
ZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmIChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAx
KSB7CisgICAgICAgIGlmICghaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAgICAgICAg
ICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
X2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCkt
Pm5vdGljZUlubGluZWRQdXRCeUlkKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIWlzRGlyZWN0
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0
dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYg
KHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmICghcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGVtaXRQcm90b3R5cGVD
aGVja3MoCisgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5v
bGRTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0
aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKKyAgICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlk
U3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAgIGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyTnVtYmVyOworICAgICAgICBhZGRUb0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5m
byhkYXRhKSwgYmFzZSwgdmFsdWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRCeUlkU3RhdHVzWzBdOworICAgIAorICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgeworICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFy
aWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgdmFsdWUpOworICAgICAgICBp
ZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlv
bigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bik7CisgICAgaWYgKHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSAmJiAhdmFyaWFudC5zdHJ1Y3R1
cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0dXJl
Q2hhaW4oKSk7CisgICAgICAgICAgICAgICAgCisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
KSwgYmFzZSk7CisgICAgaWYgKCFpc0RpcmVjdCkKKyAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNr
cyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgIAorICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsK
KyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAorICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisKKyAg
ICBpZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAg
ICAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisKKyAg
ICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0aGUgcHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11
c3QgYmUgYmVjYXVzZSB3ZSdyZQorICAgICAgICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1s
aW5lIHN0b3JhZ2UuCisgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZz
ZXQoKSkpOworCisgICAgICAgIGlmICghdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgeworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgK
KyAgICAgICAgICAgICAgICBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgYmFzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCisgICAgICAgICAgICAgICAgYmFzZSwgYWRk
VG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKKyAgICB9CisKKyAg
ICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7
CisKKyAgICBhZGRUb0dyYXBoKAorICAgICAgICBQdXRCeU9mZnNldCwKKyAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAorICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UsCisgICAgICAgIGJhc2UsCisgICAgICAgIHZhbHVlKTsKKworICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9
IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFw
cGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisKKyAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigp
KQorICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7
Cit9CisKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByZXBhcmVUb1BhcnNlQmxvY2soKQogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTI1
ODAsOTEgKzI3MTEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2Rm
Z0NvZGVCbG9jaywKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZv
cywgbV9kZmdTdHViSW5mb3MsCiAgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwg
bV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdKTsKLSAgICAgICAgICAgIGJv
b2wgY2FuQ291bnRBc0lubGluZWQgPSB0cnVlOwotICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3Rh
dHVzLmlzU2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7
Ci0gICAgICAgICAgICAgICAgY2FuQ291bnRBc0lubGluZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVS
ZXBsYWNlKCkpIHsKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUo
KSkpLCBiYXNlKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCBwdXRCeUlkU3RhdHVzLm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKAotICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVUcmFu
c2l0aW9uKCkKLSAgICAgICAgICAgICAgICAmJiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hh
aW4oKQotICAgICAgICAgICAgICAgICAgICB8fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWlu
KCktPmlzU3RpbGxWYWxpZCgpKSkgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4o
KSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHB1dEJ5SWRTdGF0dXMub2xk
U3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9y
ZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENv
bnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJl
Q2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
cHJvdG90eXBlID0gcHV0QnlJZFN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVk
UHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKHByb3RvdHlwZS5hc0Nl
bGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPQotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXRCeUlkU3RhdHVzLm5ld1N0cnVjdHVyZSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAg
ICAgICAgICAgICAgICAgICAhPSBwdXRCeUlkU3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBi
ZSBiZWNhdXNlIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JpbmcgaW50byB0aGUg
b3V0LW9mLWxpbmUgc3RvcmFnZS4KLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGlu
ZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAoIXB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPm91
dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQocHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgICAgICBQdXRCeU9mZnNldCwKLSAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkp
LAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgIGJhc2UsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKLSAg
ICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBwdXRCeUlkU3RhdHVzLm9m
ZnNldCgpOwotICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBpZiAoZGlyZWN0KQotICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFs
dWUpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBjYW5Db3VudEFzSW5saW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2FuQ291bnRBc0lubGluZWQgJiYgbV9ncmFwaC5j
b21waWxhdGlvbigpKQotICAgICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZFB1dEJ5SWQoKTsKLQorICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgZGlyZWN0KTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KIApAQCAtMzI1OSwxMSAr
MzMwNywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBQdXRCeUlkU3Rh
dHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVj
dCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5p
c1NpbXBsZVJlcGxhY2UoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFu
dHMoKSAhPSAxIHx8IHN0YXR1c1swXS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2Up
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRp
Zmllck51bWJlciksIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFs
T2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAg
ICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQ
cm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAg
ICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY0
NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5v
dCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkud3JpdGVzU3RydWN0dXJlcygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKQEAgLTU0NCw2ICs1NDksMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3Ry
dWN0dXJlLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpAQCAtNjE3LDYg
KzYyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAg
ICAgICAgICAgIGNhc2UgTWFrZVJvcGU6CiAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6
CisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGlzIGVpdGhlciBleGl0
cywgY2F1c2VzIGEgR0MgKGxhenkgc3RyaW5nIGFsbG9jYXRpb24pLCBvciBjbG9iYmVycwpAQCAt
NjY4LDYgKzY3OSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVu
dGlmaWVyTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9
PSBiYXNlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtNzA5
LDcgKzcyOCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50
aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDkgKzQ2
OSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICBy
ZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7
CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9z
dHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdy
aXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkuaWRlbnRpZmllck51bWJlcikpOworICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICB3cml0ZShKU0NlbGxf
c3RydWN0dXJlKTsKKyAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVh
bGxvY2F0ZXNTdG9yYWdlKCkpIHsKKyAgICAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZs
eSk7CisgICAgICAgICAgICBjbG9iYmVyaXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0
OgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmll
ck51bWJlcikpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY0
NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3NCw2ICsxNzQsMjcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAg
ICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCk7CisKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUu
Zm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlm
ICghc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1
dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9kZSwgc3RydWN0dXJlLCB2YXJpYW50LCBkYXRhLmlk
ZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CkBAIC0yMTUsOSArMjM2
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9v
bCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKLSAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2Vs
bENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLApA
QCAtMjI1LDk2ICsyNDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVU
cmFuc2l0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1W
YXJpYW50cygpICE9IDEpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3Jl
IHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5
SWQKLSAgICAgICAgICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9v
cCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBhbmQgbm90Ci0gICAgICAgICAgICAgICAgLy8gZG8g
YW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUo
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJs
b2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0YXR1c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGRF
ZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwotICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
c3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051
bGwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleElu
QmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVk
UHJvdG90eXBlKCkuYXNDZWxsKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlu
cygpLmFkZExhemlseShzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigp
LT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5p
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4
SW5CbG9jaywgcHJvdG90eXBlLmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2Uo
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVP
ZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBF
ZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGlu
ZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwg
b3JpZ2luLCBjaGlsZEVkZ2UpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4s
IEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewotICAgICAgICAgICAgICAgICAgICBO
b2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVy
ZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25v
d25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChp
bmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3Rv
cmVCYXJyaWVyLCBvcmlnaW4sIAotICAgICAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVu
dHlwZWRVc2UpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0KCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFj
Y2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0
YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTQ0NSw2ICsz
ODAsMTA3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5h
cHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwogICAgIH0KIAorICAgIHZvaWQgZW1pdFB1dEJ5T2Zm
c2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgTm9kZSogbm9kZSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyKQorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47Cisg
ICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIE5vZGUqIGNo
aWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKworICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOworICAgICAgICAKKyAgICAgICAgYm9vbCBuZWVkc1dhdGNo
cG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKTsKKyAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOworICAgICAgICAKKyAgICAgICAgLy8gTm93
IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRo
ZSBQdXRCeUlkCisgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29w
IHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKKyAgICAgICAgLy8gZG8gYW55IGVsaW1p
bmF0aW9ucy4KKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisK
KyAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAorICAgICAgICAgICAgICAgIE9w
SW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2Vs
bENoZWNrKSB7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRF
ZGdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2Vs
bFVzZSk7CisKKyAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRh
ID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uKSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisKKyAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2lu
LCBpbmRleEluQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3Jl
ZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseSh2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkp
OworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZhcmlhbnQuc3Ry
dWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVjdHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90
b3R5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJl
VHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleElu
QmxvY2ssIHByb3RvdHlwZS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CisKKyAgICAg
ICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgcHJv
cGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOworICAgICAgICBlbHNlIGlmICgKKyAgICAgICAgICAg
IHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICB8
fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsK
KyAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKKyAgICAgICAgICAgICAgICBvcmlnaW4sIE9wSW5mbyh0
cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBF
ZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOworICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGlu
ZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAg
ICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CisKKyAgICAgICAg
ICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UsCisgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hpbGRFZGdlKSkpOworICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIs
IG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9n
cmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7CisgICAgICAgIH0K
KworICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0
aW9uYWxTdG9yZUJhcnJpZXIsIG9yaWdpbiwgCisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxk
MigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwKKyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQz
KCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7CisgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlh
bnQub2Zmc2V0KCk7CisgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIg
PSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEu
YXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICB9CisKICAgICB2b2lkIGFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2Nr
LCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkx
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogeworICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJp
ZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgSW5z
dGFuY2VPZjogewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENo
ZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2VzIGFuIHVuY29uZGl0aW9uYWwgY2VsbAogICAgICAg
ICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc0NzkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZh
cmlhbnRzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRl
eHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFz
TXVsdGlQdXRCeU9mZnNldERhdGEoKSkgeworICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAgICAgIG91dC5wcmludChj
b21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0
YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRzW2ldLCBjb250ZXh0KSk7CisgICAgfQogICAgIEFT
U0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpID09IG5vZGUtPmhhc0xvY2Fs
KCp0aGlzKSk7CiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50
cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODMwLDYgKzgzMCw3IEBAIHB1YmxpYzoKICAg
ICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hEYXRhOwogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3
aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZz
ZXREYXRhOworICAgIEJhZzxNdWx0aVB1dEJ5T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0
RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxl
RGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2FsbEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7
CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2
ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDMwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorYm9vbCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6
d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmICh2YXJpYW50c1tpXS5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE11bHRpUHV0QnlPZmZzZXREYXRhOjpyZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdAoreworICAgIGZvciAodW5zaWduZWQgaSA9IHZhcmlhbnRz
LnNpemUoKTsgaS0tOykgeworICAgICAgICBpZiAodmFyaWFudHNbaV0ua2luZCgpICE9IFB1dEJ5
SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBpZiAodmFyaWFudHNbaV0ub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCkgPT0KKyAgICAgICAgICAgIHZhcmlhbnRzW2ldLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIEJyYW5jaFRhcmdl
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIGlmICghYmxvY2spCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYg
KzQyLDcgQEAKICNpbmNsdWRlICJHZXRCeUlkVmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50Lmgi
CiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
ICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKQEAgLTU3LDYgKzU4LDE0IEBAIHN0cnVjdCBNdWx0
aUdldEJ5T2Zmc2V0RGF0YSB7CiAgICAgVmVjdG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50
czsKIH07CiAKK3N0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOwor
ICAgIAorICAgIGJvb2wgd3JpdGVzU3RydWN0dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3Q7Cit9OworCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEgewogICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmU7CkBAIC00NjAsNyArNDY5LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCwgRWRnZSBzdG9yYWdlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8
fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOworICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlk
IHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCB8fCBtX29wID09IE11bHRpUHV0QnlPZmZzZXQpOwog
ICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXg7CiAgICAgICAgIGNoaWxk
cmVuLnNldENoaWxkMyhjaGlsZHJlbi5jaGlsZDIoKSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENo
aWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7CkBAIC0xMDkxLDYgKzExMDAsMTYgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8TXVsdGlHZXRCeU9mZnNldERh
dGEqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzTXVsdGlQdXRCeU9mZnNl
dERhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTXVsdGlQdXRCeU9mZnNldDsK
KyAgICB9CisgICAgCisgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIG11bHRpUHV0QnlPZmZzZXRE
YXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlv
bkRlY2xJbmRleCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY0
NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0
aUdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAg
IG1hY3JvKEdldFNjb3BlLCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjQ1NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRC
eUlkRGlyZWN0OgogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CiAgICAgICAgIGNhc2UgREZHOjpKdW1wOgogICAgICAgICBjYXNlIEJyYW5j
aDoKICAgICAgICAgY2FzZSBTd2l0Y2g6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2
ICsyNTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAg
Y2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJl
dmlzaW9uIDE2NDU0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2ODksNiArNDY4OSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIENoZWNrSW5Cb3Vu
ZHM6CiAgICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAg
IGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjQ1NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDA2LDYgKzUwMDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja0luQm91bmRzOgogICAgIGNhc2UgQXJpdGhJ
TXVsOgogICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZz
ZXQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAg
ICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQ
dXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNl
cy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MzQ2LDYgKzM0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRv
bToKICAgICAgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBN
dWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoK
ICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY0NTQ1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0QnlJZDoKICAgICBjYXNlIFRvVGhpczoKICAgICBj
YXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNh
c2UgVG9QcmltaXRpdmU6CiAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTY0NTQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NCw2ICs0NzQsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgY29tcGlsZVB1dEJ5
T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgorICAgICAgICAgICAgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRHbG9iYWxWYXIoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY1Niw4ICsxNjU5LDggQEAg
cHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlm
eUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygp
LCBtX25vZGUpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpLAorICAgICAgICBtX291dC5zdG9yZVB0cigKKyAgICAgICAgICAgIHdlYWtQb2lu
dGVyKG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAogICAg
ICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlKTsKICAgICB9CiAgICAgCkBAIC0yNzA4LDEwNSArMjcxMSwyMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpOwotICAgICAgICAKICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoZGF0YS5wcmV2aW91c1N0cnVjdHVy
ZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgc2V0U3RvcmFnZSh2
bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKAotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0
aEluaXRpYWxDYXBhY2l0eSksCi0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVh
dGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50UHRyKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihK
U1ZhbHVlKSksIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAg
ICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgK
LSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLCBtX2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRl
cmZseSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpT
T2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIAotICAgICAgICBzZXRTdG9yYWdlKHJlc3VsdCk7
CisgICAgICAgIHNldFN0b3JhZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBkYXRh
LnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewogICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKLSAgICAgICAgCi0g
ICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXMgPSBkYXRhLnByZXZpb3VzU3RydWN0dXJlOwogICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9m
KEpTVmFsdWUpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVH
cm93dGhGYWN0b3I7IAotCi0gICAgICAgIEFTU0VSVChuZXdTaXplID09IGRhdGEubmV3U3RydWN0
dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAg
ICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNp
emVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJm
bHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1Np
emUpOwotICAgICAgICAgICAgc2V0U3RvcmFnZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0
aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IAotICAgICAg
ICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQobV9vdXQuY29uc3RJbnRQdHIobmV3
U2l6ZSksIHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RC
dXR0ZXJmbHkgPSBtX291dC5hbmNob3IobV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5ld0Fs
bG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAg
ICAgIAotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxG
cmFtZSwgbmV3QWxsb2NTaXplKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc3RvcmFnZUxvY2F0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dC
dXR0ZXJmbHkpOwotICAgICAgICBMVmFsdWUgb2xkU3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIob2Jq
ZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhl
YWRlclNpemUgPSAtc2l6ZW9mKEpTVmFsdWUpIC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0
cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
b2xkU2l6ZSk7Ci0KLSAgICAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsg
b2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAg
ICAgIExWYWx1ZSBsb2FkZWQgPSAKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0
LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9m
ZnNldCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNz
KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAg
ICAgICB9IAotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5h
ZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAgCi0g
ICAgICAgIHNldFN0b3JhZ2UocmVzdWx0KTsgCisgICAgICAgIHNldFN0b3JhZ2UoCisgICAgICAg
ICAgICByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwg
b2xkU3RvcmFnZSwgZGF0YS5wcmV2aW91c1N0cnVjdHVyZSwgZGF0YS5uZXdTdHJ1Y3R1cmUpKTsK
ICAgICB9CiAgICAgCi0gICAgCiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmcoKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtMzE0MCwxMiAr
MzA2MCw4IEBAIHByaXZhdGU6CiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0KICAg
ICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAg
ICAgbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgICAgIG1fb3V0LmFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLAot
ICAgICAgICAgICAgICAgICAgICBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAg
ICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2ZVRvQmFzZShkYXRhLm9mZnNldCkpKSk7CisgICAg
ICAgIHNldEpTVmFsdWUobG9hZFByb3BlcnR5KAorICAgICAgICAgICAgbG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCkKQEAgLTMxODksMTEg
KzMxMDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBi
YXNlOwogICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJv
cGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNz
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRlbnRp
Zmllck51bWJlcl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2ZVRvQmFzZSh2YXJpYW50Lm9mZnNldCgp
KSkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2Us
IGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihy
ZXN1bHQpKTsKQEAgLTMyMTMsMTIgKzMxMjUsNjIgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFn
ZUFjY2Vzc0RhdGEmIGRhdGEgPQogICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW21fbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAg
IG1fb3V0LnN0b3JlNjQoCisgICAgICAgIHN0b3JlUHJvcGVydHkoCiAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpLAotICAgICAgICAgICAgbV9vdXQuYWRkcmVzcygKLSAg
ICAgICAgICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwK
LSAgICAgICAgICAgICAgICBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgICAgIG9mZnNldFJlbGF0aXZlVG9CYXNlKGRhdGEub2Zmc2V0KSkpOworICAgICAgICAgICAg
bG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRh
Lm9mZnNldCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAKKyAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxv
Y2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ld
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwor
ICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1
dEJ5T2Zmc2V0IGZhaWwiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAg
IGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBTd2l0Y2hDYXNlKHdlYWtQb2ludGVyKHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICB9
CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9h
ZFB0cihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpLCBjYXNlcywgZXhpdCwgV2VpZ2h0
KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9u
ZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ld
LCBpICArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEu
dmFyaWFudHNbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwor
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNl
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkp
KQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1f
aGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICAgICAgICAg
ICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJp
YW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZVB0cigKKyAg
ICAgICAgICAgICAgICAgICAgd2Vha1BvaW50ZXIodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSksIGJh
c2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRp
Zmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGV4aXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0R2xvYmFsVmFyKCkKQEAgLTM3NDgsNiArMzcxMCwxMzcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKICAgICB9CiAgICAgCisgICAgTFZhbHVlIGxvYWRQ
cm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ2NChhZGRy
ZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzdG9yZVByb3BlcnR5KAorICAgICAgICBMVmFsdWUgdmFsdWUsIExW
YWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCisgICAgeworICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzT2ZQcm9w
ZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQpKTsKKyAgICB9CisgICAgCisg
ICAgVHlwZWRQb2ludGVyIGFkZHJlc3NPZlByb3BlcnR5KAorICAgICAgICBMVmFsdWUgc3RvcmFn
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoCisgICAgICAgICAgICBtX2hlYXBzLnBy
b3BlcnRpZXNbaWRlbnRpZmllck51bWJlcl0sIHN0b3JhZ2UsIG9mZnNldFJlbGF0aXZlVG9CYXNl
KG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RvcmFnZUZvclRyYW5zaXRpb24o
CisgICAgICAgIExWYWx1ZSBvYmplY3QsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKKyAgICAgICAg
U3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXh0U3RydWN0dXJlKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gb2JqZWN0OworICAgICAgICAKKyAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAg
IGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAgICAg
ICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3RydWN0
dXJlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgbV9vdXQubG9hZFB0cihvYmpl
Y3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwKKyAgICAgICAgICAgICAgICBwcmV2aW91
c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShMVmFs
dWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
aWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAg
ICAgICAgICByZXR1cm4gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbigK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvSGF2ZVBy
b3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAorICAgICAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBvYmplY3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2Ugc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIp
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0
TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBlbmRP
ZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVl
KSksIHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJ
bnRQdHIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAg
ICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdp
dGhJbml0aWFsQ2FwYWNpdHkpLCBtX2NhbGxGcmFtZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7
CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgTFZhbHVl
IG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVyZSogcHJldmlvdXMsIFN0cnVjdHVy
ZSogbmV4dCkKKyAgICB7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gcHJldmlvdXMtPm91dE9m
TGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCisKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2Yo
SlNWYWx1ZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRl
eGluZ0hlYWRlcigpKSB7CisgICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQu
Y29uc3RJbnQ2NChuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmpl
Y3QsIG5ld0FsbG9jU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdC
bG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGVuZE9mU3Rv
cmFnZSA9IAorICAgICAgICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQobV9vdXQu
Y29uc3RJbnRQdHIobmV3U2l6ZSksIHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IobV9vdXQuYWRkKG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVv
ZihKU1ZhbHVlKSk7ICAgICAgIAorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2VMb2Nh
dGlvbiA9IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpLCBtX2NhbGxGcmFtZSwgbmV3QWxsb2NTaXplKTsKKyAgICAgICAgCisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc3RvcmFnZUxvY2F0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RC
dXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworCisgICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXpl
ID0gLXNpemVvZihKU1ZhbHVlKSAtIHNpemVvZih2b2lkICopOworICAgICAgICBwdHJkaWZmX3Qg
ZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUp
OworCisgICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+
IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICBMVmFs
dWUgbG9hZGVkID0gCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNz
KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsK
KyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBz
LnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9i
amVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIExWYWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNl
KQogICAgIHsKICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygp
W21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKQEAgLTUxODUsNyArNTI3OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBtX291dC5sb2FkOChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5N
YXJrZWRCbG9ja19tYXJrQml0cywgbWFya2VkQmxvY2ssIG1hcmtCeXRlSW5kZXgsIFNjYWxlT25l
LCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSk7CiAgICAgfQogCi0gICAgdm9pZCBlbWl0
U3RvcmVCYXJyaWVyKExWYWx1ZSBiYXNlLCBMVmFsdWUgdmFsdWUsIEVkZ2UmIHZhbHVlRWRnZSkK
KyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UsIExWYWx1ZSB2YWx1ZSwgRWRn
ZSB2YWx1ZUVkZ2UpCiAgICAgewogI2lmIEVOQUJMRShHR0MpCiAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBjb250
aW51YXRpb24iKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211
bHRpLXB1dC1ieS1vZmZzZXQtcmVhbGxvY2F0aW9uLWNhc2VzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFs
bG9jYXRpb24tY2FzZXMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL211bHRpLXB1dC1ieS1vZmZzZXQtcmVhbGxvY2F0aW9uLWNhc2VzLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACit2YXIgZm9vcyA9IFsKKyAgICBmdW5jdGlv
bihvKSB7IG8uZmYgPSA0MjsgfSwKKyAgICBmdW5jdGlvbihvKSB7IG8uZmYgPSA0MjsgfSwKKyAg
ICBmdW5jdGlvbihvKSB7IG8uZmYgPSA0MjsgfSwKKyAgICBmdW5jdGlvbihvKSB7IG8uZmYgPSA0
MjsgfSwKKyAgICBmdW5jdGlvbihvKSB7IG8uZmYgPSA0MjsgfSwKKyAgICBmdW5jdGlvbihvKSB7
IG8uZmYgPSA0MjsgfSwKKyAgICBmdW5jdGlvbihvKSB7IG8uZmYgPSA0MjsgfSwKKyAgICBmdW5j
dGlvbihvKSB7IG8uZmYgPSA0MjsgfQorXTsKKworaWYgKGZvb3MubGVuZ3RoICE9IDgpCisgICAg
dGhyb3cgIkVycm9yIjsKKworZnVuY3Rpb24gYmFyKG8sIG4pIHsKKyAgICBpZiAobiA9PSAwKQor
ICAgICAgICByZXR1cm47CisgICAgby5uYSA9IDE7CisgICAgaWYgKG4gPT0gMSkKKyAgICAgICAg
cmV0dXJuOworICAgIG8ubmIgPSAyOworICAgIGlmIChuID09IDIpCisgICAgICAgIHJldHVybjsK
KyAgICBvLm5jID0gMzsKKyAgICBpZiAobiA9PSAzKQorICAgICAgICByZXR1cm47CisgICAgby5u
ZCA9IDQ7CisgICAgaWYgKG4gPT0gNCkKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmUgPSA1Owor
ICAgIGlmIChuID09IDUpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5mID0gNjsKKyAgICBpZiAo
biA9PSA2KQorICAgICAgICByZXR1cm47CisgICAgby5uZyA9IDc7CisgICAgaWYgKG4gPT0gNykK
KyAgICAgICAgcmV0dXJuOworICAgIG8ubmggPSA4OworfQorCitmdW5jdGlvbiBiYXoobywgbikg
eworICAgIGlmIChuID09IDApCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoby5uYSAhPSAxKQor
ICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iOworICAgIGlmIChuID09IDEpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoby5uYiAhPSAyKQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNv
cnJ1cHRpb24iOworICAgIGlmIChuID09IDIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoby5u
YyAhPSAzKQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iOworICAgIGlmIChuID09
IDMpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoby5uZCAhPSA0KQorICAgICAgICB0aHJvdyAi
TWVtb3J5IGNvcnJ1cHRpb24iOworICAgIGlmIChuID09IDQpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoby5uZSAhPSA1KQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iOworICAg
IGlmIChuID09IDUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoby5uZiAhPSA2KQorICAgICAg
ICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iOworICAgIGlmIChuID09IDYpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoby5uZyAhPSA3KQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRp
b24iOworICAgIGlmIChuID09IDcpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoby5uaCAhPSA4
KQorICAgICAgICB0aHJvdyAiTWVtb3J5IGNvcnJ1cHRpb24iOworfQorCitmb3IgKHZhciBpID0g
MDsgaSA8IDg7ICsraSkKKyAgICBub0lubGluZShmb29zW2ldKTsKK25vSW5saW5lKGJhcik7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAg
IHZhciBwID0ge2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1LCBmOjZ9OworICAgIGJhcihvLCBpICUg
OCk7CisgICAgYmFyKHAsIGkgJSA4KTsKKyAgICAKKyAgICBmb29zW2kgJSA4XShvKTsKKyAgICBm
b29zW2kgJSA4XShwKTsKKyAgICAKKyAgICBpZiAoby5mZiAhPSA0MikKKyAgICAgICAgdGhyb3cg
IkJhZCByZXN1bHQgaW4gbzogIiArIG8uZmY7CisgICAgaWYgKHAuZmYgIT0gNDIpCisgICAgICAg
IHRocm93ICJCYWQgcmVzdWx0IGluIG86ICIgKyBwLmZmOworICAgIAorICAgIGlmIChwLmEgIT0g
MSB8fCBwLmIgIT0gMiB8fCBwLmMgIT0gMyB8fCBwLmQgIT0gNCB8fCBwLmUgIT0gNSB8fCBwLmYg
IT0gNikKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIgorICAgIGJheihvLCBpICUg
OCk7CisgICAgYmF6KHAsIGkgJSA4KTsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTQtMDItMjMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBG
VEwgc2hvdWxkIGRvIHBvbHltb3JwaGljIFB1dEJ5SWQgaW5saW5pbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTIxMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRkIGEgbWljcm9iZW5j
aG1hcmsgZm9yIHBvbHltb3JwaGljIFB1dEJ5SWQuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Bv
bHltb3JwaGljLXB1dC1ieS1pZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS1pZC5qczogQWRkZWQuCisgICAg
ICAgIChmb28pOgorCiAyMDE0LTAyLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4K
IAogICAgICAgICBbV2ViR0xdIEFsbG93IEFOR0xFIHRvIGluaXRpYWxpemUgdW51c2VkIHZhcnlp
bmdzCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS1pZC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9y
cGhpYy1wdXQtYnktaWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktaWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktaWQKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktaWQuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0
LWJ5LWlkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS1pZC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktaWQuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhp
Yy1wdXQtYnktaWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorZnVuY3Rpb24g
Zm9vKG8pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICBvLmYg
PSAoby5mIHwgMCkgKyA0MjsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG9iamVjdDsKKyAgICBpZiAoKGkgJSAzKSA9PSAw
KQorICAgICAgICBvYmplY3QgPSB7ZzozfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09IDEpCisg
ICAgICAgIG9iamVjdCA9IHtmOjEsIGc6Mn07CisgICAgZWxzZSBpZiAoKGkgJSAzKSA9PSAyKQor
ICAgICAgICBvYmplY3QgPSB7ZzoxLCBmOjJ9OworICAgIGZvbyhvYmplY3QpOworICAgIGlmIChv
YmplY3QuZiAhPSA0MiAqIDEwMCArIChpICUgMykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiArIG9iamVjdC5mOworfQorCit2YXIgciA9IHtn
OjMsIGg6NCwgZjo1fTsKK2ZvbyhyKTsKK2lmIChyLmYgIT0gNSArIDQyICogMTAwKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByLmY7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225071</attachid>
            <date>2014-02-24 09:14:04 -0800</date>
            <delta_ts>2014-02-24 09:23:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>94329</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIFB1
dEJ5SWRTdGF0dXMgaW5mb3JtIHVzIGFib3V0IHBvbHltb3JwaGljIGNhc2VzIGJ5IHJldHVybmlu
ZyBhbiBhcnJheSBvZgorICAgICAgICBQdXRCeUlkVmFyaWFudHMuIFRoZSBERkcgbm93IGhhcyBh
IG5vZGUgY2FsbGVkIE11bHRpUHV0QnlPZmZzZXQgdGhhdCBpbmRpY2F0ZXMgYQorICAgICAgICBz
ZWxlY3Rpb24gb2YgbXVsdGlwbGUgaW5saW5lZCBQdXRCeUlkVmFyaWFudHMuCisgICAgICAgIAor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTXVsdGlHZXRC
eU9mZnNldCwgd2hpY2ggd2UgYWRkZWQgaW4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTY0MjA3LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGRvZXMgc29t
ZSBGVEwgcmVmYWN0b3JpbmcgdG8gbWFrZSBNdWx0aVB1dEJ5T2Zmc2V0IHNoYXJlIGNvZGUgd2l0
aCBzb21lIG5vZGVzCisgICAgICAgIHRoYXQgZ2VuZXJhdGUgc2ltaWxhciBjb2RlLgorICAgICAg
ICAKKyAgICAgICAgMSUgc3BlZWQtdXAgb24gVjh2NyBkdWUgdG8gc3BsYXkgaW1wcm92aW5nIGJ5
IDYuOCUuIFNwbGF5IGRvZXMgdGhlIHRoaW5nIHdoZXJlIGl0CisgICAgICAgIHNvbWV0aW1lcyBz
d2FwcyBmaWVsZCBpbnNlcnRpb24gb3JkZXIsIGNyZWF0aW5nIGZha2UgcG9seW1vcnBoaXNtLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpkdW1wKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6
OlB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjppc1NpbXBsZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om51bVZhcmlhbnRzKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFN0YXR1czo6dmFyaWFudHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVz
OjphdCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpkdW1wKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6Om9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90
eXBlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRm
Zy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrU3Ry
dWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAg
ICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3Jp
dGVzU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlQdXRCeU9mZnNldERhdGE6
OnJlYWxsb2NhdGVzU3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzTXVsdGlQdXRCeU9mZnNldERhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Om11bHRpUHV0QnlPZmZzZXREYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRv
RXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJl
ZHVuZGFudFN0cnVjdHVyZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9p
c3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aVB1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG9hZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZHJlc3NPZlByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmFnZUZvclRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVC
YXJyaWVyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFs
bG9jYXRpb24tY2FzZXMuanM6IEFkZGVkLgorICAgICAgICAoZm9vcyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoYmF6KToKKyAgICAgICAgKC5vKToKKwogMjAxNC0wMi0yMyAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBGZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY0
NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC04Miw2ICs4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCisgICAgYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNl
V2hpdGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCiAgICAgYnl0ZWNv
ZGUvU3BlY2lhbFBvaW50ZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY0NTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw3IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNl
SnVtcFRhcmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UHV0QnlJZFN0YXR1cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFNhbXBsaW5nVG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQdXRLaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxSZWR1Y2VXaGl0ZXNwYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTYW1wbGluZ1Rvb2wuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1
Nyw4IEBACiAJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENB
N0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
QjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkz
QjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEg
LyogSlNDZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xODMyLDYgKzE4MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNC
MzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBK
U0NlbGxJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBA
CiAJCQkJMEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LAogCQkJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAq
LywKIAkJCQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICov
LApAQCAtNTM4Nyw2ICs1MzkzLDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzQsNiArNjE4
MSw3IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkzQjRBOTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzJCMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTY0NTc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NiwxNSArNTgsMTUgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5nZXQoKTsKICAgICBpZiAoIXN0cnVjdHVyZSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52
YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24p
OwogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bj
b2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNv
ZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQog
ICAgIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpOwpAQCAtODEsMTQgKzgzLDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBu
ZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsK
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKAotICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLCBzdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLAogICAgICAgICBjaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKSA6IDAs
CiAgICAgICAgIG9mZnNldCk7CiAjZWxzZQotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTEwMiw3ICsxMDQsNyBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5k
ZXgpCiAgICAgICAgIHx8IGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNv
ZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAs
IDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpOwogICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVp
ZCk7CkBAIC0xMTIsNyArMTE0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQogICAgIFVO
VVNFRF9QQVJBTShtYXApOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24s
IDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKQEAgLTEyMywyNSArMTI1LDIy
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52
YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNz
X3Vuc2V0OgogICAgICAgICAvLyBJZiB0aGUgSklUIHNhdyBpdCBidXQgZGlkbid0IG9wdGltaXpl
IGl0LCB0aGVuIGFzc3VtZSB0aGF0IHRoaXMgdGFrZXMgc2xvdyBwYXRoLgotICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAog
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9CiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnByb2Zp
bGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAgIFNp
bXBsZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2Uu
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAwLCAwLAotICAgICAg
ICAgICAgICAgIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CkBAIC0xNTEs
OCArMTUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdl
dCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWlu
ID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCkBAIC0xNjAsMTMgKzE1OCw1
MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAw
LAogICAgICAgICAgICAgICAgIG9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLT51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAg
IAorICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2Vz
cyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgp
OworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubV92
YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgp
LCB1aWQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNj
ZXNzLm5ld1N0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MuY2hhaW4oKSA/
IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4o
KSkpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
ICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBw
b2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBwcm9iYWJseSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgdGhp
bmdzCi0gICAgICAgIC8vIHdlIGNvdWxkIGRvIGFib3V0IGl0LgotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogfQogI2VuZGlm
CkBAIC0yMjMsNyArMjU5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxpemVkIHNsb3QuCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9m
ZnNldCk7CiAgICAgfQogICAgIAogICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUg
ZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQpA
QCAtMjc2LDcgKzMxMiwyNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmlj
VmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCi0gICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZz
ZXQpOworfQorCit2b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246Cisg
ICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1w
KG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsOCArMjcsNyBAQAogI2RlZmluZSBQdXRCeUlkU3RhdHVzX2gKIAog
I2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHV0QnlJZFZh
cmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEgKzQ0LDI3IEBAIHB1YmxpYzoKICAgICBlbnVt
IFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBh
IGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgY2FzZXMgd2hlcmUgdGhl
IG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhhcyB0aGUgcHJvcGVydHkuCi0gICAgICAgIFNp
bXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgdHJhbnNpdGlvbiBmcm9t
IG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUgcHJvcGVydHkgdG8gb25lIHRoYXQKLSAgICAg
ICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBhbmQgYSBkaXJlY3Qgc3RvcmUgdG8gdGhpcyBu
ZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAgIC8vIEl0J3Mg
Y2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAgU2ltcGxlLAog
ICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICBU
YWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAgICBQdXRCeUlkU3RhdHVzKCkKICAgICAgICAg
OiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAg
ICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkK
LSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICB9CiAgICAgCiAg
ICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKICAgICAgICAgOiBtX3N0YXRl
KHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0dXJlKDApCi0gICAgICAgICwgbV9uZXdTdHJ1
Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKDApCi0gICAgICAgICwgbV9vZmZz
ZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5m
b3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAg
UHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUgc3RhdGUsCi0gICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAg
UGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbiwKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAg
ICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlKQotICAgICAgICAsIG1fbmV3U3RydWN0
dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKHN0cnVjdHVyZUNo
YWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICBQdXRCeUlkU3RhdHVzKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9
PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQoKG1f
c3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0gIW1fbmV3U3RydWN0dXJlKTsKLSAgICAgICAg
QVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgJiYgbV9zdHJ1Y3R1cmVDaGFp
bikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRl
ID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSk7CisgICAg
ICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKQEAgLTEwMSwxNCArNzYsMTUgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9
IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGVSZXBsYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NpbXBs
ZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVRyYW5zaXRpb247
IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7
IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRh
a2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVyZTsgfQotICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5n
ZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTIwLDEwICs5
Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwog
ICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgU3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsK
LSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9pZCBQdXRCeUlkVmFy
aWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8UmVwbGFj
ZTogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLCBv
ZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5z
aXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
cG9pbnRlckR1bXBJbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCisg
ICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChzdHJ1Y3R1cmVDaGFpbigp
LCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQ
dXRCeUlkVmFyaWFudF9oCisjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKKworI2luY2x1ZGUgIklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHV0QnlJZFZhcmlhbnQgeworcHVibGljOgorICAgIGVu
dW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJh
bnNpdGlvbgorICAgIH07CisgICAgCisgICAgUHV0QnlJZFZhcmlhbnQoKQorICAgICAgICA6IG1f
a2luZChOb3RTZXQpCisgICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX25l
d1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAorICAgICAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgICAgIFBhc3NSZWZQdHI8
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0
dXJlOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmVDaGFpbiA9IHN0cnVjdHVyZUNoYWluOwor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAor
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBt
X3N0cnVjdHVyZUNoYWluLmdldCgpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgU3RydWN0dXJlKiBt
X29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOworICAgIFJlZlB0
cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOworICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQ
dXRCeUlkVmFyaWFudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDU3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0MCw3ICsxNjQwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKICAgICAg
ICAgICAgIHNldC5hZGRBbGwobm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7
CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc2V0KTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjQ4LDcgKzE2
NDgsNjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNh
c2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAgICAgCisg
ICAgICAgIAorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBU1NFUlQoISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUg
YWxyZWFkeSBlbnN1cmVkIHRoaXMuCisKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
ICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJl
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pOworICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJl
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhjbG9iYmVyTGltaXQpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250
YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFk
ZEFsbCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAg
ICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1ZSwgc2V0KSBhcyBhIHdheSBvZiBz
ZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtzIGJlY2F1c2UKKyAgICAgICAgLy8g
d2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBiZSBUT1AgYmVmb3JlIHRoaXMuIEZp
bHRlcmluZyB0b3AgaXMgYW5vdGhlciAKKyAgICAgICAgLy8gd2F5IG9mIHNldHRpbmcuCisgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKHZhbHVlID09
IG5vZGUtPmZ1bmN0aW9uKCkpIHsKQEAgLTE2ODUsMTggKzE3MzgsMjAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwot
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAgICAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0g
ICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRy
dWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkg
JiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0
dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0u
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBzdGF0dXNbMF0ubmV3U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgY2xvYmJlckxpbWl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc5LDcgKzE3OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAg
ICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsK
LSAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7Cisg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpOworICAgIHZvaWQgaGFuZGxl
UHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBib29sIGlzRGlyZWN0
KTsKKyAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKFN0cnVjdHVyZSosIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4qKTsKIAogICAgIE5vZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWdu
ZWQgc2tpcENvdW50KTsKICAgICAKQEAgLTE4NDQsMTUgKzE4NDksMTYgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm90b3R5cGVDaGVja3Mo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWlu
KQogewogICAgIE5vZGUqIGJhc2UgPSAwOwotICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5
KHZhcmlhbnQuY2hhaW4oKSk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKTsKKyAgICBtX2dyYXBoLmNo
YWlucygpLmFkZExhemlseShjaGFpbik7CisgICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJl
ID0gc3RydWN0dXJlOwogICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5jaGFpbigpLT5zaXplKCk7ICsraSkgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFpbi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
Y3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAgICAgICBjdXJyZW50U3Ry
dWN0dXJlID0gdmFyaWFudC5jaGFpbigpLT5hdChpKTsKKyAgICAgICAgY3VycmVudFN0cnVjdHVy
ZSA9IGNoYWluLT5hdChpKTsKICAgICAgICAgYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1
cmVDaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlQoYmFzZSk7CkBAIC0xODc4LDEyICsxODg0LDE4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBt
X2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAg
ICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMu
IFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwg
aWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCBy
ZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBh
cmUgbm90IHdhdGNocG9pbnRhYmxlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRl
eCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAg
ICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNoYWluKCkpCi0gICAgICAg
ICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0p
OworICAgICAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcygKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0
cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uY2hhaW4oKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0CkBAIC0xOTA1LDggKzE5MTcsMTAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBpZiAodmFyaWFudC5j
aGFpbigpKQotICAgICAgICBiYXNlID0gZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50KTsKKyAg
ICBpZiAodmFyaWFudC5jaGFpbigpKSB7CisgICAgICAgIGJhc2UgPSBlbWl0UHJvdG90eXBlQ2hl
Y2tzKAorICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1
cmUoKSwgdmFyaWFudC5jaGFpbigpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gVW5sZXNzIHdlIHdh
bnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4
Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5h
bCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKQEAgLTE5Mjgs
NiArMTk0MiwxMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAg
ICAgZGVzdGluYXRpb25PcGVyYW5kLCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKIH0KIAordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5
SWQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFs
dWUsIGJvb2wgaXNEaXJlY3QpCit7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBhZGRUb0dy
YXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUp
OworICAgIGVsc2UKKyAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGJhc2UsIHZhbHVlKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlJZCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwKKyAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlz
RGlyZWN0KQoreworICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAg
IGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3Jj
ZU9TUkV4aXQpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChw
dXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudElu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGVtaXRQcm90b3R5cGVDaGVja3MoCisgICAgICAgICAgICAgICAgICAg
IHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5vbGRTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zm
c2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKKyAg
ICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAg
IGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBhZGRU
b0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eUlkU3RhdHVzWzBdOworICAgIAorICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSkgeworICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
KyAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQor
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgaWYgKHZhcmlhbnQuc3RydWN0
dXJlQ2hhaW4oKSAmJiAhdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkg
eworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNE
aXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZ3JhcGguY2hhaW5z
KCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAg
CisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgaWYgKCFpc0RpcmVj
dCkKKyAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2
YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAg
IAorICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAor
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisKKyAgICBpZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisKKyAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0
aGUgcHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQorICAgICAg
ICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UuCisgICAgICAgIEFTU0VS
VCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOworCisgICAgICAgIGlmICghdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAg
ICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0
YSksCisgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2Up
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKKyAgICB9CisKKyAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisKKyAgICBhZGRUb0dyYXBoKAorICAgICAg
ICBQdXRCeU9mZnNldCwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCkpLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UsCisgICAgICAgIGJhc2UsCisgICAg
ICAgIHZhbHVlKTsKKworICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwor
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgc3Rv
cmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAg
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisK
KyAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cit9CisKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnByZXBhcmVUb1BhcnNlQmxvY2soKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTI1OTAsOTEgKzI3MjEsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2RmZ0NvZGVCbG9jaywKICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZvcywgbV9kZmdTdHViSW5mb3MsCiAgICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdKTsKLSAgICAgICAgICAgIGJvb2wgY2FuQ291bnRBc0lubGluZWQgPSB0cnVl
OwotICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpIHsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICAgICAgY2FuQ291bnRB
c0lubGluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAgICAg
ICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBwdXRCeUlkU3RhdHVz
Lm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKAotICAgICAgICAgICAg
ICAgIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkKLSAgICAgICAgICAgICAgICAm
JiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKQotICAgICAgICAgICAgICAgICAgICB8
fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmlzU3RpbGxWYWxpZCgpKSkgewotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5
KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwdXRC
eUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkt
PnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHV0QnlJZFN0YXR1cy5z
dHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKHByb3RvdHlwZS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0
dXMub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNp
dGlvbkRhdGEgPQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1
cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm5ld1N0cnVj
dHVyZSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICAgICAhPSBwdXRCeUlk
U3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBw
cm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHN0b3JpbmcgaW50byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZS4KLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFu
c2l0aW9uRGF0YSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3Jh
cGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
cHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFz
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAg
ICAgICAgICAgICBQdXRCeU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgPSBwdXRCeUlkU3RhdHVzLm9mZnNldCgpOwotICAgICAgICAgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFj
Y2Vzc0RhdGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZGly
ZWN0KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjYW5Db3VudEFzSW5saW5l
ZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
Y2FuQ291bnRBc0lubGluZWQgJiYgbV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKLQorICAg
ICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgZGlyZWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9p
ZCk7CiAgICAgICAgIH0KIApAQCAtMzI2OSwxMSArMzMxNywxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxIHx8IHN0YXR1c1swXS5raW5k
KCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29w
ZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAg
ICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKQEAg
LTU0NCw2ICs1NDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEg
cHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53
cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgpAQCAtNjE3LDYgKzYyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICAgICAgICAgIGNhc2UgTWFrZVJvcGU6CiAg
ICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGlzIGVpdGhlciBleGl0cywgY2F1c2VzIGEgR0MgKGxhenkgc3RyaW5n
IGFsbG9jYXRpb24pLCBvciBjbG9iYmVycwpAQCAtNjY4LDYgKzY3OSwxNCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtNzA5LDcgKzcyOCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0Ogog
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlh
czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDkgKzQ2OSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAg
ICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVy
TnVtYmVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3Bl
cnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikpOwor
ICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVz
KCkpCisgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpIHsKKyAgICAg
ICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBjbG9iYmVyaXpl
Rm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE3NCw2ICsxNzQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICBFZGdlIGNo
aWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
Y2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9k
ZSwgc3RydWN0dXJlLCB2YXJpYW50LCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEZsdXNoOiB7CkBAIC0yMTUsOSArMjM2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsK
LSAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLApAQCAtMjI1LDk2ICsyNDMsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3Qp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKLSAgICAgICAgICAgICAgICAvLyBhbmQg
bWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBh
bmQgbm90Ci0gICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0YXR1
c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2lu
dCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVl
ZHNDZWxsQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBo
YW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNl
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEg
PSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0
dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShzdGF0dXMuc3RydWN0
dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBFZGdlIHBy
b3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cy5p
c1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgY2hpbGRFZGdlLAotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRp
b24oKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBF
ZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9y
YWdlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBvcmlnaW4sIAotICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwg
RWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
LSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKQEAgLTQ0NSw2ICszODAsMTA3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwog
ICAgIH0KIAorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKwor
ICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKKyAgICAgICAgYm9v
bCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWND
ZWxsOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNl
LCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCisgICAgICAgIC8vIGFuZCBt
YWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFu
ZCBub3QKKyAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAgbV9pbnRlcnBy
ZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisKKyAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2lu
dCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCwgb3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2Up
OworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisKKyAgICAgICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICB0cmFu
c2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExh
emlseSh2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVj
dHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssIHByb3RvdHlwZS5hc0NlbGwoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
RWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlh
bnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwor
ICAgICAgICBlbHNlIGlmICgKKyAgICAgICAgICAgIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKKyAg
ICAgICAgICAgICAgICBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7
CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwK
KyAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCisgICAg
ICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hp
bGRFZGdlKSkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEo
KS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAg
ICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRT
dHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93
bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxv
Y2ssIHB1dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG9yaWdpbiwg
CisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwK
KyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisK
KyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIHN0b3Jh
Z2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAg
ICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsK
KyAgICB9CisKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2lu
IG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogewogICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAogICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwx
MiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4
dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRz
W2ldLCBjb250ZXh0KSk7CisgICAgfQogICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKnRoaXMpID09IG5vZGUtPmhhc0xvY2FsKCp0aGlzKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2NDU3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtODMwLDYgKzgzMCw3IEBAIHB1YmxpYzoKICAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hE
YXRhOwogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0
QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOworICAgIEJhZzxNdWx0aVB1dEJ5
T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFy
aWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2Fs
bEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2NDU3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDMwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAorYm9vbCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGlmICh2YXJpYW50c1tpXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIE11bHRpUHV0QnlPZmZzZXREYXRhOjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAodmFyaWFudHNbaV0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFyaWFudHNbaV0ub2xk
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0KKyAgICAgICAgICAgIHZhcmlhbnRz
W2ldLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIEJyYW5jaFRhcmdldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJHZXRCeUlk
VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgorI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIK
QEAgLTU3LDYgKzU4LDE0IEBAIHN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CiAgICAgVmVj
dG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKIH07CiAKK3N0cnVjdCBNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIAorICAgIGJvb2wgd3JpdGVzU3RydWN0
dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Cit9Owor
CiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC00NjAsNyArNDY5
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQo
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCB8
fCBtX29wID09IE11bHRpUHV0QnlPZmZzZXQpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMyhjaGlsZHJlbi5jaGls
ZDIoKSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7CkBA
IC0xMDkxLDYgKzExMDAsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8TXVsdGlHZXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAg
IAorICAgIGJvb2wgaGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTXVsdGlQdXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTXVsdGlQdXRC
eU9mZnNldERhdGEmIG11bHRpUHV0QnlPZmZzZXREYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRBcnJh
eUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0VHlwZWRBcnJheUJ5dGVP
ZmZzZXQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3BlLCBOb2RlUmVzdWx0
SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIGNhc2Ug
REZHOjpKdW1wOgogICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgY2FzZSBTd2l0Y2g6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVy
OgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2Ug
TXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2NDU3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2ODksNiArNDY4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAgICAgY2FzZSBBcml0aElNdWw6CiAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDA2LDYgKzUwMDYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBD
aGVja0luQm91bmRzOgogICAgIGNhc2UgQXJpdGhJTXVsOgogICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0
OgorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzQ2LDYgKzM0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0
QnlJZDoKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgICAgIC8v
IFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NCw2ICs0NzQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgogICAgICAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZU11
bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKICAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXIoKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTY1Niw4ICsxNjU5LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1f
ZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRp
b24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwogICAgICAgICAKLSAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAorICAgICAgICBtX291dC5z
dG9yZVB0cigKKyAgICAgICAgICAgIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKICAgICB9CiAgICAgCkBAIC0yNzA4
LDEwNSArMjcxMSwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBkYXRh
ID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpOwotICAgICAgICAKICAgICAgICAg
TFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoZGF0YS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkgewotICAgICAgICAgICAgc2V0U3RvcmFnZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCi0gICAgICAg
ICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQ
YXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJh
c2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKLSAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLCBt
X2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
UHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IAotICAgICAgICBzZXRTdG9yYWdlKHJlc3VsdCk7CisgICAgICAgIHNldFN0b3JhZ2UoYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBkYXRhLnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAg
fQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewog
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXMg
PSBkYXRhLnByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3Vz
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAotCi0gICAgICAgIEFT
U0VSVChuZXdTaXplID09IGRhdGEubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICog
c2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9
IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwobV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBt
X2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwotICAgICAgICAgICAgc2V0U3RvcmFn
ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1
ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IAotICAgICAgICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VB
bmRHZXRFbmQobV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSksIHNsb3dQYXRoKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IobV9v
dXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0
b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQo
bmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgIAotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgbmV3QWxsb2NTaXplKTsKLSAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
c3RvcmFnZUxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291
dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotICAgICAgICBMVmFsdWUg
b2xkU3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAtc2l6ZW9mKEpTVmFsdWUp
IC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVy
U2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7Ci0KLSAgICAgICAgZm9yIChw
dHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0
IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKLSAgICAg
ICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVz
LmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAgICAgICAgICAgbV9vdXQu
c3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51
bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAg
bV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UocmVzdWx0KTsg
CisgICAgICAgIHNldFN0b3JhZ2UoCisgICAgICAgICAgICByZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgZGF0YS5wcmV2aW91c1N0
cnVjdHVyZSwgZGF0YS5uZXdTdHJ1Y3R1cmUpKTsKICAgICB9CiAgICAgCi0gICAgCiAgICAgdm9p
ZCBjb21waWxlVG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewpAQCAtMzE0MCwxMiArMzA2MCw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAot
ICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVy
dGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLAotICAgICAgICAgICAgICAgICAgICBsb3dTdG9y
YWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShkYXRhLm9mZnNldCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobG9hZFByb3BlcnR5
KAorICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KCkKQEAgLTMxODksMTEgKzMxMDUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGlmICgh
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZDY0KAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRlbnRpZmllck51bWJlcl0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eUJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZSh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKQEAgLTMyMTMsMTIgKzMxMjUs
NjYgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPQogICAgICAg
ICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgIHN0
b3JlUHJvcGVydHkoCiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpLAot
ICAgICAgICAgICAgbV9vdXQuYWRkcmVzcygKLSAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3Bl
cnRpZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwKLSAgICAgICAgICAgICAgICBsb3dTdG9yYWdl
KG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZlVG9CYXNl
KGRhdGEub2Zmc2V0KSkpOworICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgp
KSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTXVsdGlQdXRC
eU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRz
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJN
dWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGZhaWwiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQ
dXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICBTd2l0Y2hDYXNlKHdlYWtQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpLCBibG9j
a3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3Ry
dWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmUpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICArIDEgPCBkYXRhLnZhcmlhbnRzLnNp
emUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gYmFzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJh
bnNpdGlvbnMuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKSwgbV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlRm9yVHJhbnNp
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgIHdlYWtQb2ludGVyKHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24pOworICAgICAgICB0ZXJt
aW5hdGUoQmFkQ2FjaGUpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCkBAIC0zNzQ4LDYgKzM3MTQsMTM3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CiAgICAgfQog
ICAgIAorICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51
bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVQcm9wZXJ0eSgKKyAg
ICAgICAgTFZhbHVlIHZhbHVlLCBMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zm
c2V0KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzT2ZQcm9wZXJ0eSgK
KyAgICAgICAgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKAor
ICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdl
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVl
IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICBMVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogbmV4dFN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgCisgICAgICAgIGlm
IChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIo
b2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgcmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
b2JqZWN0LCBwcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksCisg
ICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwK
KyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAg
bV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRP
ZlN0b3JhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwgbV9jYWxsRnJhbWUpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0
ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG9i
amVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoCisgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCisgICAgeworICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7
IAorCisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxp
bmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChw
cmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgTFZhbHVl
IG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVl
KSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSAKKyAgICAgICAgICAgIGFsbG9jYXRlQmFzaWNT
dG9yYWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
ZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25z
dEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAgICAgICAKKyAgICAgICAgCisgICAg
ICAgIExWYWx1ZSBzdG9yYWdlTG9jYXRpb24gPSB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG5ld0FsbG9jU2l6ZSk7
CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQu
YW5jaG9yKHN0b3JhZ2VMb2NhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKworICAgICAg
ICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXplb2Yodm9pZCAq
KTsKKyAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihvbGRTaXplKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
b2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQs
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwg
b2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJl
c3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBMVmFs
dWUgZ2V0QnlJZChMVmFsdWUgYmFzZSkKICAgICB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CkBAIC01
MTg1LDcgKzUyODIsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZDgobV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuTWFya2VkQmxvY2tfbWFya0JpdHMsIG1hcmtlZEJsb2NrLCBt
YXJrQnl0ZUluZGV4LCBTY2FsZU9uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkpOwog
ICAgIH0KIAotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSwgTFZhbHVlIHZh
bHVlLCBFZGdlJiB2YWx1ZUVkZ2UpCisgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBi
YXNlLCBMVmFsdWUgdmFsdWUsIEVkZ2UgdmFsdWVFZGdlKQogICAgIHsKICNpZiBFTkFCTEUoR0dD
KQogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0b3JlIGJhcnJpZXIgY29udGludWF0aW9uIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LXJlYWxsb2NhdGlvbi1jYXNl
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211
bHRpLXB1dC1ieS1vZmZzZXQtcmVhbGxvY2F0aW9uLWNhc2VzLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LXJl
YWxsb2NhdGlvbi1jYXNlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAordmFy
IGZvb3MgPSBbCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24o
bykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAg
ZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7
IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBv
LmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0KK107CisKK2lmIChm
b29zLmxlbmd0aCAhPSA4KQorICAgIHRocm93ICJFcnJvciI7CisKK2Z1bmN0aW9uIGJhcihvLCBu
KSB7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmEgPSAxOworICAg
IGlmIChuID09IDEpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5iID0gMjsKKyAgICBpZiAobiA9
PSAyKQorICAgICAgICByZXR1cm47CisgICAgby5uYyA9IDM7CisgICAgaWYgKG4gPT0gMykKKyAg
ICAgICAgcmV0dXJuOworICAgIG8ubmQgPSA0OworICAgIGlmIChuID09IDQpCisgICAgICAgIHJl
dHVybjsKKyAgICBvLm5lID0gNTsKKyAgICBpZiAobiA9PSA1KQorICAgICAgICByZXR1cm47Cisg
ICAgby5uZiA9IDY7CisgICAgaWYgKG4gPT0gNikKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmcg
PSA3OworICAgIGlmIChuID09IDcpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5oID0gODsKK30K
KworZnVuY3Rpb24gYmF6KG8sIG4pIHsKKyAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKG8ubmEgIT0gMSkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsK
KyAgICBpZiAobiA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmIgIT0gMikKKyAg
ICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSAyKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG8ubmMgIT0gMykKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3Jy
dXB0aW9uIjsKKyAgICBpZiAobiA9PSAzKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmQg
IT0gNCkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA0
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmUgIT0gNSkKKyAgICAgICAgdGhyb3cgIk1l
bW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA1KQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG8ubmYgIT0gNikKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBp
ZiAobiA9PSA2KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmcgIT0gNykKKyAgICAgICAg
dGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA3KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG8ubmggIT0gOCkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9u
IjsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCA4OyArK2kpCisgICAgbm9JbmxpbmUoZm9vc1tp
XSk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7
CisgICAgdmFyIG8gPSB7fTsKKyAgICB2YXIgcCA9IHthOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwg
Zjo2fTsKKyAgICBiYXIobywgaSAlIDgpOworICAgIGJhcihwLCBpICUgOCk7CisgICAgCisgICAg
Zm9vc1tpICUgOF0obyk7CisgICAgZm9vc1tpICUgOF0ocCk7CisgICAgCisgICAgaWYgKG8uZmYg
IT0gNDIpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIG86ICIgKyBvLmZmOworICAgIGlm
IChwLmZmICE9IDQyKQorICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBvOiAiICsgcC5mZjsK
KyAgICAKKyAgICBpZiAocC5hICE9IDEgfHwgcC5iICE9IDIgfHwgcC5jICE9IDMgfHwgcC5kICE9
IDQgfHwgcC5lICE9IDUgfHwgcC5mICE9IDYpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVw
dGlvbiIKKyAgICBiYXoobywgaSAlIDgpOworICAgIGJheihwLCBpICUgOCk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225073</attachid>
            <date>2014-02-24 09:23:20 -0800</date>
            <delta_ts>2014-02-24 11:25:43 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97134</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBA
QAorMjAxNC0wMi0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seW1vcnBoaWMgUHV0QnlJZCBpbmxpbmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MjEwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG1ha2VzIFB1
dEJ5SWRTdGF0dXMgaW5mb3JtIHVzIGFib3V0IHBvbHltb3JwaGljIGNhc2VzIGJ5IHJldHVybmlu
ZyBhbiBhcnJheSBvZgorICAgICAgICBQdXRCeUlkVmFyaWFudHMuIFRoZSBERkcgbm93IGhhcyBh
IG5vZGUgY2FsbGVkIE11bHRpUHV0QnlPZmZzZXQgdGhhdCBpbmRpY2F0ZXMgYQorICAgICAgICBz
ZWxlY3Rpb24gb2YgbXVsdGlwbGUgaW5saW5lZCBQdXRCeUlkVmFyaWFudHMuCisgICAgICAgIAor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0IGlzIGFsbW9zdCBpZGVudGljYWwgdG8gTXVsdGlHZXRC
eU9mZnNldCwgd2hpY2ggd2UgYWRkZWQgaW4KKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9y
Zy9jaGFuZ2VzZXQvMTY0MjA3LgorICAgICAgICAKKyAgICAgICAgVGhpcyBhbHNvIGRvZXMgc29t
ZSBGVEwgcmVmYWN0b3JpbmcgdG8gbWFrZSBNdWx0aVB1dEJ5T2Zmc2V0IHNoYXJlIGNvZGUgd2l0
aCBzb21lIG5vZGVzCisgICAgICAgIHRoYXQgZ2VuZXJhdGUgc2ltaWxhciBjb2RlLgorICAgICAg
ICAKKyAgICAgICAgMSUgc3BlZWQtdXAgb24gVjh2NyBkdWUgdG8gc3BsYXkgaW1wcm92aW5nIGJ5
IDYuOCUuIFNwbGF5IGRvZXMgdGhlIHRoaW5nIHdoZXJlIGl0CisgICAgICAgIHNvbWV0aW1lcyBz
d2FwcyBmaWVsZCBpbnNlcnRpb24gb3JkZXIsIGNyZWF0aW5nIGZha2UgcG9seW1vcnBoaXNtLgor
CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5h
bToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0
dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpkdW1wKToKKyAgICAgICAg
KiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6
OlB1dEJ5SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjppc1NpbXBsZSk6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om51bVZhcmlhbnRzKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFN0YXR1czo6dmFyaWFudHMpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVz
OjphdCk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Om9wZXJhdG9yW10pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpkdW1wKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6UHV0QnlJZFZhcmlhbnQpOgorICAgICAgICAo
SlNDOjpQdXRCeUlkVmFyaWFudDo6cmVwbGFjZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJp
YW50Ojp0cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmtpbmQpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpQdXRC
eUlkVmFyaWFudDo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnN0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvbGRTdHJ1Y3R1cmUpOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6bmV3U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFZhcmlhbnQ6OnN0cnVjdHVyZUNoYWluKToKKyAgICAgICAgKEpTQzo6UHV0QnlJ
ZFZhcmlhbnQ6Om9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90
eXBlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0
QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmVtaXRQdXRCeUlkKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRm
Zy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrU3Ry
dWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAg
ICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0UHV0QnlPZmZzZXQpOgorICAgICAgICAqIGRm
Zy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3Jp
dGVzU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6TXVsdGlQdXRCeU9mZnNldERhdGE6
OnJlYWxsb2NhdGVzU3RvcmFnZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzTXVsdGlQdXRCeU9mZnNldERhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Om11bHRpUHV0QnlPZmZzZXREYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRv
RXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJl
ZHVuZGFudFN0cnVjdHVyZUNoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9p
c3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRBcnJheUNoZWNrcyk6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlUHV0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlPZmZzZXQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aVB1dEJ5
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG9hZFByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmVQcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZHJlc3NPZlByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3RvcmFnZUZvclRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjplbWl0U3RvcmVC
YXJyaWVyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1yZWFs
bG9jYXRpb24tY2FzZXMuanM6IEFkZGVkLgorICAgICAgICAoZm9vcyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAoYmF6KToKKyAgICAgICAgKC5vKToKKwogMjAxNC0wMi0yMyAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVwZGF0ZSBGZWF0dXJlRGVmaW5lcy54Y2Nv
bmZpZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTY0
NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC04Miw2ICs4Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0
ZWNvZGUvUHJlY2lzZUp1bXBUYXJnZXRzLmNwcAogICAgIGJ5dGVjb2RlL1Byb2ZpbGVkQ29kZUJs
b2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAogICAgIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwCisgICAgYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCiAgICAgYnl0ZWNvZGUvUmVkdWNl
V2hpdGVzcGFjZS5jcHAKICAgICBieXRlY29kZS9TYW1wbGluZ1Rvb2wuY3BwCiAgICAgYnl0ZWNv
ZGUvU3BlY2lhbFBvaW50ZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOCBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlh
bnQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEtpbmQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1JlZHVjZVdoaXRlc3BhY2UuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVkdWNlV2hpdGVzcGFjZS5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTY0NTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzM3LDYgKzMzNyw3IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNl
SnVtcFRhcmdldHMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
UHV0QnlJZFN0YXR1cy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQdXRCeUlkVmFyaWFudC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFNhbXBsaW5nVG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiIC8+CkBAIC04NTgsNiArODU5LDcgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQcmVjaXNlSnVtcFRhcmdldHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQdXRLaW5kLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxSZWR1Y2VXaGl0ZXNwYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxTYW1wbGluZ1Rvb2wuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzU3LDYgKzM1
Nyw4IEBACiAJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjk5MTRD
QTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyQTQxNENB
N0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVG
M0M2IC8qIFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
QjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OworCQkwRjkz
QjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAv
KiBQdXRCeUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
OTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZGNkEg
LyogSlNDZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0xODMyLDYgKzE4MzQsOCBAQAogCQkwRjkzMzI5OTE0Q0E3REMxMDA4NUYz
QzYgLyogUHV0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQdXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
MzMyOUExNENBN0RDMTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHV0QnlJZFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjkzMzI5QjE0Q0E3REMxMDA4NUYzQzYgLyogU3RydWN0dXJlU2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjkzQjRBNzE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHV0QnlJZFZhcmlh
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjkzQjRBODE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHV0QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNC
MzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBK
U0NlbGxJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1ODUsNiArNDU4OSw4IEBA
CiAJCQkJMEZDOTdGMzIxODIwMjBENzAwMkM5QjI2IC8qIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlz
b25pbmdXYXRjaHBvaW50LmggKi8sCiAJCQkJMEY5MzMyOTkxNENBN0RDMTAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwICovLAogCQkJCTBGOTMzMjlBMTRDQTdEQzEwMDg1RjNDNiAvKiBQdXRC
eUlkU3RhdHVzLmggKi8sCisJCQkJMEY5M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCAqLywKKwkJCQkwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuaCAqLywKIAkJCQkwRjlGQzhDMTE0RTFCNUZCMDBENTJBRTAgLyogUHV0S2luZC5oICov
LAogCQkJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAq
LywKIAkJCQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICov
LApAQCAtNTM4Nyw2ICs1MzkzLDcgQEAKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyog
TWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8q
IE1hcERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjkyMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzQsNiArNjE4
MSw3IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjkzQjRBOTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEzMjkxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzJCMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTY0NTc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogI2luY2x1ZGUgIkxMSW50RGF0YS5oIgog
I2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NiwxNSArNTgsMTUgQEAgUHV0QnlJZFN0YXR1
cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBpbnN0cnVjdGlvbls0XS51LnN0cnVjdHVyZS5nZXQoKTsKICAgICBpZiAoIXN0cnVjdHVyZSkK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52
YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24p
OwogICAgIAogICAgIGlmIChpbnN0cnVjdGlvblswXS51Lm9wY29kZSA9PSBMTEludDo6Z2V0T3Bj
b2RlKGxsaW50X29wX3B1dF9ieV9pZCkKICAgICAgICAgfHwgaW5zdHJ1Y3Rpb25bMF0udS5vcGNv
ZGUgPT0gTExJbnQ6OmdldE9wY29kZShsbGludF9vcF9wdXRfYnlfaWRfb3V0X29mX2xpbmUpKSB7
CiAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbik7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCk7CiAgICAgfQog
ICAgIAogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpOwpAQCAtODEsMTQgKzgzLDE0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZyb20KICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBu
ZXdTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkKTsK
ICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuIFB1dEJ5SWRT
dGF0dXMoTm9JbmZvcm1hdGlvbiwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAgICAgIHJl
dHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOwogICAgIAotICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKAotICAgICAgICBTaW1wbGVUcmFuc2l0aW9uLCBzdHJ1Y3R1cmUsIG5ld1N0cnVj
dHVyZSwKKyAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCisgICAgICAgIHN0
cnVjdHVyZSwgbmV3U3RydWN0dXJlLAogICAgICAgICBjaGFpbiA/IGFkb3B0UmVmKG5ldyBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgY2hhaW4pKSA6IDAs
CiAgICAgICAgIG9mZnNldCk7CiAjZWxzZQotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24sIDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTEwMiw3ICsxMDQsNyBAQCBQdXRC
eUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgaWYgKHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5k
ZXgpCiAgICAgICAgIHx8IGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNv
ZGVJbmRleCkpCi0gICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIDAs
IDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtYXAu
Z2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpOwogICAgIFB1dEJ5SWRTdGF0dXMgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgc3R1YkluZm8sIHVp
ZCk7CkBAIC0xMTIsNyArMTE0LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAogICAgIHJldHVybiByZXN1bHQ7CiAjZWxzZSAvLyBFTkFCTEUoSklUKQogICAgIFVO
VVNFRF9QQVJBTShtYXApOwotICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24s
IDAsIDAsIDAsIGludmFsaWRPZmZzZXQpOworICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5m
b3JtYXRpb24pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKQEAgLTEyMywyNSArMTI1LDIy
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoKTsKICAgICAKICAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykK
LSAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52
YWxpZE9mZnNldCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OwogCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNz
X3Vuc2V0OgogICAgICAgICAvLyBJZiB0aGUgSklUIHNhdyBpdCBidXQgZGlkbid0IG9wdGltaXpl
IGl0LCB0aGVuIGFzc3VtZSB0aGF0IHRoaXMgdGFrZXMgc2xvdyBwYXRoLgotICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAog
ICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CiAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9CiAgICAgICAgICAgICBzdHViSW5mby0+dS5wdXRCeUlkUmVwbGFjZS5iYXNl
T2JqZWN0U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnByb2Zp
bGVkQmxvY2stPnZtKCksIHVpZCk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
IHsKLSAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAgIFNp
bXBsZVJlcGxhY2UsCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2Uu
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAwLCAwLAotICAgICAg
ICAgICAgICAgIG9mZnNldCk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnJl
cGxhY2UoCisgICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFJlcGxhY2UuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSwgb2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CkBAIC0xNTEs
OCArMTUwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAg
ICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLT5nZXRDb25j
dXJyZW50bHkoCiAgICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKAotICAgICAgICAgICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpb24oCiAgICAgICAgICAgICAgICAg
c3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24ucHJldmlvdXNTdHJ1Y3R1cmUuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdl
dCgpLAogICAgICAgICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWlu
ID8gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCkBAIC0xNjAsMTMgKzE1OCw1
MSBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLT51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgpKSkgOiAw
LAogICAgICAgICAgICAgICAgIG9mZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB1
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgMCwgMCwgMCwgaW52YWxpZE9mZnNldCk7CisgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdCA9IHN0dWJJbmZvLT51LnB1dEJ5SWRMaXN0Lmxpc3Q7CisgICAgICAg
IAorICAgICAgICBQdXRCeUlkU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc3RhdGUg
PSBTaW1wbGU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRBY2Nlc3MmIGFjY2Vz
cyA9IGxpc3QtPmF0KGkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFjY2Vz
cy50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6UmVwbGFjZTogewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNjZXNzLnN0cnVjdHVyZSgp
OworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQpOworICAgICAgICAgICAgICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubV92
YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlJZEFjY2Vzczo6VHJhbnNpdGlvbjogeworICAgICAg
ICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAgICAgICAgICAgIGFj
Y2Vzcy5uZXdTdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KCpwcm9maWxlZEJsb2NrLT52bSgp
LCB1aWQpOworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQubV92YXJpYW50cy5hcHBlbmQoUHV0QnlJZFZhcmlhbnQ6OnRy
YW5zaXRpb24oCisgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy5vbGRTdHJ1Y3R1cmUoKSwgYWNj
ZXNzLm5ld1N0cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBhY2Nlc3MuY2hhaW4oKSA/
IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvZmlsZWRCbG9jaywgYWNjZXNzLm9sZFN0cnVjdHVyZSgpLCBhY2Nlc3MuY2hhaW4o
KSkpIDogMCwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
ICAgICAKICAgICBkZWZhdWx0OgotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhbmRsZSBw
b2x5bW9ycGhpYyBQdXRCeUlkLiBXZSBwcm9iYWJseSBoYXZlIHNvbWUgaW50ZXJlc3RpbmcgdGhp
bmdzCi0gICAgICAgIC8vIHdlIGNvdWxkIGRvIGFib3V0IGl0LgotICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCAwLCAwLCAwLCBpbnZhbGlkT2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgfQogfQogI2VuZGlm
CkBAIC0yMjMsNyArMjU5LDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxpemVkIHNsb3QuCiAgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhTaW1wbGVSZXBsYWNlLCBzdHJ1Y3R1cmUsIDAsIDAsIG9mZnNl
dCk7CisgICAgICAgIHJldHVybiBQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9m
ZnNldCk7CiAgICAgfQogICAgIAogICAgIC8vIE91ciBoeXBvdGhlc2lzIGlzIHRoYXQgd2UncmUg
ZG9pbmcgYSB0cmFuc2l0aW9uLiBCZWZvcmUgd2UgcHJvdmUgdGhhdCB0aGlzIGlzIHJlYWxseQpA
QCAtMjc2LDcgKzMxMiwyNiBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmlj
VmFsdWUoKSk7CiAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCi0gICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoU2ltcGxlVHJhbnNpdGlvbiwgc3RydWN0dXJlLCB0cmFuc2l0
aW9uLCBjaGFpbi5yZWxlYXNlKCksIG9mZnNldCk7CisgICAgcmV0dXJuIFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW9uKHN0cnVjdHVyZSwgdHJhbnNpdGlvbiwgY2hhaW4ucmVsZWFzZSgpLCBvZmZz
ZXQpOworfQorCit2b2lkIFB1dEJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246Cisg
ICAgICAgIG91dC5wcmludCgiKE5vSW5mb3JtYXRpb24pIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgY2FzZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiKCIsIGxpc3REdW1w
KG1fdmFyaWFudHMpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCIoVGFrZXNTbG93UGF0aCkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsOCArMjcsNyBAQAogI2RlZmluZSBQdXRCeUlkU3RhdHVzX2gKIAog
I2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCi0jaW5jbHVkZSAiSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5oIgotI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiUHV0QnlJZFZh
cmlhbnQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNDUsNTEgKzQ0LDI3IEBAIHB1YmxpYzoKICAgICBlbnVt
IFN0YXRlIHsKICAgICAgICAgLy8gSXQncyB1bmNhY2hlZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uLgogICAgICAgICBOb0luZm9ybWF0aW9uLAotICAgICAgICAvLyBJdCdzIGNhY2hlZCBhcyBh
IGRpcmVjdCBzdG9yZSBpbnRvIGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgY2FzZXMgd2hlcmUgdGhl
IG9iamVjdAotICAgICAgICAvLyBhbHJlYWR5IGhhcyB0aGUgcHJvcGVydHkuCi0gICAgICAgIFNp
bXBsZVJlcGxhY2UsCi0gICAgICAgIC8vIEl0J3MgY2FjaGVkIGFzIGEgdHJhbnNpdGlvbiBmcm9t
IG9uZSBzdHJ1Y3R1cmUgdGhhdCBsYWNrcyB0aGUgcHJvcGVydHkgdG8gb25lIHRoYXQKLSAgICAg
ICAgLy8gaW5jbHVkZXMgdGhlIHByb3BlcnR5LCBhbmQgYSBkaXJlY3Qgc3RvcmUgdG8gdGhpcyBu
ZXcgcHJvcGVydHkuCi0gICAgICAgIFNpbXBsZVRyYW5zaXRpb24sCisgICAgICAgIC8vIEl0J3Mg
Y2FjaGVkIGFzIGEgc2ltcGxlIHN0b3JlIG9mIHNvbWUga2luZC4KKyAgICAgICAgU2ltcGxlLAog
ICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICBU
YWtlc1Nsb3dQYXRoCiAgICAgfTsKICAgICAKICAgICBQdXRCeUlkU3RhdHVzKCkKICAgICAgICAg
OiBtX3N0YXRlKE5vSW5mb3JtYXRpb24pCi0gICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKLSAg
ICAgICAgLCBtX25ld1N0cnVjdHVyZSgwKQotICAgICAgICAsIG1fc3RydWN0dXJlQ2hhaW4oMCkK
LSAgICAgICAgLCBtX29mZnNldChpbnZhbGlkT2Zmc2V0KQogICAgIHsKICAgICB9CiAgICAgCiAg
ICAgZXhwbGljaXQgUHV0QnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSkKICAgICAgICAgOiBtX3N0YXRl
KHN0YXRlKQotICAgICAgICAsIG1fb2xkU3RydWN0dXJlKDApCi0gICAgICAgICwgbV9uZXdTdHJ1
Y3R1cmUoMCkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKDApCi0gICAgICAgICwgbV9vZmZz
ZXQoaW52YWxpZE9mZnNldCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IE5vSW5m
b3JtYXRpb24gfHwgbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCi0gICAg
UHV0QnlJZFN0YXR1cygKLSAgICAgICAgU3RhdGUgc3RhdGUsCi0gICAgICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlLAotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSwKLSAgICAgICAg
UGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbiwKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAg
ICAgICwgbV9vbGRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlKQotICAgICAgICAsIG1fbmV3U3RydWN0
dXJlKG5ld1N0cnVjdHVyZSkKLSAgICAgICAgLCBtX3N0cnVjdHVyZUNoYWluKHN0cnVjdHVyZUNo
YWluKQotICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICBQdXRCeUlkU3RhdHVzKGNvbnN0
IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50KQorICAgICAgICA6IG1fc3RhdGUoU2ltcGxlKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKChtX3N0YXRlID09IE5vSW5mb3JtYXRpb24gfHwgbV9zdGF0ZSA9
PSBUYWtlc1Nsb3dQYXRoKSA9PSAhbV9vbGRTdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlQoKG1f
c3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgPT0gIW1fbmV3U3RydWN0dXJlKTsKLSAgICAgICAg
QVNTRVJUKCEoKG1fc3RhdGUgIT0gU2ltcGxlVHJhbnNpdGlvbikgJiYgbV9zdHJ1Y3R1cmVDaGFp
bikpOwotICAgICAgICBBU1NFUlQoKG1fc3RhdGUgPT0gTm9JbmZvcm1hdGlvbiB8fCBtX3N0YXRl
ID09IFRha2VzU2xvd1BhdGgpID09IChtX29mZnNldCA9PSBpbnZhbGlkT2Zmc2V0KSk7CisgICAg
ICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKQEAgLTEwMSwxNCArNzYsMTUgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9
IE5vSW5mb3JtYXRpb247IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUgPT0gTm9JbmZvcm1hdGlvbjsgfQotICAgIGJvb2wgaXNTaW1wbGVSZXBsYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGVSZXBsYWNlOyB9Ci0gICAgYm9vbCBpc1NpbXBs
ZVRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZVRyYW5zaXRpb247
IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7
IH0KICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRh
a2VzU2xvd1BhdGg7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb2xkU3RydWN0dXJlOyB9Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX25ld1N0cnVjdHVyZTsgfQotICAgIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVDaGFpbi5n
ZXQoKTsgfQotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0OyB9CisgICAgc2l6ZV90IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50
cy5zaXplKCk7IH0KKyAgICBjb25zdCBWZWN0b3I8UHV0QnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBQdXRCeUlkVmFyaWFu
dCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgCiBwcml2YXRlOgogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtMTIwLDEwICs5
Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZyb21MTElu
dChDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpOwog
ICAgIAogICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgU3RydWN0dXJlKiBtX29sZFN0cnVjdHVyZTsK
LSAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwotICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOwotICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OworICAgIFZlY3RvcjxQdXRCeUlkVmFyaWFudCwgMT4gbV92YXJpYW50czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9pZCBQdXRCeUlkVmFy
aWFudDo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBjYXNlIFJlcGxhY2U6CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8UmVwbGFj
ZTogIiwgcG9pbnRlckR1bXBJbkNvbnRleHQoc3RydWN0dXJlKCksIGNvbnRleHQpLCAiLCAiLCBv
ZmZzZXQoKSwgIj4iKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIFRyYW5z
aXRpb246CisgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAgICI8VHJhbnNpdGlvbjogIiwg
cG9pbnRlckR1bXBJbkNvbnRleHQob2xkU3RydWN0dXJlKCksIGNvbnRleHQpLCAiIC0+ICIsCisg
ICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChuZXdTdHJ1Y3R1cmUoKSwgY29udGV4dCks
ICIsICIsCisgICAgICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChzdHJ1Y3R1cmVDaGFpbigp
LCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCksICI+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBQ
dXRCeUlkVmFyaWFudF9oCisjZGVmaW5lIFB1dEJ5SWRWYXJpYW50X2gKKworI2luY2x1ZGUgIklu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUHV0QnlJZFZhcmlhbnQgeworcHVibGljOgorICAgIGVu
dW0gS2luZCB7CisgICAgICAgIE5vdFNldCwKKyAgICAgICAgUmVwbGFjZSwKKyAgICAgICAgVHJh
bnNpdGlvbgorICAgIH07CisgICAgCisgICAgUHV0QnlJZFZhcmlhbnQoKQorICAgICAgICA6IG1f
a2luZChOb3RTZXQpCisgICAgICAgICwgbV9vbGRTdHJ1Y3R1cmUoMCkKKyAgICAgICAgLCBtX25l
d1N0cnVjdHVyZSgwKQorICAgICAgICAsIG1fb2Zmc2V0KGludmFsaWRPZmZzZXQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgcmVwbGFjZShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVwbGFjZTsKKyAgICAg
ICAgcmVzdWx0Lm1fb2xkU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBQdXRCeUlkVmFyaWFudCB0cmFuc2l0aW9uKAorICAgICAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSwgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUsCisgICAgICAgIFBhc3NSZWZQdHI8
SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKKyAgICB7CisgICAgICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFRyYW5zaXRpb247CisgICAgICAgIHJlc3VsdC5tX29sZFN0cnVjdHVyZSA9
IG9sZFN0cnVjdHVyZTsKKyAgICAgICAgcmVzdWx0Lm1fbmV3U3RydWN0dXJlID0gbmV3U3RydWN0
dXJlOworICAgICAgICByZXN1bHQubV9zdHJ1Y3R1cmVDaGFpbiA9IHN0cnVjdHVyZUNoYWluOwor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
ICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gTm90U2V0OyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVwbGFjZSk7CisgICAgICAgIHJldHVybiBtX29sZFN0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBUcmFuc2l0aW9uIHx8IGtpbmQoKSA9PSBSZXBsYWNlKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2xkU3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRy
YW5zaXRpb24pOworICAgICAgICByZXR1cm4gbV9uZXdTdHJ1Y3R1cmU7CisgICAgfQorICAgIAor
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVHJhbnNpdGlvbik7CisgICAgICAgIHJldHVybiBt
X3N0cnVjdHVyZUNoYWluLmdldCgpOworICAgIH0KKyAgICAKKyAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgU3RydWN0dXJlKiBt
X29sZFN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOworICAgIFJlZlB0
cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBtX3N0cnVjdHVyZUNoYWluOworICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBQ
dXRCeUlkVmFyaWFudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2NDU3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0MCw3ICsxNjQwLDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKICAgICAg
ICAgICAgIHNldC5hZGRBbGwobm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7
CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc2V0KTsKICAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjQ4LDcgKzE2
NDgsNjAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNh
c2UgUHV0QnlPZmZzZXQ6IHsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAgICAgCisg
ICAgICAgIAorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDogeworICAgICAgICBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBU1NFUlQoISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUg
YWxyZWFkeSBlbnN1cmVkIHRoaXMuCisKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBib29sIGRvbmUg
PSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgp
ICE9IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJp
YW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEo
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJl
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pOworICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJl
cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhjbG9iYmVyTGltaXQpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250
YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFk
ZEFsbCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlk
VmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAg
ICAgICAgbmV3U2V0LmFkZEFsbCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1ZSwgc2V0KSBhcyBhIHdheSBvZiBz
ZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtzIGJlY2F1c2UKKyAgICAgICAgLy8g
d2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBiZSBUT1AgYmVmb3JlIHRoaXMuIEZp
bHRlcmluZyB0b3AgaXMgYW5vdGhlciAKKyAgICAgICAgLy8gd2F5IG9mIHNldHRpbmcuCisgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKHZhbHVlID09
IG5vZGUtPmZ1bmN0aW9uKCkpIHsKQEAgLTE2ODUsMTggKzE3MzgsMjAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSwKICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QpOwot
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgewotICAgICAgICAgICAg
ICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUu
c2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0g
ICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzLm5ld1N0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRy
dWUpOwotICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkg
JiYgc3RhdHVzLm51bVZhcmlhbnRzKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChzdGF0
dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0u
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAgICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBzdGF0dXNbMF0ubmV3U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRy
dWUpOworICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYywgY2xvYmJlckxpbWl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTc5LDcgKzE3OSwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlR2V0QnlJZCgKICAgICAg
ICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0IEdldEJ5SWRTdGF0dXMmKTsK
LSAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7Cisg
ICAgdm9pZCBlbWl0UHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgTm9kZSogdmFsdWUsIGJvb2wgaXNEaXJlY3QpOworICAgIHZvaWQgaGFuZGxl
UHV0QnlJZCgKKyAgICAgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
Tm9kZSogdmFsdWUsIGNvbnN0IFB1dEJ5SWRTdGF0dXMmLAorICAgICAgICBib29sIGlzRGlyZWN0
KTsKKyAgICBOb2RlKiBlbWl0UHJvdG90eXBlQ2hlY2tzKFN0cnVjdHVyZSosIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4qKTsKIAogICAgIE5vZGUqIGdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWdu
ZWQgc2tpcENvdW50KTsKICAgICAKQEAgLTE4NDQsMTUgKzE4NDksMTYgQEAgTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5T2Zmc2V0KAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjplbWl0UHJvdG90eXBlQ2hlY2tzKGNvbnN0IEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmVtaXRQcm90b3R5cGVDaGVja3Mo
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWlu
KQogewogICAgIE5vZGUqIGJhc2UgPSAwOwotICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5
KHZhcmlhbnQuY2hhaW4oKSk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gdmFy
aWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1cmUoKTsKKyAgICBtX2dyYXBoLmNo
YWlucygpLmFkZExhemlseShjaGFpbik7CisgICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJl
ID0gc3RydWN0dXJlOwogICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdmFyaWFudC5jaGFpbigpLT5zaXplKCk7ICsraSkgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFpbi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAg
Y3VycmVudE9iamVjdCA9IGFzT2JqZWN0KGN1cnJlbnRTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxv
b2t1cChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaykpOwotICAgICAgICBjdXJyZW50U3Ry
dWN0dXJlID0gdmFyaWFudC5jaGFpbigpLT5hdChpKTsKKyAgICAgICAgY3VycmVudFN0cnVjdHVy
ZSA9IGNoYWluLT5hdChpKTsKICAgICAgICAgYmFzZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1
cmVDaGVjayhjdXJyZW50T2JqZWN0LCBjdXJyZW50U3RydWN0dXJlKTsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlQoYmFzZSk7CkBAIC0xODc4LDEyICsxODg0LDE4IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAgICAgICAgICBt
X2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRHZXRCeUlkKCk7CisgICAgCiAgICAg
ICAgIC8vIDEpIEVtaXQgcHJvdG90eXBlIHN0cnVjdHVyZSBjaGVja3MgZm9yIGFsbCBjaGFpbnMu
IFRoaXMgY291bGQgc29ydCBvZiBtYXliZSBub3QgYmUKICAgICAgICAgLy8gICAgb3B0aW1hbCwg
aWYgdGhlcmUgaXMgc29tZSByYXJlbHkgZXhlY3V0ZWQgY2FzZSBpbiB0aGUgY2hhaW4gdGhhdCBy
ZXF1aXJlcyBhIGxvdAogICAgICAgICAvLyAgICBvZiBjaGVja3MgYW5kIHRob3NlIGNoZWNrcyBh
cmUgbm90IHdhdGNocG9pbnRhYmxlLgogICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRl
eCA9IGdldEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudEluZGV4LS07KSB7Ci0gICAg
ICAgICAgICBpZiAoZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLmNoYWluKCkpCi0gICAgICAg
ICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyhnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRleF0p
OworICAgICAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5jaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcygKKyAgICAgICAgICAgICAgICAg
ICAgZ2V0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZVNldCgpLnNpbmdsZXRvblN0
cnVjdHVyZSgpLAorICAgICAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzW3ZhcmlhbnRJbmRl
eF0uY2hhaW4oKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IC8vIDIpIEVtaXQgYSBNdWx0aUdldEJ5T2Zmc2V0CkBAIC0xOTA1LDggKzE5MTcsMTAgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAgICAgICAgICAgICAKICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKLSAgICBpZiAodmFyaWFudC5j
aGFpbigpKQotICAgICAgICBiYXNlID0gZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50KTsKKyAg
ICBpZiAodmFyaWFudC5jaGFpbigpKSB7CisgICAgICAgIGJhc2UgPSBlbWl0UHJvdG90eXBlQ2hl
Y2tzKAorICAgICAgICAgICAgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5zaW5nbGV0b25TdHJ1Y3R1
cmUoKSwgdmFyaWFudC5jaGFpbigpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gVW5sZXNzIHdlIHdh
bnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4
Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5h
bCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKQEAgLTE5Mjgs
NiArMTk0MiwxMjMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAg
ICAgZGVzdGluYXRpb25PcGVyYW5kLCBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVy
LCB2YXJpYW50Lm9mZnNldCgpKTsKIH0KIAordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdFB1dEJ5
SWQoCisgICAgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZSogdmFs
dWUsIGJvb2wgaXNEaXJlY3QpCit7CisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBhZGRUb0dy
YXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUp
OworICAgIGVsc2UKKyAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGJhc2UsIHZhbHVlKTsKK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
UHV0QnlJZCgKKyAgICBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2Rl
KiB2YWx1ZSwKKyAgICBjb25zdCBQdXRCeUlkU3RhdHVzJiBwdXRCeUlkU3RhdHVzLCBib29sIGlz
RGlyZWN0KQoreworICAgIGlmICghcHV0QnlJZFN0YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAg
IGlmICghcHV0QnlJZFN0YXR1cy5pc1NldCgpKQorICAgICAgICAgICAgYWRkVG9HcmFwaChGb3Jj
ZU9TUkV4aXQpOworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YWx1ZSwgaXNEaXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChw
dXRCeUlkU3RhdHVzLm51bVZhcmlhbnRzKCkgPiAxKSB7CisgICAgICAgIGlmICghaXNGVEwobV9n
cmFwaC5tX3BsYW4ubW9kZSkpIHsKKyAgICAgICAgICAgIGVtaXRQdXRCeUlkKGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIHZhbHVlLCBpc0RpcmVjdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCisgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWlzRGlyZWN0KSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHZhcmlhbnRJbmRleCA9IHB1dEJ5SWRTdGF0dXMubnVtVmFyaWFudHMoKTsgdmFyaWFudElu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4
XS5raW5kKCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghcHV0QnlJZFN0YXR1c1t2YXJpYW50
SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGVtaXRQcm90b3R5cGVDaGVja3MoCisgICAgICAgICAgICAgICAgICAg
IHB1dEJ5SWRTdGF0dXNbdmFyaWFudEluZGV4XS5vbGRTdHJ1Y3R1cmUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgcHV0QnlJZFN0YXR1c1t2YXJpYW50SW5kZXhdLnN0cnVjdHVyZUNoYWluKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zm
c2V0RGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YS5hZGQoKTsKKyAg
ICAgICAgZGF0YS0+dmFyaWFudHMgPSBwdXRCeUlkU3RhdHVzLnZhcmlhbnRzKCk7CisgICAgICAg
IGRhdGEtPmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICBhZGRU
b0dyYXBoKE11bHRpUHV0QnlPZmZzZXQsIE9wSW5mbyhkYXRhKSwgYmFzZSwgdmFsdWUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChwdXRCeUlkU3RhdHVzLm51bVZh
cmlhbnRzKCkgPT0gMSk7CisgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBwdXRC
eUlkU3RhdHVzWzBdOworICAgIAorICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6UmVwbGFjZSkgeworICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1cmUoKSkpLCBiYXNlKTsK
KyAgICAgICAgaGFuZGxlUHV0QnlPZmZzZXQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwgdmFsdWUpOworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQor
ICAgICAgICAgICAgbV9ncmFwaC5jb21waWxhdGlvbigpLT5ub3RpY2VJbmxpbmVkUHV0QnlJZCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVCh2YXJpYW50LmtpbmQo
KSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7CisgICAgaWYgKHZhcmlhbnQuc3RydWN0
dXJlQ2hhaW4oKSAmJiAhdmFyaWFudC5zdHJ1Y3R1cmVDaGFpbigpLT5pc1N0aWxsVmFsaWQoKSkg
eworICAgICAgICBlbWl0UHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgaXNE
aXJlY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fZ3JhcGguY2hhaW5z
KCkuYWRkTGF6aWx5KHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKSk7CisgICAgICAgICAgICAgICAg
CisgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgaWYgKCFpc0RpcmVj
dCkKKyAgICAgICAgZW1pdFByb3RvdHlwZUNoZWNrcyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2
YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0
dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAg
IAorICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAor
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisKKyAgICBpZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQorICAgICAgICAhPSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisKKyAgICAgICAgLy8gSWYgd2UncmUgZ3Jvd2luZyB0
aGUgcHJvcGVydHkgc3RvcmFnZSB0aGVuIGl0IG11c3QgYmUgYmVjYXVzZSB3ZSdyZQorICAgICAg
ICAvLyBzdG9yaW5nIGludG8gdGhlIG91dC1vZi1saW5lIHN0b3JhZ2UuCisgICAgICAgIEFTU0VS
VCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOworCisgICAgICAgIGlmICghdmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAorICAgICAg
ICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0
YSksCisgICAgICAgICAgICAgICAgYmFzZSwgYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2Up
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSkKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0
QnV0dGVyZmx5LCBiYXNlKTsKKyAgICB9CisKKyAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisKKyAgICBhZGRUb0dyYXBoKAorICAgICAg
ICBQdXRCeU9mZnNldCwKKyAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCkpLAorICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UsCisgICAgICAgIGJhc2UsCisgICAg
ICAgIHZhbHVlKTsKKworICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwor
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgc3Rv
cmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAg
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisK
KyAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQorICAgICAgICBtX2dyYXBoLmNvbXBpbGF0
aW9uKCktPm5vdGljZUlubGluZWRQdXRCeUlkKCk7Cit9CisKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnByZXBhcmVUb1BhcnNlQmxvY2soKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NvbnN0YW50cy5zaXplKCk7ICsraSkKQEAgLTI1OTAsOTEgKzI3MjEsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2RmZ0NvZGVCbG9jaywKICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZvcywgbV9kZmdTdHViSW5mb3MsCiAgICAgICAg
ICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50
aWZpZXJOdW1iZXJdKTsKLSAgICAgICAgICAgIGJvb2wgY2FuQ291bnRBc0lubGluZWQgPSB0cnVl
OwotICAgICAgICAgICAgaWYgKCFwdXRCeUlkU3RhdHVzLmlzU2V0KCkpIHsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICAgICAgY2FuQ291bnRB
c0lubGluZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkpIHsKLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKLSAgICAgICAgICAgICAg
ICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBwdXRCeUlkU3RhdHVz
Lm9mZnNldCgpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKAotICAgICAgICAgICAg
ICAgIHB1dEJ5SWRTdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkKLSAgICAgICAgICAgICAgICAm
JiAoIXB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKQotICAgICAgICAgICAgICAgICAgICB8
fCBwdXRCeUlkU3RhdHVzLnN0cnVjdHVyZUNoYWluKCktPmlzU3RpbGxWYWxpZCgpKSkgewotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hhaW5zKCkuYWRkTGF6aWx5
KHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkpKSwgYmFzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwdXRC
eUlkU3RhdHVzLm9sZFN0cnVjdHVyZSgpLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCkt
PnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHB1dEJ5SWRTdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJvdG90eXBlID0gcHV0QnlJZFN0YXR1cy5z
dHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKHByb3RvdHlwZS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHB1dEJ5SWRTdGF0
dXMub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNp
dGlvbkRhdGEgPQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1
cmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRCeUlkU3RhdHVzLm5ld1N0cnVj
dHVyZSgpKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocHV0QnlJZFN0YXR1cy5vbGRTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICAgICAhPSBwdXRCeUlk
U3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBncm93aW5nIHRoZSBw
cm9wZXJ0eSBzdG9yYWdlIHRoZW4gaXQgbXVzdCBiZSBiZWNhdXNlIHdlJ3JlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHN0b3JpbmcgaW50byB0aGUgb3V0LW9mLWxpbmUgc3RvcmFnZS4KLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChwdXRCeUlkU3RhdHVzLm9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXB1
dEJ5SWRTdGF0dXMub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFu
c2l0aW9uRGF0YSksIGJhc2UpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3Jh
cGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
cHV0QnlJZFN0YXR1cy5vZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFz
ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAg
ICAgICAgICAgICBQdXRCeU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLAotICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsCi0gICAgICAgICAgICAgICAg
ICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNj
ZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgPSBwdXRCeUlkU3RhdHVzLm9mZnNldCgpOwotICAgICAgICAgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFj
Y2Vzc0RhdGEpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoZGly
ZWN0KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmll
ck51bWJlciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjYW5Db3VudEFzSW5saW5l
ZCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
Y2FuQ291bnRBc0lubGluZWQgJiYgbV9ncmFwaC5jb21waWxhdGlvbigpKQotICAgICAgICAgICAg
ICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZFB1dEJ5SWQoKTsKLQorICAg
ICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgZGlyZWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV9p
ZCk7CiAgICAgICAgIH0KIApAQCAtMzI2OSwxMSArMzMxNywxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
OgogICAgICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoKm1fdm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCB1aWQsIGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXMubnVtVmFyaWFudHMoKSAhPSAxIHx8IHN0YXR1c1swXS5raW5k
KCkgIT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGdldChWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUpKSwgZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIE5vZGUq
IGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0
dXMub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJl
KCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdp
c3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeU9mZnNldChiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBzdGF0aWNfY2FzdDxQcm9wZXJ0eU9mZnNldD4ob3BlcmFuZCksIGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKSk7CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29w
ZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw3ICs0OTUsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAg
ICAgLy8gU2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkud3JpdGVzU3RydWN0dXJlcygpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKQEAg
LTU0NCw2ICs1NDksMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEg
cHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53
cml0ZXNTdHJ1Y3R1cmVzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2Ug
UHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOgpAQCAtNjE3LDYgKzYyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICAgICAgICAgIGNhc2UgTWFrZVJvcGU6CiAg
ICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBUaGlzIGVpdGhlciBleGl0cywgY2F1c2VzIGEgR0MgKGxhenkgc3RyaW5n
IGFsbG9jYXRpb24pLCBvciBjbG9iYmVycwpAQCAtNjY4LDYgKzY3OSwxNCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRp
UHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkuaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBiYXNlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtNzA5LDcgKzcyOCwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0Ogog
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlh
czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY5LDkgKzQ2OSwyMyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2Fz
ZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAg
ICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFw
KE5hbWVkUHJvcGVydGllcywgbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS5pZGVudGlmaWVy
TnVtYmVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgorICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmUpOworICAgICAgICByZWFkKEpT
T2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChOYW1lZFByb3Bl
cnRpZXMsIG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkuaWRlbnRpZmllck51bWJlcikpOwor
ICAgICAgICBpZiAobm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS53cml0ZXNTdHJ1Y3R1cmVz
KCkpCisgICAgICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkucmVhbGxvY2F0ZXNTdG9yYWdlKCkpIHsKKyAgICAg
ICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgICAgICBjbG9iYmVyaXpl
Rm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICB3cml0ZShBYnN0cmFjdEhl
YXAoTmFtZWRQcm9wZXJ0aWVzLCBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlcikpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTE3NCw2ICsxNzQsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgICAgICBFZGdlIGNo
aWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
Y2hpbGRFZGdlLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpICE9IHN0cnVjdHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZW1pdFB1dEJ5T2Zmc2V0KGluZGV4SW5CbG9jaywgbm9k
ZSwgc3RydWN0dXJlLCB2YXJpYW50LCBkYXRhLmlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgICAgIGNhc2Ug
R2V0QnlJZEZsdXNoOiB7CkBAIC0yMTUsOSArMjM2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsK
LSAgICAgICAgICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAg
ICAgICAgICAgICAgICAgICB2bSgpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihvcmlnaW4uc2VtYW50aWMpLApAQCAtMjI1LDk2ICsyNDMsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdLAogICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3Qp
OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpICYmICFzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpCisgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0dXMuaXNTaW1wbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5udW1WYXJpYW50cygpICE9IDEpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXMub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2gg
dGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKLSAgICAgICAgICAgICAgICAvLyBhbmQg
bWFrZSBzdXJlIHdlIHNpZ25hbCB0byB0aGUgbG9vcCB0aGF0IGl0IHNob3VsZCBjb250aW51ZSBh
bmQgbm90Ci0gICAgICAgICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBlbWl0UHV0QnlPZmZzZXQoaW5kZXhJbkJsb2NrLCBub2RlLCBzdHJ1Y3R1cmUsIHN0YXR1
c1swXSwgaWRlbnRpZmllck51bWJlcik7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2lu
dCkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmVl
ZHNDZWxsQ2hlY2spIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBo
YW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNl
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSogdHJhbnNpdGlvbkRhdGEgPSAwOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNT
aW1wbGVUcmFuc2l0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEg
PSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCBzdGF0dXMubmV3U3RydWN0
dXJlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExhemlseShzdGF0dXMuc3RydWN0
dXJlQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0dXMuc3RydWN0dXJlQ2hhaW4oKS0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3Rv
dHlwZSA9IHN0YXR1cy5zdHJ1Y3R1cmVDaGFpbigpLT5hdChpKS0+c3RvcmVkUHJvdG90eXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvcmlnaW4sIGluZGV4SW5CbG9jaywgcHJvdG90eXBlLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBFZGdlIHBy
b3BlcnR5U3RvcmFnZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cy5p
c1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgY2hpbGRFZGdlLAotICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRp
b24oKSkgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBo
LmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBF
ZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUHV0
QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9y
YWdlKTsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBvcmlnaW4sIAotICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwg
RWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
LSAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0
KCk7Ci0gICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9
IGlkZW50aWZpZXJOdW1iZXI7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAKQEAgLTQ0NSw2ICszODAsMTA3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOwog
ICAgIH0KIAorICAgIHZvaWQgZW1pdFB1dEJ5T2Zmc2V0KHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
Tm9kZSogbm9kZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyKQorICAgIHsKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4gPSBub2RlLT5vcmlnaW47CisgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CisgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKKwor
ICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOworICAg
ICAgICAKKyAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKKyAgICAgICAgYm9v
bCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWND
ZWxsOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNl
LCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCisgICAgICAgIC8vIGFuZCBt
YWtlIHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFu
ZCBub3QKKyAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KKyAgICAgICAgbV9pbnRlcnBy
ZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CisKKyAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2lu
dCkgeworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCwgb3JpZ2luLAorICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2Up
OworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CisKKyAgICAgICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICB0cmFu
c2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoCisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYWlucygpLmFkZExh
emlseSh2YXJpYW50LnN0cnVjdHVyZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHZhcmlhbnQuc3RydWN0dXJlQ2hhaW4oKS0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSB2YXJpYW50LnN0cnVj
dHVyZUNoYWluKCktPmF0KGkpLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luLCBpbmRleEluQmxvY2ssIHByb3RvdHlwZS5hc0NlbGwoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
RWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CisKKyAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlh
bnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwor
ICAgICAgICBlbHNlIGlmICgKKyAgICAgICAgICAgIHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlCisgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewor
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgb3JpZ2luLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWlzSW5s
aW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKKyAg
ICAgICAgICAgICAgICBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7
CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKHZh
cmlhbnQubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwK
KyAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCisgICAg
ICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwgY2hp
bGRFZGdlKSkpOworICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEo
KS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAg
ICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRT
dHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93
bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxv
Y2ssIHB1dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKworICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
dXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0
b3JhZ2UpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG9yaWdpbiwg
CisgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwK
KyAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisK
KyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHZhcmlhbnQub2Zmc2V0KCk7CisgICAgICAgIHN0b3Jh
Z2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAg
ICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsK
KyAgICB9CisKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2lu
IG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTXVsdGlQdXRC
eU9mZnNldDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNo
aWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgSW5zdGFuY2VPZjogewogICAgICAgICAgICAgLy8g
RklYTUU6IFRoaXMgYXBwZWFycyBicm9rZW46IENoZWNrSGFzSW5zdGFuY2UgYWxyZWFkeSBkb2Vz
IGFuIHVuY29uZGl0aW9uYWwgY2VsbAogICAgICAgICAgICAgLy8gY2hlY2suIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0NzkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwx
MiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnZhcmlhbnRzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoZGF0YS52YXJpYW50c1tpXSwgY29udGV4
dCkpOwogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKSkgewor
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImlkIiwgZGF0YS5pZGVudGlmaWVy
TnVtYmVyLCAieyIsIGlkZW50aWZpZXJzKClbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwgIn0iKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEudmFyaWFudHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChkYXRhLnZhcmlhbnRz
W2ldLCBjb250ZXh0KSk7CisgICAgfQogICAgIEFTU0VSVChub2RlLT5oYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKnRoaXMpID09IG5vZGUtPmhhc0xvY2FsKCp0aGlzKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2NDU3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtODMwLDYgKzgzMCw3IEBAIHB1YmxpYzoKICAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hE
YXRhOwogICAgIEJhZzxTd2l0Y2hEYXRhPiBtX3N3aXRjaERhdGE7CiAgICAgQmFnPE11bHRpR2V0
QnlPZmZzZXREYXRhPiBtX211bHRpR2V0QnlPZmZzZXREYXRhOworICAgIEJhZzxNdWx0aVB1dEJ5
T2Zmc2V0RGF0YT4gbV9tdWx0aVB1dEJ5T2Zmc2V0RGF0YTsKICAgICBWZWN0b3I8SW5saW5lVmFy
aWFibGVEYXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBPd25QdHI8SW5saW5lQ2Fs
bEZyYW1lU2V0PiBtX2lubGluZUNhbGxGcmFtZXM7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBz
dGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE2NDU3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDMwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAorYm9vbCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YTo6d3JpdGVzU3RydWN0dXJlcygpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
IGlmICh2YXJpYW50c1tpXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIE11bHRpUHV0QnlPZmZzZXREYXRhOjpyZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdAorewor
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBp
ZiAodmFyaWFudHNbaV0ua2luZCgpICE9IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFyaWFudHNbaV0ub2xk
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0KKyAgICAgICAgICAgIHZhcmlhbnRz
W2ldLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB2b2lkIEJyYW5jaFRhcmdldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewogICAgIGlmICghYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJHZXRCeUlk
VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgorI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIK
QEAgLTU3LDYgKzU4LDE0IEBAIHN0cnVjdCBNdWx0aUdldEJ5T2Zmc2V0RGF0YSB7CiAgICAgVmVj
dG9yPEdldEJ5SWRWYXJpYW50LCAyPiB2YXJpYW50czsKIH07CiAKK3N0cnVjdCBNdWx0aVB1dEJ5
T2Zmc2V0RGF0YSB7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICBWZWN0b3I8
UHV0QnlJZFZhcmlhbnQsIDI+IHZhcmlhbnRzOworICAgIAorICAgIGJvb2wgd3JpdGVzU3RydWN0
dXJlcygpIGNvbnN0OworICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7Cit9Owor
CiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC00NjAsNyArNDY5
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIHZvaWQgY29udmVydFRvUHV0QnlPZmZzZXQo
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gUHV0QnlJZCB8fCBtX29wID09IFB1dEJ5SWREaXJlY3QpOwor
ICAgICAgICBBU1NFUlQobV9vcCA9PSBQdXRCeUlkIHx8IG1fb3AgPT0gUHV0QnlJZERpcmVjdCB8
fCBtX29wID09IE11bHRpUHV0QnlPZmZzZXQpOwogICAgICAgICBtX29wSW5mbyA9IHN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXg7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMyhjaGlsZHJlbi5jaGls
ZDIoKSk7CiAgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMihjaGlsZHJlbi5jaGlsZDEoKSk7CkBA
IC0xMDkxLDYgKzExMDAsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8TXVsdGlHZXRCeU9mZnNldERhdGEqPihtX29wSW5mbyk7CiAgICAgfQogICAg
IAorICAgIGJvb2wgaGFzTXVsdGlQdXRCeU9mZnNldERhdGEoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG9wKCkgPT0gTXVsdGlQdXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgTXVsdGlQdXRC
eU9mZnNldERhdGEmIG11bHRpUHV0QnlPZmZzZXREYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxNdWx0aVB1dEJ5T2Zmc2V0RGF0YSo+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNGdW5jdGlvbkRlY2xJbmRleCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gb3AoKSA9PSBOZXdGdW5jdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUsNiArMTc1LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhNdWx0aUdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KE11bHRpUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRBcnJh
eUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0VHlwZWRBcnJheUJ5dGVP
ZmZzZXQsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldFNjb3BlLCBOb2RlUmVzdWx0
SlMpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgUHV0QnlJZDoKICAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgorICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIGNhc2Ug
REZHOjpKdW1wOgogICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgY2FzZSBTd2l0Y2g6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2
aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVy
OgogICAgIGNhc2UgQ2hlY2s6CiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2Ug
TXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnlWYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2NDU3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2ODksNiArNDY4OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CiAgICAgY2FzZSBBcml0aElNdWw6CiAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNjQ1NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDA2LDYgKzUwMDYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBD
aGVja0luQm91bmRzOgogICAgIGNhc2UgQXJpdGhJTXVsOgogICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKKyAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAg
ICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0
OgorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzQ2LDYgKzM0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBIYXJkUGhhbnRvbToKICAgICAgICAgICAgICAgICBjYXNlIE1v
dkhpbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgY291bnQgdGhlc2UgdXNlcy4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0
QnlJZDoKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgICAgIC8v
IFRoZXNlIGFyZSBPSy4KICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY0NTc1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3NCw2ICs0NzQsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgogICAgICAgICAgICAgY29tcGlsZVB1dEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZU11
bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKICAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXIoKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTY1Niw4ICsxNjU5LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1f
ZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRp
b24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwogICAgICAgICAKLSAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAorICAgICAgICBtX291dC5z
dG9yZVB0cigKKyAgICAgICAgICAgIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKTsKICAgICB9CiAgICAgCkBAIC0yNzA4
LDEwNSArMjcxMSwyMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKCkKICAgICB7CiAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBkYXRh
ID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpOwotICAgICAgICAKICAgICAgICAg
TFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoZGF0YS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIo
KSkgewotICAgICAgICAgICAgc2V0U3RvcmFnZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9v
dXQub3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRlQnV0
dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCi0gICAgICAg
ICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Ugc2xvdyBwYXRoIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQ
YXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJh
c2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGluaXRp
YWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQYXRoKTsKLSAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLCBt
X2NhbGxGcmFtZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
UHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IAotICAgICAgICBzZXRTdG9yYWdlKHJlc3VsdCk7CisgICAgICAgIHNldFN0b3JhZ2UoYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBkYXRhLnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAg
fQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewog
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXMg
PSBkYXRhLnByZXZpb3VzU3RydWN0dXJlOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IHByZXZpb3Vz
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwotICAgICAgICBzaXplX3Qg
bmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAotCi0gICAgICAgIEFT
U0VSVChuZXdTaXplID09IGRhdGEubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICog
c2l6ZW9mKEpTVmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRI
YXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAgICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9
IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwobV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UpLCBt
X2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwotICAgICAgICAgICAgc2V0U3RvcmFn
ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIExWYWx1
ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKICAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAg
TFZhbHVlIGVuZE9mU3RvcmFnZSA9IAotICAgICAgICAgICAgYWxsb2NhdGVCYXNpY1N0b3JhZ2VB
bmRHZXRFbmQobV9vdXQuY29uc3RJbnRQdHIobmV3U2l6ZSksIHNsb3dQYXRoKTsKLSAgICAgICAg
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IobV9v
dXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0
b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQo
bmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7ICAgICAgIAotICAgICAgICAKLSAgICAgICAgTFZh
bHVlIHN0b3JhZ2VMb2NhdGlvbiA9IHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgbmV3QWxsb2NTaXplKTsKLSAgICAg
ICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
c3RvcmFnZUxvY2F0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291
dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotICAgICAgICBMVmFsdWUg
b2xkU3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRlclNpemUgPSAtc2l6ZW9mKEpTVmFsdWUp
IC0gc2l6ZW9mKHZvaWQgKik7Ci0gICAgICAgIHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVy
U2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7Ci0KLSAgICAgICAgZm9yIChw
dHJkaWZmX3Qgb2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0
IC09IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKLSAgICAg
ICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVz
LmF0QW55TnVtYmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAgICAgICAgICAgbV9vdXQu
c3RvcmVQdHIobG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51
bWJlcigpLCByZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9IAotICAgICAgICAKLSAgICAgICAg
bV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UocmVzdWx0KTsg
CisgICAgICAgIHNldFN0b3JhZ2UoCisgICAgICAgICAgICByZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgZGF0YS5wcmV2aW91c1N0
cnVjdHVyZSwgZGF0YS5uZXdTdHJ1Y3R1cmUpKTsKICAgICB9CiAgICAgCi0gICAgCiAgICAgdm9p
ZCBjb21waWxlVG9TdHJpbmcoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewpAQCAtMzE0MCwxMiArMzA2MCw4IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0KICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVttX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAot
ICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFkZHJlc3MoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMucHJvcGVy
dGllc1tkYXRhLmlkZW50aWZpZXJOdW1iZXJdLAotICAgICAgICAgICAgICAgICAgICBsb3dTdG9y
YWdlKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShkYXRhLm9mZnNldCkpKSk7CisgICAgICAgIHNldEpTVmFsdWUobG9hZFByb3BlcnR5
KAorICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlm
aWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KCkKQEAgLTMxODksMTEgKzMxMDUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBiYXNlOwogICAgICAgICAgICAgICAgIGlmICgh
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5QmFzZSA9IG1fb3V0LmxvYWRQdHIocHJvcGVydHlCYXNlLCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZDY0KAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5hZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9oZWFwcy5wcm9wZXJ0aWVzW2RhdGEuaWRlbnRpZmllck51bWJlcl0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eUJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZSh2YXJpYW50Lm9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGxvYWRQcm9wZXJ0eShwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFy
aWFudC5vZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKQEAgLTMyMTMsMTIgKzMxMjUs
NjYgQEAgcHJpdmF0ZToKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPQogICAgICAg
ICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW21fbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgIHN0
b3JlUHJvcGVydHkoCiAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpLAot
ICAgICAgICAgICAgbV9vdXQuYWRkcmVzcygKLSAgICAgICAgICAgICAgICBtX2hlYXBzLnByb3Bl
cnRpZXNbZGF0YS5pZGVudGlmaWVyTnVtYmVyXSwKLSAgICAgICAgICAgICAgICBsb3dTdG9yYWdl
KG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG9mZnNldFJlbGF0aXZlVG9CYXNl
KGRhdGEub2Zmc2V0KSkpOworICAgICAgICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgp
KSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTXVsdGlQdXRC
eU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CisgICAg
ICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRz
LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJN
dWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBleGl0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGZhaWwiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQ
dXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAg
ICAgICBTd2l0Y2hDYXNlKHdlYWtQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpLCBibG9j
a3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3Ry
dWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmUpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICArIDEgPCBkYXRhLnZhcmlhbnRzLnNp
emUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlID0gYmFzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4udHJh
bnNpdGlvbnMuYWRkTGF6aWx5KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKSwgbV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBzdG9yYWdlRm9yVHJhbnNp
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFyaWFudC5vZmZzZXQoKSwgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgIHdlYWtQb2ludGVyKHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24pOworICAgICAgICB0ZXJt
aW5hdGUoQmFkQ2FjaGUpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcigpCkBAIC0zNzQ4LDYgKzM3MTQsMTM3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CiAgICAgfQog
ICAgIAorICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51
bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RvcmVQcm9wZXJ0eSgKKyAg
ICAgICAgTFZhbHVlIHZhbHVlLCBMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zm
c2V0KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzT2ZQcm9wZXJ0eSgK
KyAgICAgICAgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKAor
ICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdl
LCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVl
IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICBMVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVj
dHVyZSogbmV4dFN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZU9mZnNldChv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAgICAgCisgICAgICAgIGlm
IChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIo
b2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgcmVzdWx0OworICAgICAgICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKQorICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
b2JqZWN0LCBwcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
cmVzdWx0ID0gcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksCisg
ICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5leHRTdHJ1Y3R1cmUpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKG9iamVjdCk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVj
dHVyZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5vcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxs
b2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwK
KyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihpbml0aWFsT3V0T2ZMaW5lQ2Fw
YWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAg
bV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRP
ZlN0b3JhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0
LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwgbV9jYWxsRnJhbWUpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0
ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1bHQsIG9i
amVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoCisgICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCisgICAgeworICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOwor
ICAgICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7
IAorCisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxp
bmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChw
cmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgTFZhbHVl
IG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50NjQobmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVl
KSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3Jh
Z2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgicmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgicmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSAKKyAgICAgICAgICAgIGFsbG9jYXRlQmFzaWNT
dG9yYWdlQW5kR2V0RW5kKG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUpLCBzbG93UGF0aCk7Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
ZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5jb25z
dEludDY0KG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOyAgICAgICAKKyAgICAgICAgCisgICAg
ICAgIExWYWx1ZSBzdG9yYWdlTG9jYXRpb24gPSB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG5ld0FsbG9jU2l6ZSk7
CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQu
YW5jaG9yKHN0b3JhZ2VMb2NhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKworICAgICAg
ICBwdHJkaWZmX3QgaGVhZGVyU2l6ZSA9IC1zaXplb2YoSlNWYWx1ZSkgLSBzaXplb2Yodm9pZCAq
KTsKKyAgICAgICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nh
c3Q8cHRyZGlmZl90PihvbGRTaXplKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQg
PSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6ZW9mKHZvaWQq
KSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwg
b2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihsb2FkZWQs
IG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHJlc3VsdCwg
b2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHJl
c3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBMVmFs
dWUgZ2V0QnlJZChMVmFsdWUgYmFzZSkKICAgICB7CiAgICAgICAgIFN0cmluZ0ltcGwqIHVpZCA9
IG1fZ3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CkBAIC01
MTg1LDcgKzUyODIsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9vdXQubG9hZDgobV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuTWFya2VkQmxvY2tfbWFya0JpdHMsIG1hcmtlZEJsb2NrLCBt
YXJrQnl0ZUluZGV4LCBTY2FsZU9uZSwgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkpOwog
ICAgIH0KIAotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSwgTFZhbHVlIHZh
bHVlLCBFZGdlJiB2YWx1ZUVkZ2UpCisgICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBi
YXNlLCBMVmFsdWUgdmFsdWUsIEVkZ2UgdmFsdWVFZGdlKQogICAgIHsKICNpZiBFTkFCTEUoR0dD
KQogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0b3JlIGJhcnJpZXIgY29udGludWF0aW9uIikpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LXJlYWxsb2NhdGlvbi1jYXNl
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211
bHRpLXB1dC1ieS1vZmZzZXQtcmVhbGxvY2F0aW9uLWNhc2VzLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LXJl
YWxsb2NhdGlvbi1jYXNlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAordmFy
IGZvb3MgPSBbCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24o
bykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAg
ZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7
IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBv
LmZmID0gNDI7IH0sCisgICAgZnVuY3Rpb24obykgeyBvLmZmID0gNDI7IH0KK107CisKK2lmIChm
b29zLmxlbmd0aCAhPSA4KQorICAgIHRocm93ICJFcnJvciI7CisKK2Z1bmN0aW9uIGJhcihvLCBu
KSB7CisgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmEgPSAxOworICAg
IGlmIChuID09IDEpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5iID0gMjsKKyAgICBpZiAobiA9
PSAyKQorICAgICAgICByZXR1cm47CisgICAgby5uYyA9IDM7CisgICAgaWYgKG4gPT0gMykKKyAg
ICAgICAgcmV0dXJuOworICAgIG8ubmQgPSA0OworICAgIGlmIChuID09IDQpCisgICAgICAgIHJl
dHVybjsKKyAgICBvLm5lID0gNTsKKyAgICBpZiAobiA9PSA1KQorICAgICAgICByZXR1cm47Cisg
ICAgby5uZiA9IDY7CisgICAgaWYgKG4gPT0gNikKKyAgICAgICAgcmV0dXJuOworICAgIG8ubmcg
PSA3OworICAgIGlmIChuID09IDcpCisgICAgICAgIHJldHVybjsKKyAgICBvLm5oID0gODsKK30K
KworZnVuY3Rpb24gYmF6KG8sIG4pIHsKKyAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKG8ubmEgIT0gMSkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsK
KyAgICBpZiAobiA9PSAxKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmIgIT0gMikKKyAg
ICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSAyKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKG8ubmMgIT0gMykKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3Jy
dXB0aW9uIjsKKyAgICBpZiAobiA9PSAzKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmQg
IT0gNCkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA0
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmUgIT0gNSkKKyAgICAgICAgdGhyb3cgIk1l
bW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA1KQorICAgICAgICByZXR1cm47CisgICAg
aWYgKG8ubmYgIT0gNikKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBp
ZiAobiA9PSA2KQorICAgICAgICByZXR1cm47CisgICAgaWYgKG8ubmcgIT0gNykKKyAgICAgICAg
dGhyb3cgIk1lbW9yeSBjb3JydXB0aW9uIjsKKyAgICBpZiAobiA9PSA3KQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG8ubmggIT0gOCkKKyAgICAgICAgdGhyb3cgIk1lbW9yeSBjb3JydXB0aW9u
IjsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCA4OyArK2kpCisgICAgbm9JbmxpbmUoZm9vc1tp
XSk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7
CisgICAgdmFyIG8gPSB7fTsKKyAgICB2YXIgcCA9IHthOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwg
Zjo2fTsKKyAgICBiYXIobywgaSAlIDgpOworICAgIGJhcihwLCBpICUgOCk7CisgICAgCisgICAg
Zm9vc1tpICUgOF0obyk7CisgICAgZm9vc1tpICUgOF0ocCk7CisgICAgCisgICAgaWYgKG8uZmYg
IT0gNDIpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0IGluIG86ICIgKyBvLmZmOworICAgIGlm
IChwLmZmICE9IDQyKQorICAgICAgICB0aHJvdyAiQmFkIHJlc3VsdCBpbiBvOiAiICsgcC5mZjsK
KyAgICAKKyAgICBpZiAocC5hICE9IDEgfHwgcC5iICE9IDIgfHwgcC5jICE9IDMgfHwgcC5kICE9
IDQgfHwgcC5lICE9IDUgfHwgcC5mICE9IDYpCisgICAgICAgIHRocm93ICJNZW1vcnkgY29ycnVw
dGlvbiIKKyAgICBiYXoobywgaSAlIDgpOworICAgIGJheihwLCBpICUgOCk7Cit9CisKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE2NDU3NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTAyLTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBkbyBwb2x5bW9ycGhpYyBQdXRCeUlkIGlu
bGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjkyMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIEFkZCBhIG1pY3JvYmVuY2htYXJrIGZvciBwb2x5bW9ycGhpYyBQdXRCeUlkLgorCisg
ICAgICAgICoganMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktaWQtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS1pZC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQt
YnktaWQuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNC0wMi0yMyAgRGVhbiBKYWNr
c29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBBbGxvdyBBTkdMRSB0byBp
bml0aWFsaXplIHVudXNlZCB2YXJ5aW5ncwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
b2x5bW9ycGhpYy1wdXQtYnktaWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcG9s
eW1vcnBoaWMtcHV0LWJ5LWlkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGlj
LXB1dC1ieS1pZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9s
eW1vcnBoaWMtcHV0LWJ5LWlkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS1pZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9y
ZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3BvbHlt
b3JwaGljLXB1dC1ieS1pZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktaWQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBo
aWMtcHV0LWJ5LWlkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LWlkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjQgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkKKyAgICAgICAgby5mID0gKG8uZiB8IDApICsgNDI7Cit9CisKK25vSW5saW5lKGZv
byk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0
OworICAgIGlmICgoaSAlIDMpID09IDApCisgICAgICAgIG9iamVjdCA9IHtnOjN9OworICAgIGVs
c2UgaWYgKChpICUgMykgPT0gMSkKKyAgICAgICAgb2JqZWN0ID0ge2Y6MSwgZzoyfTsKKyAgICBl
bHNlIGlmICgoaSAlIDMpID09IDIpCisgICAgICAgIG9iamVjdCA9IHtnOjEsIGY6Mn07CisgICAg
Zm9vKG9iamVjdCk7CisgICAgaWYgKG9iamVjdC5mICE9IDQyICogMTAwICsgKGkgJSAzKSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsgb2Jq
ZWN0LmY7Cit9CisKK3ZhciByID0ge2c6MywgaDo0LCBmOjV9OworZm9vKHIpOworaWYgKHIuZiAh
PSA1ICsgNDIgKiAxMDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiAr
IHIuZjsK
</data>
<flag name="review"
          id="249179"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>