<?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>100599</bug_id>
          
          <creation_ts>2012-10-27 20:53:52 -0700</creation_ts>
          <short_desc>DFG::Array::Mode needs to be cleaned up</short_desc>
          <delta_ts>2012-10-27 23:14:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          <dependson>100601</dependson>
          <blocked>98606</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>752874</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 20:53:52 -0700</bug_when>
    <thetext>It&apos;s really a tuple of the type, the level of speculation you&apos;re doing (in-bounds, hole, out-of-bounds), whether or not there&apos;s a conversion, and whether or not we&apos;re dealing with a JSArray.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752876</commentid>
    <comment_count>1</comment_count>
      <attachid>171116</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 20:58:15 -0700</bug_when>
    <thetext>Created attachment 171116
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752880</commentid>
    <comment_count>2</comment_count>
      <attachid>171118</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 21:17:07 -0700</bug_when>
    <thetext>Created attachment 171118
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752881</commentid>
    <comment_count>3</comment_count>
      <attachid>171119</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 21:35:54 -0700</bug_when>
    <thetext>Created attachment 171119
the patch

Did some rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752882</commentid>
    <comment_count>4</comment_count>
      <attachid>171119</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-27 21:40:37 -0700</bug_when>
    <thetext>Comment on attachment 171119
the patch

Attachment 171119 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14605829</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752883</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-27 21:40:53 -0700</bug_when>
    <thetext>Attachment 171119 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2418:  The parameter name &quot;arrayMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 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>752884</commentid>
    <comment_count>6</comment_count>
      <attachid>171119</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-27 21:42:58 -0700</bug_when>
    <thetext>Comment on attachment 171119
the patch

Attachment 171119 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14614698</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752885</commentid>
    <comment_count>7</comment_count>
      <attachid>171119</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-27 21:43:06 -0700</bug_when>
    <thetext>Comment on attachment 171119
the patch

Attachment 171119 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14607699</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752886</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 21:45:19 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 171119 [details])
&gt; Attachment 171119 [details] did not pass mac-ews (mac):
&gt; Output: http://queues.webkit.org/results/14605829

These build failures are easy to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752887</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 21:45:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 171119 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:2418:  The parameter name &quot;arrayMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Total errors found: 1 in 16 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

I will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752889</commentid>
    <comment_count>10</comment_count>
      <attachid>171120</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 22:05:52 -0700</bug_when>
    <thetext>Created attachment 171120
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752909</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-10-27 23:14:08 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/132745</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171116</attachid>
            <date>2012-10-27 20:58:15 -0700</date>
            <delta_ts>2012-10-27 21:17:07 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>arraymode_1.patch</filename>
            <type>text/plain</type>
            <size>101034</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBA
QAorMjAxMi0xMC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6QXJyYXk6Ok1vZGUgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiB0aGUgcHJldmlvdXMgbWFzc2l2
ZSBBcnJheTo6TW9kZSBlbnVtIGludG8gYSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZvdXIKKyAgICAg
ICAgZmllbGRzLCB0aGUgdHlwZSwgd2hldGhlciBpdCdzIGEgSlNBcnJheSwgdGhlIGxldmVsIG9m
IHNwZWN1bGF0aW9uLCBhbmQgdGhlCisgICAgICAgIGtpbmQgb2YgY29udmVyc2lvbiB0byBwZXJm
b3JtLgorICAgICAgICAKKyAgICAgICAgTm8gcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3JhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5TW9kZTo6cmVmaW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjphcnJheVR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlDbGFzc1RvU3RyaW5nKToKKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjphcnJheUNvbnZlcnNpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp0b1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlw
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjphcnJheUNsYXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OnNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpB
cnJheU1vZGU6OmNvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YXNX
b3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21Xb3JkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OndpdGhTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp1c2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc0luQm91bmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1heVN0b3JlVG9Ib2xlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFycmF5TW9kZTo6aXNTbG93UHV0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6bGVuZ3RoTmVl
ZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1vZGVGb3JQdXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6
OkRGRzo6QXJyYXlNb2RlOjpzdXBwb3J0c0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpkb2VzQ29udmVyc2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2Rl
OjphcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFycmF5TW9kZXNXaXRoSW5kZXhp
bmdTaGFwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpiYXNlbGluZUNv
ZGVCbG9ja0Zvcik6CisgICAgICAgIChBc3NlbWJseUhlbHBlcnMpOgorICAgICAgICAqIGRmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmdldEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
cmF5TW9kZUFuZEVtaXRDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpnZXRBcnJheUxlbmd0aEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tBcnJheUVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpDU0VQaGFzZTo6Z2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAg
KiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRml4
dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpGaXh1cFBoYXNlOjpibGVzc0FycmF5T3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YnlWYWxJc1B1cmUp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXJy
YXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzZXRBcnJheU1vZGUpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRU
eXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoU3Bl
Y3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMTAtMjcg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUFMX1BMQVRGT1JN
X05BTUUgYnVpbGQgc2V0dGluZyBpcyBubyBsb25nZXIgbmVlZGVkCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEzMjU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzOSw3ICs4MzksNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAg
ICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJh
eTo6VW5wcm9maWxlZDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODU5
LDE4ICs4NTksMTIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAog
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKICAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2Fz
ZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9T
VE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6
Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChu
b2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKQEAgLTkyNSwyNiArOTE5LDIzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApOwogICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSk7CiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKLSAgICAgICAgc3dpdGNoIChtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2RlKCkpKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKICAgICAgICAgICAgIG1faXNWYWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CiAg
ICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9E
RVM6Ci0gICAgICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgICAgICBjYXNl
IElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CisgICAgICAgICAgICBpZiAobm9kZS5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBB
UlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVj
SW50MzIpOwotICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKKyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xl
KCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC0x
MzcwLDE4ICsxMzYxLDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMg
bm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tBcnJheTogewot
ICAgICAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKGZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5v
ZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlD
aGVja2VkKGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBtX2ZvdW5kQ29u
c3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxpa2UgR2V0QnlW
YWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVzIHRyeWluZyB0
byBiZSBjbGV2ZXIgaGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
U3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBTExfQ09OVElH
VU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICAg
ICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJpZ2h0IG5vdy4g
V2UgbWF5IHdhbnQgdG8gYWRkCiAgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcgb2YgYXJyYXkg
bW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4KICAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKQEAgLTE0MjAsMzUg
KzE0MTIsMjkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5TW9kZXMoYXJy
YXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9kZXNUaGF0UGFz
c0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgIGlmIChtb2RlQWxy
ZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2Rl
LmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0cnVlOwogICAg
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNl
IEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVjQ2VsbCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxv
Y2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVz
KGFycmF5TW9kZXNGb3Iobm9kZS5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAgbV9oYXZlU3Ry
dWN0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAg
ICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6OkNvbnZlcnQp
OworICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOworICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJB
cnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkp
OworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5
cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICAvLyBTdHJp
bmdzIGFyZSB3ZWlyZCAtIHdlIG1heSBzcGVjIGZhaWwgaWYgdGhlIHN0cmluZyB3YXMgYSByb3Bl
LiBUaGF0IGlzIG9mIGNvdXJzZQogICAgICAgICAgICAgLy8gc3R1cGlkLCBhbmQgd2Ugc2hvdWxk
IGZpeCB0aGF0LCBidXQgZm9yIG5vdyBsZXQncyBhdCBsZWFzdCBiZSBob25lc3QgYWJvdXQgaXQu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5
OjpBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCku
dHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG9i
c2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4Nyw3ICsyODcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5
TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ3Niw3ICs0NzYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBj
YW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CkBA
IC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogewotICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJndW1lbnRzKQor
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6
OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBo
W25vZGUuY2hpbGQxKCldKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTI2ICszMiwxMjYgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1BcnJheTo6TW9kZSBmcm9tT2Jz
ZXJ2ZWQoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgYm9vbCBt
YWtlU2FmZSkKK0FycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBib29sIG1ha2VTYWZlKQogewogICAgIHN3
aXRjaCAocHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkpIHsKICAgICBjYXNlIDA6Ci0gICAg
ICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6VW5wcm9maWxlZCk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgogICAg
ICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OlRvQ29udGlndW91
czsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBjb250aWd1b3VzIG9y
IGFycmF5IHN0b3JhZ2UuIFdlJ3JlIG1ha2luZyBhIHN0YXRpYyBndWVzcyBoZXJlLiBJbiBmdXR1
cmUgd2Ugc2hvdWxkIHVzZSBleGl0IHByb2ZpbGluZyBmb3IgdGhpcy4KLSAgICAgICAgcmV0dXJu
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3Vu
ZHMsIEFycmF5OjpDb252ZXJ0KTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBn
byB0byBjb250aWd1b3VzIG9yIGFycmF5IHN0b3JhZ2UuIFdlJ3JlIG1ha2luZyBhIHN0YXRpYyBn
dWVzcyBoZXJlLiBJbiBmdXR1cmUgd2Ugc2hvdWxkIHVzZSBleGl0IHByb2ZpbGluZyBmb3IgdGhp
cy4KKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cyk6Ci0gICAg
ICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJv
ZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6
OkNvbnRpZ3VvdXMpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3Vz
LCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwg
bWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgot
ICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9m
Qm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJyYXlXaXRoQ29u
dGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJ
cykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNv
bnRpZ3VvdXMsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1bGF0
aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpB
cnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJu
IEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpB
c0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHBy
b2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpB
cnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdl
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6
QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAg
IGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFNw
ZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFn
ZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJh
eTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpB
cnJheVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1
bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0
QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFz
SXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpUb0FycmF5U3RvcmFnZTsKKyAg
ICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJy
YXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVz
KEFycmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6QXJyYXlUb0Fy
cmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdl
LCBBcnJheTo6QXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwg
bWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMp
IHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U7Cisg
ICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3Np
Ymx5QXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNh
ZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhDb250aWd1b3VzKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUg
JiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAgICAgICAg
cmV0dXJuIEFycmF5OjpUb0NvbnRpZ3VvdXM7Ci0gICAgICAgIHJldHVybiBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNv
bnRpZ3VvdXMsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9mQm91bmRzLCBBcnJheTo6Q29u
dmVydCk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGlj
dGlvbnMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpX
cml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJyYXk6OlRvQXJyYXlTdG9yYWdlOwotICAgICAgICByZXR1cm4gQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9mQm91bmRzLCBB
cnJheTo6Q29udmVydCk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICAg
ICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3NlcygpKQotICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2U7Ci0gICAgICAgIHJldHVybiBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsK
KyAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2Us
IEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9mQm91bmRzLCBBcnJheTo6Q29udmVydCk7Cisg
ICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBvc3NpYmx5IGEg
a2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAgICAgICAvLyB1
c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUgdG8gZXh0cmFj
dCB1c2VmdWwgZGF0YSBmcm9tCiAgICAgICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxlcyBvZiB0aGUg
aW5wdXRzLiBIZW5jZSwgd2UgbGVhdmUgaXQgYXMgdW5kZWNpZGVkLCBhbmQgbGV0CiAgICAgICAg
IC8vIHRoZSBwcmVkaWN0aW9ucyBwcm9wYWdhdG9yIGRlY2lkZSBsYXRlci4KLSAgICAgICAgcmV0
dXJuIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICB9CiB9CiAKLUFycmF5OjpN
b2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNwZWN1bGF0ZWRUeXBl
IGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQorQXJyYXlNb2RlIEFycmF5TW9kZTo6cmVmaW5l
KFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KSBjb25zdAogewogICAg
IGlmICghYmFzZSB8fCAhaW5kZXgpIHsKICAgICAgICAgLy8gSXQgY2FuIGJlIHRoYXQgd2UgaGFk
IGEgbGVnaXRpbWF0ZSBhcnJheU1vZGUgYnV0IG5vIGluY29taW5nIHByZWRpY3Rpb25zLiBUaGF0
J2xsCiAgICAgICAgIC8vIGhhcHBlbiBpZiB3ZSBpbmxpbmVkIGNvZGUgYmFzZWQgb24sIHNheSwg
YSBnbG9iYWwgdmFyaWFibGUgd2F0Y2hwb2ludCwgYnV0IGxhdGVyCiAgICAgICAgIC8vIHJlYWxp
emVkIHRoYXQgdGhlIGNhbGxzaXRlIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IGV4ZWN1dGVkLiBJ
dCBtYXkgYmUgd29ydGh3aGlsZQogICAgICAgICAvLyB0byBmaXggdGhhdCwgYnV0IGZvciBub3cg
SSdtIGxlYXZpbmcgaXQgYXMtaXMuCi0gICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0Owor
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpGb3JjZUV4aXQpOwogICAgIH0KICAgICAK
ICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlzQ2VsbFNwZWN1bGF0aW9u
KGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgIAotICAgIGlmIChhcnJheU1vZGUgPT0gQXJy
YXk6OlVucHJvZmlsZWQpIHsKKyAgICBpZiAodHlwZSgpID09IEFycmF5OjpVbnByb2ZpbGVkKSB7
CiAgICAgICAgIC8vIElmIHRoZSBpbmRleGluZyB0eXBlIHdhc24ndCByZWNvcmRlZCBpbiB0aGUg
YXJyYXkgcHJvZmlsZSBidXQgdGhlIHZhbHVlcyBhcmUKICAgICAgICAgLy8gYmFzZT1jZWxsIHBy
b3BlcnR5PWludCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhpcyBhY2Nlc3MgZGlkbid0IGV4ZWN1dGUu
Ci0gICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpGb3JjZUV4aXQpOwogICAgIH0KICAgICAKLSAgICBpZiAoYXJyYXlNb2RlICE9
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKQotICAgICAgICByZXR1cm4gYXJyYXlNb2Rl
OworICAgIGlmICh0eXBlKCkgIT0gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpCisgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxhdGlvbihiYXNl
KSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTdHJpbmc7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZyk7CiAgICAgCiAgICAgaWYgKGlzQXJndW1lbnRzU3BlY3VsYXRpb24o
YmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6QXJndW1lbnRzOworICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpOwogICAgIAogICAgIGlmIChpc0ludDhBcnJheVNw
ZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkludDhBcnJheTsKKyAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50OEFycmF5KTsKICAgICAKICAgICBpZiAoaXNJ
bnQxNkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6SW50MTZB
cnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MTZBcnJheSk7CiAgICAg
CiAgICAgaWYgKGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4g
QXJyYXk6OkludDMyQXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMy
QXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAg
ICAgICAgcmV0dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpVaW50OEFycmF5KTsKICAgICAKICAgICBpZiAoaXNVaW50OENsYW1wZWRBcnJheVNw
ZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpVaW50OENsYW1wZWRBcnJheSk7CiAg
ICAgCiAgICAgaWYgKGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0
dXJuIEFycmF5OjpVaW50MTZBcnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
VWludDE2QXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQzMkFycmF5U3BlY3VsYXRpb24oYmFz
ZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6VWludDMyQXJyYXk7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OlVpbnQzMkFycmF5KTsKICAgICAKICAgICBpZiAoaXNGbG9hdDMyQXJy
YXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9hdDMyQXJyYXk7
CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkZsb2F0MzJBcnJheSk7CiAgICAgCiAg
ICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBB
cnJheTo6RmxvYXQ2NEFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpGbG9h
dDY0QXJyYXkpOwogICAgIAotICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKIH0KIAotYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQo
QWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK2Jvb2wgQXJyYXlN
b2RlOjphbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkgY29uc3QKIHsKLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgeworICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIApAQCAtMTYyLDY0ICsx
NjIsNDQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdgogICAgICAg
ICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAgICAgICAKICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1Rh
aWw6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3Vz
OgorICAgICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgeworICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKKyAgICAgICAgICAgICAgICAmJiBoYXNDb250aWd1b3VzKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAg
ICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmlu
ZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNDb250aWd1b3Vz
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGlmIChhcnJheU1vZGVzQWxy
ZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29u
dGlndW91cykpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYg
aGFzQ29udGlndW91cyh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7Ci0KICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xl
OgotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJh
eVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlOgor
ICAgICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgeworICAgICAgICAgICAg
aWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQorICAgICAgICAgICAgICAgICYmIGhhc0Zhc3RBcnJheVN0b3JhZ2UodmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQorICAg
ICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYXJy
YXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXNG
YXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICAgICAg
aWYgKGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChhcnJh
eU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1
cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAg
ICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0Fy
cmF5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZh
bHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAg
ICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2lu
Z2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZVRvSG9sZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKLSAgICBjYXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICBpZiAoYXJy
YXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aEFycmF5U3RvcmFnZSkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAg
ICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAmJiAodmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNB
cnJheSk7Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6Ci0gICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJh
eU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Npbmds
ZXRvbigpCi0gICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIElzQXJyYXkpOwotICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAg
ICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAg
IApAQCAtMjU1LDEzICsyMzUsMTMgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RW
YWx1ZSYgdgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgQ1JBU0goKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWNvbnN0IGNoYXIq
IG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2RlKQorY29uc3QgY2hhciogYXJyYXlUeXBlVG9T
dHJpbmcoQXJyYXk6OlR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAg
ICAgICByZXR1cm4gIlNlbGVjdFVzaW5nUHJlZGljdGlvbnMiOwogICAgIGNhc2UgQXJyYXk6OlVu
cHJvZmlsZWQ6CkBAIC0yNzQsNTYgKzI1NCwxMCBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmco
QXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgogICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXMiOwotICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgICAgIHJldHVybiAiQ29udGlndW91c1RvVGFpbCI7
Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAgICAgICByZXR1cm4g
IkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91czoKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzIjsKLSAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWwiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAg
ICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMiOwotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICAgICAgcmV0dXJuICJQb3Nz
aWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlVG9Ib2xlIjsK
ICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICByZXR1cm4gIlNs
b3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKLSAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAiQXJyYXlXaXRo
QXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hv
bGU6Ci0gICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlIjsKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4g
IkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0
aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6
Ci0gICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUiOwot
ICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKLSAg
ICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0g
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcyI7
Ci0gICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgotICAgICAgICByZXR1cm4gIlRvQ29udGln
dW91cyI7Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAi
VG9BcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToK
LSAgICAgICAgcmV0dXJuICJUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6
OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAiQXJyYXlUb0FycmF5U3RvcmFn
ZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAg
ICByZXR1cm4gIlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZSI7CiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgpAQCAtMzUzLDYgKzI4Nyw1MyBAQCBjb25zdCBjaGFyKiBtb2RlVG9TdHJpbmco
QXJyYXk6Ok1vZGUgbW9kCiAgICAgfQogfQogCitjb25zdCBjaGFyKiBhcnJheUNsYXNzVG9TdHJp
bmcoQXJyYXk6OkNsYXNzIGFycmF5Q2xhc3MpCit7CisgICAgc3dpdGNoIChhcnJheUNsYXNzKSB7
CisgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgIHJldHVybiAiQXJyYXkiOworICAgIGNh
c2UgQXJyYXk6Ok5vbkFycmF5OgorICAgICAgICByZXR1cm4gIk5vbkFycmF5IjsKKyAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5OgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXkiOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0KK30KKworY29u
c3QgY2hhciogYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlvbiBzcGVj
dWxhdGlvbikKK3sKKyAgICBzd2l0Y2ggKHNwZWN1bGF0aW9uKSB7CisgICAgY2FzZSBBcnJheTo6
SW5Cb3VuZHM6CisgICAgICAgIHJldHVybiAiSW5Cb3VuZHMiOworICAgIGNhc2UgQXJyYXk6OlRv
SG9sZToKKyAgICAgICAgcmV0dXJuICJUb0hvbGUiOworICAgIGNhc2UgQXJyYXk6Ok91dE9mQm91
bmRzOgorICAgICAgICByZXR1cm4gIk91dE9mQm91bmRzIjsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gIlVua25vd24hIjsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIGFycmF5Q29udmVy
c2lvblRvU3RyaW5nKEFycmF5OjpDb252ZXJzaW9uIGNvbnZlcnNpb24pCit7CisgICAgc3dpdGNo
IChjb252ZXJzaW9uKSB7CisgICAgY2FzZSBBcnJheTo6QXNJczoKKyAgICAgICAgcmV0dXJuICJB
c0lzIjsKKyAgICBjYXNlIEFycmF5OjpDb252ZXJ0OgorICAgICAgICByZXR1cm4gIkNvbnZlcnQi
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0KK30KKwor
Y29uc3QgY2hhciogQXJyYXlNb2RlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNo
YXIgYnVmZmVyWzI1Nl07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVz
JXMlcyVzIiwgYXJyYXlUeXBlVG9TdHJpbmcodHlwZSgpKSwgYXJyYXlDbGFzc1RvU3RyaW5nKGFy
cmF5Q2xhc3MoKSksIGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhzcGVjdWxhdGlvbigpKSwgYXJy
YXlDb252ZXJzaW9uVG9TdHJpbmcoY29udmVyc2lvbigpKSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJKHJldmlz
aW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDQyICs0NiwxNiBAQCBlbnVtIEFjdGlvbiB7CiAgICAgV3Jp
dGUKIH07CiAKLWVudW0gTW9kZSB7CitlbnVtIFR5cGUgewogICAgIFNlbGVjdFVzaW5nUHJlZGlj
dGlvbnMsIC8vIEltcGxpZXMgdGhhdCB3ZSBuZWVkIHByZWRpY3Rpb25zIHRvIGRlY2lkZS4gV2Ug
d2lsbCBuZXZlciBnZXQgdG8gdGhlIGJhY2tlbmQgaW4gdGhpcyBtb2RlLgogICAgIFVucHJvZmls
ZWQsIC8vIEltcGxpZXMgdGhhdCBhcnJheSBwcm9maWxpbmcgZGlkbid0IHNlZSBhbnl0aGluZy4g
QnV0IHRoYXQgY291bGQgYmUgYmVjYXVzZSB0aGUgb3BlcmFuZHMgZGlkbid0IGNvbXBseSB3aXRo
IGJhc2ljIHR5cGUgYXNzdW1wdGlvbnMgKGJhc2UgaXMgY2VsbCwgcHJvcGVydHkgaXMgaW50KS4g
VGhpcyBlaXRoZXIgYmVjb21lcyBHZW5lcmljIG9yIEZvcmNlRXhpdCBkZXBlbmRpbmcgb24gdmFs
dWUgcHJvZmlsaW5nLgogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdlIGhhdmUgbm8g
aWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxkIGp1c3QgZ2l2
ZSB1cC4KICAgICBHZW5lcmljLAogICAgIFN0cmluZywKICAgICAKLSAgICAvLyBNb2RlcyBvZiBj
b252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBub24gc2lkZS1l
ZmZlY3RpbmcuCiAgICAgQ29udGlndW91cywKLSAgICBDb250aWd1b3VzVG9UYWlsLAotICAgIENv
bnRpZ3VvdXNPdXRPZkJvdW5kcywKLSAgICBBcnJheVdpdGhDb250aWd1b3VzLAotICAgIEFycmF5
V2l0aENvbnRpZ3VvdXNUb1RhaWwsCi0gICAgQXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
LAotICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cywKLSAgICBQb3NzaWJseUFycmF5V2l0
aENvbnRpZ3VvdXNUb1RhaWwsCi0gICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHMsCiAgICAgQXJyYXlTdG9yYWdlLAotICAgIEFycmF5U3RvcmFnZVRvSG9sZSwKICAgICBT
bG93UHV0QXJyYXlTdG9yYWdlLAotICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRzLAotICAgIEFy
cmF5V2l0aEFycmF5U3RvcmFnZSwKLSAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUsCi0g
ICAgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSwKLSAgICBBcnJheVdpdGhBcnJheVN0b3Jh
Z2VPdXRPZkJvdW5kcywKLSAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSwKLSAgICBQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSwKLSAgICBQb3NzaWJseUFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kcywKLSAgICAKLSAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBz
dG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KLSAgICBUb0NvbnRpZ3Vv
dXMsCi0gICAgVG9BcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlUb0FycmF5U3RvcmFnZSwKLSAgICBQ
b3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UsCi0gICAgVG9TbG93UHV0QXJyYXlTdG9yYWdlLAog
ICAgIAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCkBAIC05NCwzMDQgKzY4LDI3NyBA
QCBlbnVtIE1vZGUgewogICAgIEZsb2F0MzJBcnJheSwKICAgICBGbG9hdDY0QXJyYXkKIH07Ci19
IC8vIG5hbWVzcGFjZSBBcnJheQotCi0vLyBIZWxwZXJzIGZvciAnY2FzZScgc3RhdGVtZW50cy4g
Rm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2RlczoiCi0vLyBpcyB0
aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rpbmcgb2ZmIGFs
bCBvZiB0aGUgbW9kZXMgdGhhdAotLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9yYWdlIiBpbiB0
aGVtLgotCi0vLyBGaXJzdDogaGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5nIGNoZWNrcy4K
LSNkZWZpbmUgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29u
dGlndW91czogICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwotI2RlZmluZSBBUlJBWV9XSVRIX0NPTlRJR1VP
VVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwotI2RlZmluZSBBTExfQ09OVElHVU9V
U19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFS
UkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUwotI2RlZmluZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJh
eVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cwotI2RlZmluZSBDT05USUdVT1VTX1RPX1RBSUxf
TU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkNvbnRpZ3VvdXNU
b1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpB
cnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbAotI2RlZmluZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkNv
bnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCi0jZGVm
aW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczog
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLSNkZWZpbmUgQVJSQVlfV0lUSF9B
UlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFycmF5OjpBcnJh
eVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzCi0jZGVmaW5l
IEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVmaW5lIElOX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJh
eTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UKLSNkZWZpbmUg
QVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZQotI2RlZmluZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
OiAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZQotI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMg
ICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOiAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLQotLy8gTmV4dDogaGVscGVycyBmb3Igc2lk
ZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBOT05fQVJSQVlfRUZGRUNURlVMX01PREVTICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OlRvQ29udGlndW91czogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpUb0FycmF5U3Rv
cmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlRvU2xv
d1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFSUkFZX0VGRkVDVEZVTF9NT0RF
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlUb0FycmF5
U3RvcmFnZQotI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgQXJyYXk6OlRvQ29udGlndW91cwotI2RlZmluZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OlRv
QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNl
IEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlCi0jZGVmaW5lIFNM
T1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgIFwKLSAgICBB
cnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RGVUxfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBTExfRUZGRUNURlVMX0NPTlRJ
R1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTCi0KLUFycmF5OjpNb2RlIGZyb21PYnNlcnZlZChBcnJh
eVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKIAotQXJyYXk6Ok1vZGUg
cmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNlLCBTcGVjdWxh
dGVkVHlwZSBpbmRleCk7CitlbnVtIENsYXNzIHsKKyAgICBOb25BcnJheSwKKyAgICBBcnJheSwK
KyAgICBQb3NzaWJseUFycmF5Cit9OwogCi1ib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFj
dFZhbHVlJiwgQXJyYXk6Ok1vZGUpOworZW51bSBTcGVjdWxhdGlvbiB7CisgICAgSW5Cb3VuZHMs
CisgICAgVG9Ib2xlLAorICAgIE91dE9mQm91bmRzCit9OwogCi1jb25zdCBjaGFyKiBtb2RlVG9T
dHJpbmcoQXJyYXk6Ok1vZGUpOworZW51bSBDb252ZXJzaW9uIHsKKyAgICBBc0lzLAorICAgIENv
bnZlcnQKK307Cit9IC8vIG5hbWVzcGFjZSBBcnJheQogCi1pbmxpbmUgYm9vbCBtb2RlVXNlc0J1
dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgotICAgIGNhc2UgQUxMX0FSUkFZX1NU
T1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Citjb25zdCBjaGFy
KiBhcnJheVR5cGVUb1N0cmluZyhBcnJheTo6VHlwZSk7Citjb25zdCBjaGFyKiBhcnJheUNsYXNz
VG9TdHJpbmcoQXJyYXk6OkNsYXNzKTsKK2NvbnN0IGNoYXIqIGFycmF5U3BlY3VsYXRpb25Ub1N0
cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOworY29uc3QgY2hhciogYXJyYXlDb252ZXJzaW9uVG9T
dHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOworCitjbGFzcyBBcnJheU1vZGUgeworcHVibGljOgor
ICAgIEFycmF5TW9kZSgpCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlwZSA9IEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IEFy
cmF5OjpOb25BcnJheTsKKyAgICAgICAgdS5hc0J5dGVzLnNwZWN1bGF0aW9uID0gQXJyYXk6Oklu
Qm91bmRzOworICAgICAgICB1LmFzQnl0ZXMuY29udmVyc2lvbiA9IEFycmF5OjpBc0lzOwogICAg
IH0KLX0KLQotaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUp
Ci17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElH
VU9VU19NT0RFUzoKLSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAg
ICBjYXNlIEFSUkFZX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGV4cGxpY2l0IEFycmF5
TW9kZShBcnJheTo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVzLnR5cGUgPSB0
eXBlOworICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IEFycmF5OjpOb25BcnJheTsKKyAg
ICAgICAgdS5hc0J5dGVzLnNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzOworICAgICAgICB1
LmFzQnl0ZXMuY29udmVyc2lvbiA9IEFycmF5OjpBc0lzOwogICAgIH0KLX0KLQotaW5saW5lIGJv
b2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNo
IChhcnJheU1vZGUpIHsKLSAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAg
IGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9U
T19IT0xFX01PREVTOgotICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBBcnJheU1vZGUoQXJyYXk6OlR5cGUgdHlwZSwgQXJyYXk6OkNsYXNzIGFycmF5
Q2xhc3MsIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbiwgQXJyYXk6OkNvbnZlcnNpb24g
Y29udmVyc2lvbikKKyAgICB7CisgICAgICAgIHUuYXNCeXRlcy50eXBlID0gdHlwZTsKKyAgICAg
ICAgdS5hc0J5dGVzLmFycmF5Q2xhc3MgPSBhcnJheUNsYXNzOworICAgICAgICB1LmFzQnl0ZXMu
c3BlY3VsYXRpb24gPSBzcGVjdWxhdGlvbjsKKyAgICAgICAgdS5hc0J5dGVzLmNvbnZlcnNpb24g
PSBjb252ZXJzaW9uOwogICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNTbG93UHV0QWNjZXNzKEFy
cmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNh
c2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIFNMT1dfUFVUX0VGRkVD
VEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQXJyYXlNb2RlKEFycmF5OjpU
eXBlIHR5cGUsIEFycmF5OjpDbGFzcyBhcnJheUNsYXNzLCBBcnJheTo6Q29udmVyc2lvbiBjb252
ZXJzaW9uKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVzLnR5cGUgPSB0eXBlOworICAgICAgICB1
LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IGFycmF5Q2xhc3M7CisgICAgICAgIHUuYXNCeXRlcy5zcGVj
dWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kczsKKyAgICAgICAgdS5hc0J5dGVzLmNvbnZlcnNpb24g
PSBjb252ZXJzaW9uOwogICAgIH0KLX0KLQotaW5saW5lIGJvb2wgbWF5U3RvcmVUb1RhaWwoQXJy
YXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2Fz
ZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJ
R1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBBcnJheTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
QXJyYXk6OlR5cGU+KHUuYXNCeXRlcy50eXBlKTsgfQorICAgIEFycmF5OjpDbGFzcyBhcnJheUNs
YXNzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6OkNsYXNzPih1LmFzQnl0ZXMu
YXJyYXlDbGFzcyk7IH0KKyAgICBBcnJheTo6U3BlY3VsYXRpb24gc3BlY3VsYXRpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6U3BlY3VsYXRpb24+KHUuYXNCeXRlcy5zcGVj
dWxhdGlvbik7IH0KKyAgICBBcnJheTo6Q29udmVyc2lvbiBjb252ZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6OkNvbnZlcnNpb24+KHUuYXNCeXRlcy5jb252ZXJzaW9u
KTsgfQorICAgIAorICAgIHVuc2lnbmVkIGFzV29yZCgpIGNvbnN0IHsgcmV0dXJuIHUuYXNXb3Jk
OyB9CisgICAgCisgICAgc3RhdGljIEFycmF5TW9kZSBmcm9tV29yZCh1bnNpZ25lZCB3b3JkKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh3b3JkKTsKICAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIG1heVN0b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgot
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgU0xP
V19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9ic2VydmVk
KEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOworICAgIAorICAg
IEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9u
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlKCksIGFycmF5Q2xh
c3MoKSwgc3BlY3VsYXRpb24sIGNvbnZlcnNpb24oKSk7CiAgICAgfQotfQotCi1pbmxpbmUgYm9v
bCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFy
cmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICBBcnJheU1vZGUgd2l0aFNwZWN1bGF0aW9uKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgYm9v
bCBtYWtlU2FmZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU3BlY3VsYXRpb24o
bWFrZVNhZmUgPyBBcnJheTo6T3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUo
KSA/IEFycmF5OjpUb0hvbGUgOiBBcnJheTo6SW5Cb3VuZHMpKTsKICAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIGxlbmd0aE5lZWRzU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAg
cmV0dXJuIG1vZGVJc0pTQXJyYXkoYXJyYXlNb2RlKTsKLX0KLQotaW5saW5lIEFycmF5OjpNb2Rl
IG1vZGVGb3JQdXQoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gQXJyYXk6Okdl
bmVyaWM7CisgICAgCisgICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlwZSBiYXNlLCBT
cGVjdWxhdGVkVHlwZSBpbmRleCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBhbHJlYWR5Q2hlY2tl
ZChBYnN0cmFjdFZhbHVlJikgY29uc3Q7CisgICAgCisgICAgY29uc3QgY2hhciogdG9TdHJpbmco
KSBjb25zdDsKKyAgICAKKyAgICBib29sIHVzZXNCdXR0ZXJmbHkoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0pTQXJyYXkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5
Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJbkJvdW5k
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHM7CisgICAgfQorICAgIAorICAgIGJvb2wgbWF5U3RvcmVUb0hvbGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0luQm91bmRzKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNPdXRPZkJvdW5kcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHM7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTbG93
UHV0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJyYXk6OlNsb3dQ
dXRBcnJheVN0b3JhZ2U7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQ1NFU3RvcmFnZSgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVk
OgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIGNhc2UgQXJyYXk6Okdl
bmVyaWM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0pTQXJyYXkoKTsKKyAgICB9CisgICAgCisgICAgQXJy
YXlNb2RlIG1vZGVGb3JQdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6R2VuZXJpYyk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6R2VuZXJpYyk7CiAjZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYXJyYXlN
b2RlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJheTo6TW9kZSBt
b2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
UHJlZGljdGlvbnM6Ci0gICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKLSAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6Ci0gICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGJvb2wg
aXNTcGVjaWZpYygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICBjYXNlIEFy
cmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLX0K
LQotaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1vZGUpCi17Ci0g
ICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKLSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VP
VVNfTU9ERVM6Ci0gICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBj
YXNlIE5PTl9BUlJBWV9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBib29sIHN1cHBvcnRz
TGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6
OlVucHJvZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgor
ICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgcmV0
dXJuIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLX0KLQotaW5saW5lIGJvb2wg
YmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKLXsKLSAgICBzd2l0
Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgY2FzZSBBcnJh
eTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgot
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjaygpIGNvbnN0CisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2lu
Z1ByZWRpY3Rpb25zOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gY29udmVyc2lvbigpID09IEFycmF5OjpBc0lzOworICAgICAgICB9CiAgICAgfQotfQorICAg
IAorICAgIGJvb2wgZG9lc0NvbnZlcnNpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVydDsKKyAgICB9CisgICAgCisgICAgQXJyYXlN
b2RlcyBhcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAg
ICAgIHJldHVybiBBTExfQVJSQVlfTU9ERVM7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1NoYXBlKENvbnRp
Z3VvdXNTaGFwZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAg
ICAgIHJldHVybiBhcnJheU1vZGVzV2l0aEluZGV4aW5nU2hhcGUoQXJyYXlTdG9yYWdlU2hhcGUp
OworICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAg
cmV0dXJuIGFycmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShTbG93UHV0QXJyYXlTdG9yYWdlU2hh
cGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhO
b25BcnJheSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEFycmF5TW9kZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHlwZSgp
ID09IG90aGVyLnR5cGUoKQorICAgICAgICAgICAgJiYgYXJyYXlDbGFzcygpID09IG90aGVyLmFy
cmF5Q2xhc3MoKQorICAgICAgICAgICAgJiYgc3BlY3VsYXRpb24oKSA9PSBvdGhlci5zcGVjdWxh
dGlvbigpCisgICAgICAgICAgICAmJiBjb252ZXJzaW9uKCkgPT0gb3RoZXIuY29udmVyc2lvbigp
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJyYXlNb2RlJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IEFycmF5TW9kZSh1bnNpZ25lZCB3b3JkKQorICAgIHsK
KyAgICAgICAgdS5hc1dvcmQgPSB3b3JkOworICAgIH0KKyAgICAKKyAgICBBcnJheU1vZGVzIGFy
cmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShJbmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpO
b25BcnJheToKKyAgICAgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hhcGUpOworICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hh
cGUgfCBJc0FycmF5KTsKKyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheToKKyAgICAg
ICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVzKHNoYXBlIHwg
SXNBcnJheSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdW5pb24geworICAgICAgICBz
dHJ1Y3QgeworICAgICAgICAgICAgdWludDhfdCB0eXBlOworICAgICAgICAgICAgdWludDhfdCBh
cnJheUNsYXNzOworICAgICAgICAgICAgdWludDhfdCBzcGVjdWxhdGlvbjsKKyAgICAgICAgICAg
IHVpbnQ4X3QgY29udmVyc2lvbjsKKyAgICAgICAgfSBhc0J5dGVzOworICAgICAgICB1bnNpZ25l
ZCBhc1dvcmQ7CisgICAgfSB1OworfTsKIAotaW5saW5lIGJvb2wgaXNFZmZlY3RmdWwoQXJyYXk6
Ok1vZGUgbW9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKGNvbnN0IEFycmF5
TW9kZSYgYXJyYXlNb2RlKQogewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VG
RkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gYXJyYXlNb2RlLmNhbkNTRVN0b3Jh
Z2UoKTsKIH0KIAotLy8gVGhpcyByZXR1cm5zIHRoZSBzZXQgb2YgYXJyYXkgbW9kZXMgdGhhdCB3
aWxsIHBhc3MgZmlsdGVyaW5nIG9mIGEgQ2hlY2tBcnJheSBvcgotLy8gQXJyYXlpZnkgd2l0aCB0
aGUgZ2l2ZW4gbW9kZS4KLWlubGluZSBBcnJheU1vZGVzIGFycmF5TW9kZXNGb3IoQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlKQorc3RhdGljIGlubGluZSBib29sIGxlbmd0aE5lZWRzU3RvcmFnZShjb25z
dCBBcnJheU1vZGUmIGFycmF5TW9kZSkKIHsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAgIHJldHVybiBBTExfQVJSQVlfTU9ERVM7Ci0g
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9U
YWlsOgotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFy
cmF5OjpUb0NvbnRpZ3VvdXM6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlX
aXRoQ29udGlndW91cyk7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzOgotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoK
LSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoK
LSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUzoKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250
aWd1b3VzKTsKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91
bmRzOgotICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk7Ci0gICAgY2FzZSBBcnJheTo6VG9T
bG93UHV0QXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8
IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICBjYXNl
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKLSAgICBjYXNlIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSk7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAgIGNhc2UgQXJy
YXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheSk7Ci0gICAgfQor
ICAgIHJldHVybiBhcnJheU1vZGUubGVuZ3RoTmVlZHNTdG9yYWdlKCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDYg
KzMyMCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKCkp
OwogICAgIH0KICAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2soKTsKKyAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxG
cmFtZSk7CisgICAgfQorICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2soKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNiwxMyArOTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCk7CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZShBcnJheVBy
b2ZpbGUqIHByb2ZpbGUpCisgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUq
IHByb2ZpbGUpCiAgICAgewogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKTsKLSAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLCBBcnJheTo6UmVhZCwg
ZmFsc2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQocHJvZmlsZSwg
QXJyYXk6OlJlYWQsIGZhbHNlKTsKICAgICB9CiAgICAgCi0gICAgQXJyYXk6Ok1vZGUgZ2V0QXJy
YXlNb2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24g
YWN0aW9uLCBOb2RlSW5kZXggYmFzZSkKKyAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1p
dENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2Rl
SW5kZXggYmFzZSkKICAgICB7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbigpOwogICAgICAgICAKQEAgLTkyNiw5ICs5MjYsOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZSht
X2N1cnJlbnRJbmRleCkKICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsKICAgICAgICAg
Ci0gICAgICAgIEFycmF5OjpNb2RlIHJlc3VsdCA9IGZyb21PYnNlcnZlZChwcm9maWxlLCBhY3Rp
b24sIG1ha2VTYWZlKTsKKyAgICAgICAgQXJyYXlNb2RlIHJlc3VsdCA9IEFycmF5TW9kZTo6ZnJv
bU9ic2VydmVkKHByb2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOwogICAgICAgICAKLSAgICAgICAg
aWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkgJiYgYmVuZWZpdHNGcm9tU3RydWN0
dXJlQ2hlY2socmVzdWx0KSkKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0
dXJlKCkgJiYgcmVzdWx0LmJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKCkpCiAgICAgICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNjQ5LDE2ICsxNjQ5LDExIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5hcnJheVByb2ZpbGUpOwotICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewot
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFy
cmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAg
ICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAg
Tm9kZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDEpKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApAQCAtMTY3NCwxNiAr
MTY2OSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKLSAgICAg
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlVG9Ib2xlOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgotICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXgg
YXJyYXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkp
OworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudElu
c3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUu
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0g
YWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhw
cmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsK
ICAgICAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0NzYsOSAr
MjQ2Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0g
Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVBy
b2ZpbGUsIEFycmF5OjpSZWFkLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGJhc2UpOwogICAgICAgICAgICAgTm9kZUluZGV4IHBy
b3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAg
ICAgTm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5
TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAg
Tm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOwogICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKIAog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC0yNDg3LDcgKzI0Nzcs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNh
c2Ugb3BfcHV0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUsIGJhc2UpOworICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUsIGJhc2UpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0yNDk2LDcgKzI0ODYsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChOb05vZGUpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9w
ZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5
VmFsLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9w
SW5mbygwKSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFs
SXNQdXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlf
U1RPUkFHRV9UT19IT0xFX01PREVTOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpLm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7
Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTY5OCw3ICs2OTMsNyBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGlt
aW5hdGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgYm9v
bCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5
TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7CkBAIC03MjksNyArNzI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1p
bmF0aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICBOb2Rl
SW5kZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXgg
Y2hpbGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBpbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTEyMzQsNyArMTIyOSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdl
KG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5j
YW5DU0VTdG9yYWdlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
Z2V0QnlWYWxMb2FkRWxpbWluYXRpb24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsK
ICAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LCBub2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJyYXlNb2Rl
KCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291
bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBo
YW50b20pOwpAQCAtMTEyLDcgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LCBub2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJyYXlNb2Rl
KCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291
bnQoKSA+PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKEdl
dEJ1dHRlcmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE0ICs4NiwxNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4p
LT5nZXRBcnJheVByb2ZpbGUoCiAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgICAg
ICAgICAgaWYgKGFycmF5UHJvZmlsZSkgewogICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+
Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0g
cmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAgICBmcm9tT2JzZXJ2ZWQoYXJyYXlQ
cm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpLAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9
IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNl
KTsKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAogICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobW9kZVN1cHBvcnRzTGVuZ3RoKGFycmF5TW9kZSkgJiYgYXJyYXlQ
cm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGFy
cmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1
Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlUHRyLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1
Y3R1cmUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZVB0ci0+Y2hpbGQxKCku
aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwpAQCAt
MTAzLDEyICsxMDMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgK
LSAgICAgICAgICAgICAgICAgICAgYXJyYXlNb2RlLAorICAgICAgICAgICAgICAgIGFycmF5TW9k
ZSA9IGFycmF5TW9kZS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KCFtb2RlU3VwcG9ydHNMZW5ndGgoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIGlmICghYXJyYXlN
b2RlLnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBub2RlUHRyLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQobm9k
ZVB0ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwpAQCAtMTI1LDE1ICsxMjQsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKGNhbkNTRVN0b3Jh
Z2Uobm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2Rl
KCkuY2FuQ1NFU3RvcmFnZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBj
YXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAot
ICAgICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS5hcnJheU1vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigp
KSk7CiAgICAgICAgICAgICAKQEAgLTMyMyw4ICszMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogCiAgICAgICAg
ICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUo
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAgICAgICAgICAg
bm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hp
bGQxXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5w
cmVkaWN0aW9uKCkpKTsKICAgICAgICAgICAgIApAQCAtMzMyLDcgKzMyOSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF07CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1
dChub2RlUHRyLT5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+
YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CkBAIC0zNzYsMTYgKzM3MywxNiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5k
ZXggY2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2sp
KEFycmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVl
KQorICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpz
dG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91
bGRHZW5lcmF0ZSA9IHRydWUpCiAgICAgewotICAgICAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMo
YXJyYXlNb2RlKSk7CisgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAg
ICAgICAgCiAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAotICAgICAgICBpZiAoaXNFZmZl
Y3RmdWwoYXJyYXlNb2RlKSkgeworICAgICAgICBpZiAoYXJyYXlNb2RlLmRvZXNDb252ZXJzaW9u
KCkpIHsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSBOb05vZGUpCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5yZWYoaW5kZXgpOwotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwg
Y29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CisgICAgICAgICAg
ICBOb2RlIGFycmF5aWZ5KEFycmF5aWZ5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFz
V29yZCgpKSwgYXJyYXksIGluZGV4KTsKICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBP
bmNlIGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgYnV0dGVyZmx5LgogICAgICAgICAgICAgYXJyYXlp
ZnkucmVmKCk7IC8vIEFuZCB0d2ljZSBiZWNhdXNlIGl0J3MgbXVzdC1nZW5lcmF0ZS4KICAgICAg
ICAgICAgIE5vZGVJbmRleCBhcnJheWlmeUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC0zOTMs
MTUgKzM5MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5k
KG1faW5kZXhJbkJsb2NrLCBhcnJheWlmeUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgQVNTRVJUKHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9y
YWdlKGFycmF5TW9kZSkpOwotICAgICAgICAgICAgQVNTRVJUKG1vZGVVc2VzQnV0dGVyZmx5KGFy
cmF5TW9kZSkpOworICAgICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS5jYW5DU0VTdG9yYWdlKCkp
OworICAgICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpOwogCiAgICAg
ICAgICAgICBpZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXlpZnlJbmRleDsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgTm9kZSBjaGVja0FycmF5KENoZWNrQXJyYXksIGNvZGVPcmln
aW4sIE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIE5vZGUgY2hlY2tBcnJheShD
aGVja0FycmF5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkp
OwogICAgICAgICBjaGVja0FycmF5LnJlZigpOwogICAgICAgICBOb2RlSW5kZXggY2hlY2tBcnJh
eUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrQXJy
YXkpOwpAQCAtNDEzLDEwICs0MTAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHNob3VsZEdl
bmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG1vZGVVc2VzQnV0dGVyZmx5KGFycmF5TW9kZSkpCisgICAgICAgIGlmIChhcnJheU1v
ZGUudXNlc0J1dHRlcmZseSgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICAK
LSAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBj
b2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29k
ZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KSwgc2hvdWxkR2VuZXJh
dGUpOwogICAgIH0KICAgICAKICAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNl
LCBFZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCkBAIC00MjYsNyArNDIzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlUHRyLT5h
cnJheU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUo
KSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAgIE5vZGUg
Zm9yY2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAgICAgICAg
ICBmb3JjZUV4aXQucmVmKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEdyYXBoOjpk
dW1wKGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KICAgICBpZiAobm9kZS5oYXNBcnJheU1vZGUoKSkgewotICAgICAgICBkYXRhTG9nKCIl
cyVzIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbW9kZVRvU3RyaW5nKG5vZGUuYXJyYXlNb2Rl
KCkpKTsKKyAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5v
ZGUuYXJyYXlNb2RlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwog
ICAgIH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsMTQgKzQ5MCwxNCBA
QCBwdWJsaWM6CiAgICAgLy8gLSBhbmQgc28gb24uCiAgICAgYm9vbCBieVZhbElzUHVyZShOb2Rl
JiBub2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
Ci0gICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgotICAgICAgICBjYXNl
IE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BV
VF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHJldHVy
biAhbm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCk7CisgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2Rl
KCkubWF5U3RvcmVUb0hvbGUoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAg
ICAgICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEzMjU4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NjcsMTggKzc2NywxOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKCkKKyAgICBBcnJheU1vZGUgYXJyYXlNb2RlKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxBcnJheTo6TW9kZT4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlOjpmcm9tV29yZChtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIGJvb2wgc2V0QXJyYXlN
b2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIHNldEFycmF5TW9kZShBcnJheU1v
ZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKICAg
ICAgICAgaWYgKHRoaXMtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7CisgICAgICAgIG1fb3BJ
bmZvID0gYXJyYXlNb2RlLmFzV29yZCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4OCw2ICs2ODgsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoIW1f
aml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZSktPnVzZXNBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGludCBhcmd1bWVudHNS
ZWdpc3RlciA9IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CiAg
ICAgICAgICAgICBpZiAoZGlkQ3JlYXRlQXJndW1lbnRzT2JqZWN0LmFkZChpbmxpbmVDYWxsRnJh
bWUpLmlzTmV3RW50cnkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoaXMgY2FsbCBm
cmFtZSBvcHRpbWl6ZWQgb3V0IGFuIGFyZ3VtZW50cyBvYmplY3QgdGhhdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJl
dmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTMsNiArNjUzLDggQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKCFtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihp
bmxpbmVDYWxsRnJhbWUpLT51c2VzQXJndW1lbnRzKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2ppdC5hcmd1bWVudHNS
ZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKGRpZENyZWF0ZUFy
Z3VtZW50c09iamVjdC5hZGQoaW5saW5lQ2FsbEZyYW1lKS5pc05ld0VudHJ5KSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyB0aGlzIGNhbGwgZnJhbWUgb3B0aW1pemVkIG91dCBhbiBhcmd1
bWVudHMgb2JqZWN0IHRoYXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzQsNyArNzQsNiBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGVzLnNpemUo
KTsgaSsrKQogICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKGV4aXQubV92YWx1ZVJlY292ZXJ5
T3ZlcnJpZGVzW2ldLT5vcGVyYW5kLCBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlc1tpXS0+
cmVjb3ZlcnkpOwogCi0gICAgCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSAw
OwogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCkKICAgICAgICAgcmVjb3ZlcnkgPSAmY29k
ZUJsb2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4IC0gMSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NzgsNyArMjU3OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBj
YXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAg
ICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjU5NywyNyArMjU5Nywy
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUzogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewor
ICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5ncHIo
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgICAgICBjYXNlIE9VVF9PRl9CT1VO
RFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VP
VVNfTU9ERVM6IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjY0NywyOCArMjY0NiwyNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzog
ewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2Us
IG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9E
RVM6IHsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKQEAgLTI3NDUsMTAgKzI3NDMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKICAgICAgICAgCi0gICAgICAgIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSA9IG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CisgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKTsKICAgICAgICAg
Ym9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc4OCw5
ICsyNzg2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFs
dWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI4MjEsNyArMjgxOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtYXlT
dG9yZVRvVGFpbChhcnJheU1vZGUpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSW5C
b3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAg
ICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCiAgICAgICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CkBAIC0yODMwLDcgKzI4MjcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkp
CisgICAgICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQogICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZywgdGVtcG9yYXJ5UmVnKTsK
QEAgLTI4NDYsNyArMjg0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAgICAgc3RvcmFnZS51c2Uo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNzKGFycmF5
TW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKSB7CiAg
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywK
QEAgLTI4NTgsOCArMjg1NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNU
RlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBH
UFJSZWcgdmFsdWVSZWcgPSB2YWx1ZS5ncHIoKTsKQEAgLTI4OTEsMTMgKzI4ODgsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotICAgICAgICAg
ICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIGlmICghYXJy
YXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFycmF5Qm91bmRzKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJleW9u
ZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgd3JpdGluZyB0
byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9yLgotICAgICAgICAg
ICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAgICAgICAgICBpZiAoYXJy
YXlNb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdW5jb3Vu
dGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUgYmFzZWxpbmUgSklU
CiAgICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0aGUgaG9sZSBzdG9y
ZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAogICAgICAgICAgICAgICAgIC8vIHByb2Zp
bGluZy4KQEAgLTI5MDYsNyArMjkwMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RIb2xlVmFsdWUgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLmlzU2xvd1B1dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBh
dGgsIHdlIHdvdWxkIGludmVydAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJh
bmNoLiBCdXQgaXQncyBzaW1wbHkgbm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5z
IGlmIHdlJ3JlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRp
bWUuCkBAIC0zMDc5LDcgKzMwNzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAg
ICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIEFTU0VS
VChub2RlLmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKICAgICAgICAgCiAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMzA5Nyw5ICszMDk0LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQ
YXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5n
dGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSk7CkBAIC0zMTE2LDggKzMxMTIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAg
ICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpA
QCAtMzE0OSw3ICszMTQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVBvcDogewotICAgICAgICBBU1NF
UlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2Rl
LmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMzE2MSw5ICszMTU2LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIg
PSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdl
TGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
KSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMigKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIHVuZGVmaW5lZENhc2UgPQpAQCAtMzE5Miw4ICszMTg2LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
OiB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFn
ZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMzI1
ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIxLDkgKzMyMSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNs
ZWFyR2VuZXJhdGlvbkluZm8KICAgICBtX2ZwcnMgPSBSZWdpc3RlckJhbms8RlBSSW5mbz4oKTsK
IH0KIAotY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFy
cmF5RGVzY3JpcHRvcihBcnJheTo6TW9kZSBhcnJheU1vZGUpCitjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5TW9kZSBh
cnJheU1vZGUpCiB7Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CiAgICAgICAgIHJldHVy
biAmbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKQEAgLTM0Nyw1OCArMzQ3LDU3IEBAIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUoKICAgICB9CiB9CiAKLUpJVENvbXBpbGVyOjpKdW1wTGlz
dCBTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVt
cEdQUiwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorSklUQ29tcGlsZXI6Okp1bXBMaXN0IFNwZWN1
bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wR1BSLCBB
cnJheU1vZGUgYXJyYXlNb2RlKQogewogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCByZXN1bHQ7
CiAgICAgCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIE5PTl9BUlJBWV9DT05U
SUdVT1VTX01PREVTOiB7CisgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheSgp
KSB7CisgICAgICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4
aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKAorICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGln
dW91c1NoYXBlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgbV9q
aXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7CiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihDb250aWd1b3VzU2hhcGUpKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19N
T0RFUzogewotICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4
aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoCi0gICAgICAg
ICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihJc0FycmF5IHwgQ29udGlndW91c1NoYXBlKSkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFH
RV9NT0RFUzogeworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0FycmF5
KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNTbG93UHV0KCkpIHsKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hU
ZXN0MzIoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVt
cEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJc0FycmF5KSkpOworICAgICAgICAg
ICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHRlbXBH
UFIpOworICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihBcnJheVN0b3Jh
Z2VTaGFwZSksIHRlbXBHUFIpOworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB0ZW1wR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAg
VHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFnZVNoYXBl
KSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHRl
bXBHUFIpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0z
MihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAg
ICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHRlbXBH
UFIpOwotICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAg
aWYgKGFycmF5TW9kZS5pc1Nsb3dQdXQoKSkgewogICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1
c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSwgdGVtcEdQUik7CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKAogICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHRlbXBHUFIsCiAgICAgICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VT
aGFwZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCi0g
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wR1BSLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZVRvSG9sZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJv
dW5kczogewotICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4
aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoCiAgICAgICAg
ICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXBHUFIsIFRy
dXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAg
cmVzdWx0LmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMigKLSAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6WmVybywgdGVtcEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihJc0FycmF5KSkpOwotICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIo
SW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3Rl
ZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSwgdGVtcEdQUik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoCi0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWJvdmUsIHRlbXBHUFIsCi0gICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKFNs
b3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFnZVNoYXBlKSkpOwotICAgICAgICBi
cmVhazsKLSAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgYnJl
YWs7CkBAIC00MDksMjggKzQwOCwyOCBAQCBKSVRDb21waWxlcjo6SnVtcExpc3QgU3BlY3VsYXRp
dmVKSVQ6Omp1CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm9kZSkK
IHsKLSAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5hcnJheU1vZGUoKSkpOworICAgIEFT
U0VSVChub2RlLmFycmF5TW9kZSgpLmlzU3BlY2lmaWMoKSk7CisgICAgQVNTRVJUKCFub2RlLmFy
cmF5TW9kZSgpLmRvZXNDb252ZXJzaW9uKCkpOwogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiByZXN1bHQgPSB0
eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKICAgICAKLSAgICBpZiAobW9k
ZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJh
eU1vZGUoKSkpIHsKKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBjb25zdCBDbGFzc0lu
Zm8qIGV4cGVjdGVkQ2xhc3NJbmZvID0gMDsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBleHBlY3RlZENsYXNzSW5mbyA9ICZKU1N0cmluZzo6
c19pbmZvOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIE5PTl9BUlJBWV9DT05USUdVT1VTX01P
REVTOgotICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTOgotICAgIGNhc2UgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NU
T1JBR0VfTU9ERVM6IHsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoCkBAIC00NzcsMjkgKzQ3Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJyYXkoTm9kZSYgbm8KIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZSwgR1BSUmVnIGJhc2VSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZykKIHsKLSAgICBBcnJheTo6TW9kZSBkZXNpcmVkQXJyYXlNb2RlOwotICAgIAot
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQXJyYXk6OlRvQ29udGln
dW91czoKLSAgICAgICAgZGVzaXJlZEFycmF5TW9kZSA9IEFycmF5OjpDb250aWd1b3VzOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpUb0FycmF5U3RvcmFnZToKLSAgICAgICAgZGVz
aXJlZEFycmF5TW9kZSA9IEFycmF5OjpBcnJheVN0b3JhZ2U7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgZGVzaXJlZEFycmF5
TW9kZSA9IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICBkZXNpcmVkQXJyYXlNb2Rl
ID0gQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICBkZXNpcmVkQXJy
YXlNb2RlID0gQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgICAgICBkZXNpcmVkQXJy
YXlNb2RlID0gQXJyYXk6OkZvcmNlRXhpdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIEFT
U0VSVChub2RlLmFycmF5TW9kZSgpLmRvZXNDb252ZXJzaW9uKCkpOwogICAgIAogICAgIEdQUlRl
bXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CkBA
IC01MTQsNyArNDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9k
ZQogICAgICAgICAKICAgICAvLyBXZSBjYW4gc2tpcCBhbGwgdGhhdCBjb21lcyBuZXh0IGlmIHdl
IGFscmVhZHkgaGF2ZSBhcnJheSBzdG9yYWdlLgogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXMgPQotICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHRlbXBH
UFIsIGRlc2lyZWRBcnJheU1vZGUpOworICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlN
b2RlKHRlbXBHUFIsIG5vZGUuYXJyYXlNb2RlKCkpOwogICAgICAgICAKICAgICBtX2ppdC5sb2Fk
UHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wR1BSKTsKQEAgLTUyNSw3ICs1MDIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgCiAgICAgLy8gSWYgd2UncmUg
YWxsZWdlZGx5IGNyZWF0aW5nIGNvbnRpZ3VvdXMgc3RvcmFnZSBhbmQgdGhlIGluZGV4IGlzIGJv
Z3VzLCB0aGVuCiAgICAgLy8ganVzdCBkb24ndC4KLSAgICBpZiAobm9kZS5hcnJheU1vZGUoKSA9
PSBBcnJheTo6VG9Db250aWd1b3VzICYmIHByb3BlcnR5UmVnICE9IEludmFsaWRHUFJSZWcpIHsK
KyAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYg
cHJvcGVydHlSZWcgIT0gSW52YWxpZEdQUlJlZykgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAogICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKApAQCAtNTQzLDExICs1MjAsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAgICAgICAKICAgICAvLyBOb3cgY2FsbCBv
dXQgdG8gY3JlYXRlIHRoZSBhcnJheSBzdG9yYWdlLgogICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHRlbXBHUFIpOwotICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOgorICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMsIHRlbXBHUFIsIGJhc2VSZWcpOwog
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVBcnJh
eVN0b3JhZ2UsIHRlbXBHUFIsIGJhc2VSZWcpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgpAQCAtNTcwLDcgKzU0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUm
IG5vZGUKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlR1BSLCBTdHJ1
Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgc3RydWN0dXJlR1BSKTsKICAgICBzcGVjdWxh
dGlvbkNoZWNrKAogICAgICAgICBCYWRJbmRleGluZ1R5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBOb05vZGUsCi0gICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJh
eU1vZGUoc3RydWN0dXJlR1BSLCBkZXNpcmVkQXJyYXlNb2RlKSk7CisgICAgICAgIGp1bXBTbG93
Rm9yVW53YW50ZWRBcnJheU1vZGUoc3RydWN0dXJlR1BSLCBub2RlLmFycmF5TW9kZSgpKSk7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgc3RvcmFnZVJlc3VsdCh0ZW1wR1BSLCBt
X2NvbXBpbGVJbmRleCk7CkBAIC01NzgsMTEgKzU1NiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjphcnJheWlmeShOb2RlJiBub2RlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5v
ZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKG5vZGUuYXJyYXlNb2RlKCkp
KTsKKyAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc1NwZWNpZmljKCkpOwogICAgIAogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgCi0g
ICAgaWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSks
IG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewogICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHRlbXAuZ3ByKCkpOwpAQCAtMTg1MSw3ICsxODI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LCBBcnJheTo6U3RyaW5nKSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5h
bHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKTsKIAogICAgIC8v
IHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNl
cyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKQEAgLTIyNjAsNyArMjIz
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW4KICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7CiAKLSAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpOworICAgIEFTU0VSVChub2RlLmFycmF5TW9k
ZSgpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOwogCiAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKQEAgLTI0MTAsNyArMjM4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRmwKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBBU1NFUlQobW9k
ZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJh
eU1vZGUoKSkpOworICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOwogCiAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwpAQCAtMjQ0Nyw3
ICsyNDI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAg
IAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZVVzZSk7CiAg
ICAgCi0gICAgQVNTRVJUX1VOVVNFRChiYXNlVXNlLCBtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0
ZS5mb3JOb2RlKGJhc2VVc2UpLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgQVNTRVJUX1VOVVNF
RChiYXNlVXNlLCBub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9k
ZShiYXNlVXNlKSkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAg
CkBAIC0zMjMwLDcgKzMyMDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5k
ZXhlZFByCiAgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKICAgICAKLSAgICBzd2l0
Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlw
ZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkp
LCBzdG9yYWdlUmVnKTsKICAgICAgICAgCkBAIC0zMjcwLDcgKzMyNDgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm47CiAgIAotICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBBcnJheTo6QXJndW1lbnRzKSk7CisgICAgQVNTRVJU
KEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkpKTsKICAgICAKICAgICAvLyBUd28gcmVhbGx5IGxhbWUgY2hlY2tz
LgogICAgIHNwZWN1bGF0aW9uQ2hlY2soCkBAIC0zMzI3LDcgKzMzMDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QXJndW1lbnRzCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIEFycmF5OjpBcmd1bWVudHMpKTsKKyAgICBBU1NF
UlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpOwogICAgIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAg
ICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlU291cmNlKCksIE5vTm9kZSwKQEAgLTMzNDUsOCArMzMy
Myw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKIHsKICAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRvciA9IHR5cGVkQXJyYXlEZXNjcmlw
dG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogCi0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7
Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewog
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0zMzU2LDggKzMzMzQsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIGludGVnZXJSZXN1bHQo
cmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFSUkFZX0VGRkVD
VEZVTF9NT0RFUzogeworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3Jh
Z2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
QEAgLTM1NDIsNyArMzUyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9j
YXRlUHIKICAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBtX2NvbXBpbGVJbmRleCk7CiB9
CiAKLUdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChH
UFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYg
dGVtcG9yYXJ5LCBBcnJheU1vZGUgYXJyYXlNb2RlKQogewogICAgIGlmICghcHV0QnlWYWxXaWxs
TmVlZEV4dHJhUmVnaXN0ZXIoYXJyYXlNb2RlKSkKICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJS
ZWc7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxMzI1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNzAsMjggKzIyNzAsMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAg
ICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUmKTsKICAgICAKLSAg
ICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5OjpNb2RlIGFycmF5TW9k
ZSkKKyAgICBib29sIHB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKEFycmF5TW9kZSBhcnJh
eU1vZGUpCiAgICAgewotICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgICAgICAvLyBG
b3IgQXJyYXlTdG9yYWdlLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3Igc3RvcmVzIHRvIGhvbGVz
IGV4Y2VwdCBpZgotICAgICAgICAvLyB3ZSdyZSBpbiBTbG93UHV0IG1vZGUuCi0gICAgICAgIGNh
c2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgotICAgICAgICBjYXNlIE9VVF9PRl9CT1VO
RFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAvLyBGb3IgQ29udGlndW91cywgd2UgbmVlZCBhbiBleHRyYSByZWcgZm9yIGFueSBh
Y2Nlc3MgdGhhdCBtYXkgc3RvcmUKLSAgICAgICAgLy8gdG8gdGhlIHRhaWwuCi0gICAgICAgIGNh
c2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVM6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJl
dHVybiBhcnJheU1vZGUubWF5U3RvcmVUb0hvbGUoKTsKICAgICB9Ci0gICAgR1BSUmVnIHRlbXBv
cmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJyYXk6Ok1vZGUpOworICAg
IEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYsIEFycmF5
TW9kZSk7CiAgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9y
YXJ5JiB0ZW1wb3JhcnksIE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gdGVtcG9y
YXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUuYXJyYXlNb2RlKCkpOwpAQCAt
MjQzMCw5ICsyNDEzLDkgQEAgcHVibGljOgogICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQq
IGZvcndhcmRTcGVjdWxhdGlvbldhdGNocG9pbnQoRXhpdEtpbmQgPSBVbmNvdW50YWJsZVdhdGNo
cG9pbnQpOwogICAgIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQqIHNwZWN1bGF0aW9uV2F0Y2hw
b2ludFdpdGhDb25kaXRpb25hbERpcmVjdGlvbihFeGl0S2luZCwgYm9vbCBpc0ZvcndhcmQpOwog
ICAgIAotICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRv
cihBcnJheTo6TW9kZSk7CisgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJy
YXlEZXNjcmlwdG9yKEFycmF5TW9kZSk7CiAgICAgCi0gICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBl
UmVnLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpOworICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBq
dW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0ZW1wV2l0aEluZGV4aW5nVHlwZVJl
ZywgQXJyYXlNb2RlIGFycmF5TW9kZSk7CiAgICAgdm9pZCBjaGVja0FycmF5KE5vZGUmKTsKICAg
ICB2b2lkIGFycmF5aWZ5KE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
KTsKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171118</attachid>
            <date>2012-10-27 21:17:07 -0700</date>
            <delta_ts>2012-10-27 21:35:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraymode_2.patch</filename>
            <type>text/plain</type>
            <size>113180</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxMi0xMC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6QXJyYXk6Ok1vZGUgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiB0aGUgcHJldmlvdXMgbWFzc2l2
ZSBBcnJheTo6TW9kZSBlbnVtIGludG8gYSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZvdXIKKyAgICAg
ICAgZmllbGRzLCB0aGUgdHlwZSwgd2hldGhlciBpdCdzIGEgSlNBcnJheSwgdGhlIGxldmVsIG9m
IHNwZWN1bGF0aW9uLCBhbmQgdGhlCisgICAgICAgIGtpbmQgb2YgY29udmVyc2lvbiB0byBwZXJm
b3JtLgorICAgICAgICAKKyAgICAgICAgTm8gcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3JhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5TW9kZTo6cmVmaW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjphcnJheVR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlDbGFzc1RvU3RyaW5nKToKKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjphcnJheUNvbnZlcnNpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp0b1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlw
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjphcnJheUNsYXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OnNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpB
cnJheU1vZGU6OmNvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YXNX
b3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21Xb3JkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OndpdGhTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp1c2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc0luQm91bmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1heVN0b3JlVG9Ib2xlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFycmF5TW9kZTo6aXNTbG93UHV0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6bGVuZ3RoTmVl
ZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1vZGVGb3JQdXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6
OkRGRzo6QXJyYXlNb2RlOjpzdXBwb3J0c0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpkb2VzQ29udmVyc2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2Rl
OjphcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFycmF5TW9kZXNXaXRoSW5kZXhp
bmdTaGFwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRF
bWl0Q2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmNoZWNrQXJyYXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50
ZWRBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0Fy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1
bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1w
b3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVl
ZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0x
MC0yNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFQUxfUExB
VEZPUk1fTkFNRSBidWlsZCBzZXR0aW5nIGlzIG5vIGxvbmdlciBuZWVkZWQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24g
MTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODM5LDcgKzgzOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsK
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC04NTksMTggKzg1OSwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgpAQCAtOTI1LDI2ICs5MTksMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKLSAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAg
IGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBj
YXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
QEAgLTEzNzAsMTggKzEzNjEsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgp
KSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxy
ZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBH
ZXRCeVZhbCkgdGhhdCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5
aW5nIHRvIGJlIGNsZXZlciBoZXJlLgotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgor
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQg
bm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBh
cnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTQy
MCwzNSArMTQxMiwyOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rl
cyhhcnJheU1vZGVzRm9yKG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1Ro
YXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKLSAgICAgICAgaWYgKG1v
ZGVBbHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5
TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7Ci0gICAgICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29u
dmVydCk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIC8v
IFN0cmluZ3MgYXJlIHdlaXJkIC0gd2UgbWF5IHNwZWMgZmFpbCBpZiB0aGUgc3RyaW5nIHdhcyBh
IHJvcGUuIFRoYXQgaXMgb2YgY291cnNlCiAgICAgICAgICAgICAvLyBzdHVwaWQsIGFuZCB3ZSBz
aG91bGQgZml4IHRoYXQsIGJ1dCBmb3Igbm93IGxldCdzIGF0IGxlYXN0IGJlIGhvbmVzdCBhYm91
dCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTMyNTgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0g
QXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
YXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDc2LDcg
KzQ3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZhbCBpZiB3ZSBrbm93IHRo
YXQKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMjYgKzMyLDEy
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUFycmF5OjpNb2RlIGZy
b21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBi
b29sIG1ha2VTYWZlKQorQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UHJv
ZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCiB7CiAg
ICAgc3dpdGNoIChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSkgewogICAgIGNhc2UgMDoK
LSAgICAgICAgcmV0dXJuIEFycmF5OjpVbnByb2ZpbGVkOworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpVbnByb2ZpbGVkKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6VG9Db250
aWd1b3VzOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIGNvbnRpZ3Vv
dXMgb3IgYXJyYXkgc3RvcmFnZS4gV2UncmUgbWFraW5nIGEgc3RhdGljIGd1ZXNzIGhlcmUuIElu
IGZ1dHVyZSB3ZSBzaG91bGQgdXNlIGV4aXQgcHJvZmlsaW5nIGZvciB0aGlzLgotICAgICAgICBy
ZXR1cm4gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRP
ZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVy
IHRvIGdvIHRvIGNvbnRpZ3VvdXMgb3IgYXJyYXkgc3RvcmFnZS4gV2UncmUgbWFraW5nIGEgc3Rh
dGljIGd1ZXNzIGhlcmUuIEluIGZ1dHVyZSB3ZSBzaG91bGQgdXNlIGV4aXQgcHJvZmlsaW5nIGZv
ciB0aGlzLgorICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRp
Y3Rpb25zKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToK
LSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6
IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWwgOiBB
cnJheTo6Q29udGlndW91cyk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNvbnRp
Z3VvdXMsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9m
aWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91
cyk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5
OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aENvbnRpZ3VvdXMpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUo
KSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6Q29udGlndW91cywgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3Bl
Y3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOworICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJy
YXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRp
b24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFy
cmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2Fm
ZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5
OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53
aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRo
U3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJh
eTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXk6OlRvQXJyYXlTdG9yYWdl
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpO
b25BcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2Fm
ZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpBcnJh
eVRvQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0
b3JhZ2UsIEFycmF5OjpBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9m
aWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGln
dW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFn
ZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6
UG9zc2libHlBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBt
YWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpX
cml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJyYXk6OlRvQ29udGlndW91czsKLSAgICAgICAgcmV0dXJuIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3VuZHMsIEFycmF5
OjpDb252ZXJ0KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJy
YXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAg
ICAgICAgICAgIHJldHVybiBBcnJheTo6VG9BcnJheVN0b3JhZ2U7Ci0gICAgICAgIHJldHVybiBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3Vu
ZHMsIEFycmF5OjpDb252ZXJ0KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwg
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2Ug
YXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgog
ICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OlRvU2xvd1B1
dEFycmF5U3RvcmFnZTsKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOworICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3VuZHMsIEFycmF5OjpDb252ZXJ0
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgaXMgcG9zc2li
bHkgYSBraW5kIG9mIGFycmF5IGZvciB3aGljaCwgdGhvdWdoIHRoZXJlIGlzIG5vCiAgICAgICAg
IC8vIHVzZWZ1bCBkYXRhIGluIHRoZSBhcnJheSBwcm9maWxlLCB3ZSBtYXkgYmUgYWJsZSB0byBl
eHRyYWN0IHVzZWZ1bCBkYXRhIGZyb20KICAgICAgICAgLy8gdGhlIHZhbHVlIHByb2ZpbGVzIG9m
IHRoZSBpbnB1dHMuIEhlbmNlLCB3ZSBsZWF2ZSBpdCBhcyB1bmRlY2lkZWQsIGFuZCBsZXQKICAg
ICAgICAgLy8gdGhlIHByZWRpY3Rpb25zIHByb3BhZ2F0b3IgZGVjaWRlIGxhdGVyLgotICAgICAg
ICByZXR1cm4gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgIH0KIH0KIAotQXJy
YXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSwgU3BlY3VsYXRl
ZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpCitBcnJheU1vZGUgQXJyYXlNb2RlOjpy
ZWZpbmUoU3BlY3VsYXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKCFiYXNlIHx8ICFpbmRleCkgewogICAgICAgICAvLyBJdCBjYW4gYmUgdGhhdCB3
ZSBoYWQgYSBsZWdpdGltYXRlIGFycmF5TW9kZSBidXQgbm8gaW5jb21pbmcgcHJlZGljdGlvbnMu
IFRoYXQnbGwKICAgICAgICAgLy8gaGFwcGVuIGlmIHdlIGlubGluZWQgY29kZSBiYXNlZCBvbiwg
c2F5LCBhIGdsb2JhbCB2YXJpYWJsZSB3YXRjaHBvaW50LCBidXQgbGF0ZXIKICAgICAgICAgLy8g
cmVhbGl6ZWQgdGhhdCB0aGUgY2FsbHNpdGUgY291bGQgbm90IGhhdmUgcG9zc2libHkgZXhlY3V0
ZWQuIEl0IG1heSBiZSB3b3J0aHdoaWxlCiAgICAgICAgIC8vIHRvIGZpeCB0aGF0LCBidXQgZm9y
IG5vdyBJJ20gbGVhdmluZyBpdCBhcy1pcy4KLSAgICAgICAgcmV0dXJuIEFycmF5OjpGb3JjZUV4
aXQ7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkZvcmNlRXhpdCk7CiAgICAgfQog
ICAgIAogICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgCi0gICAgaWYgKGFycmF5TW9kZSA9
PSBBcnJheTo6VW5wcm9maWxlZCkgeworICAgIGlmICh0eXBlKCkgPT0gQXJyYXk6OlVucHJvZmls
ZWQpIHsKICAgICAgICAgLy8gSWYgdGhlIGluZGV4aW5nIHR5cGUgd2Fzbid0IHJlY29yZGVkIGlu
IHRoZSBhcnJheSBwcm9maWxlIGJ1dCB0aGUgdmFsdWVzIGFyZQogICAgICAgICAvLyBiYXNlPWNl
bGwgcHJvcGVydHk9aW50LCB0aGVuIHdlIGtub3cgdGhhdCB0aGlzIGFjY2VzcyBkaWRuJ3QgZXhl
Y3V0ZS4KLSAgICAgICAgcmV0dXJuIEFycmF5OjpGb3JjZUV4aXQ7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OkZvcmNlRXhpdCk7CiAgICAgfQogICAgIAotICAgIGlmIChhcnJheU1v
ZGUgIT0gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpCi0gICAgICAgIHJldHVybiBhcnJh
eU1vZGU7CisgICAgaWYgKHR5cGUoKSAhPSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucykK
KyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIAogICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9u
KGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6U3RyaW5nKTsKICAgICAKICAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxh
dGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7CisgICAgICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cyk7CiAgICAgCiAgICAgaWYgKGlzSW50OEFy
cmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6SW50OEFycmF5Owor
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpJbnQ4QXJyYXkpOwogICAgIAogICAgIGlm
IChpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpJ
bnQxNkFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpJbnQxNkFycmF5KTsK
ICAgICAKICAgICBpZiAoaXNJbnQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJl
dHVybiBBcnJheTo6SW50MzJBcnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
SW50MzJBcnJheSk7CiAgICAgCiAgICAgaWYgKGlzVWludDhBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQotICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OlVpbnQ4QXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQ4Q2xhbXBlZEFy
cmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6VWludDhDbGFtcGVk
QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
KTsKICAgICAKICAgICBpZiAoaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAg
ICByZXR1cm4gQXJyYXk6OlVpbnQxNkFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpVaW50MTZBcnJheSk7CiAgICAgCiAgICAgaWYgKGlzVWludDMyQXJyYXlTcGVjdWxhdGlv
bihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50MzJBcnJheTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6VWludDMyQXJyYXkpOwogICAgIAogICAgIGlmIChpc0Zsb2F0
MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0MzJB
cnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RmxvYXQzMkFycmF5KTsKICAg
ICAKICAgICBpZiAoaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0
dXJuIEFycmF5OjpGbG9hdDY0QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6
OkZsb2F0NjRBcnJheSk7CiAgICAgCi0gICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwogfQogCi1ib29sIG1vZGVBbHJlYWR5Q2hl
Y2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorYm9vbCBB
cnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25zdAogewot
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCkBAIC0xNjIs
NjQgKzE2Miw0NCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAg
ICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAg
IAogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpUb0NvbnRp
Z3VvdXM6CisgICAgICAgIGlmIChhcnJheUNsYXNzKCkgPT0gQXJyYXk6OkFycmF5KSB7CisgICAg
ICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2Rlcywg
YXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXModmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQorICAg
ICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYXJy
YXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0NvbnRp
Z3VvdXModmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
LSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICAgICAgaWYgKGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhDb250aWd1b3VzKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAg
ICAmJiBoYXNDb250aWd1b3VzKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKLQogICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VU
b0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpU
b0FycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3Jh
Z2U6CisgICAgICAgIGlmIChhcnJheUNsYXNzKCkgPT0gQXJyYXk6OkFycmF5KSB7CisgICAgICAg
ICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNB
cnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkp
CisgICAgICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICB9CiAgICAgICAgIGlm
IChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYm
IGhhc0Zhc3RBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xl
dG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
ICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgeworICAgICAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IElzQXJyYXkpOworICAgICAgICB9CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAg
ICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOgotICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGlm
IChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
Ci0gICAgICAgICAgICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICYmICh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkg
JiBJc0FycmF5KTsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZToKLSAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5t
X2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSXNBcnJheSk7Ci0gICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAg
ICAgICAgCkBAIC0yNTUsMTMgKzIzNSwxMyBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0
cmFjdFZhbHVlJiB2CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBDUkFTSCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY29uc3Qg
Y2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZGUpCitjb25zdCBjaGFyKiBhcnJheVR5
cGVUb1N0cmluZyhBcnJheTo6VHlwZSB0eXBlKQogewotICAgIHN3aXRjaCAobW9kZSkgeworICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6
CiAgICAgICAgIHJldHVybiAiU2VsZWN0VXNpbmdQcmVkaWN0aW9ucyI7CiAgICAgY2FzZSBBcnJh
eTo6VW5wcm9maWxlZDoKQEAgLTI3NCw1NiArMjU0LDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0
cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJTdHJpbmciOwogICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7Ci0gICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKLSAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9U
YWlsIjsKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJl
dHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOwotICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgICAgIHJldHVybiAiQXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRP
ZkJvdW5kcyI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgot
ICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7Ci0gICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgICAgICByZXR1cm4g
IlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7Ci0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiUG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZToKLSAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VUb0hv
bGUiOwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVy
biAiU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJBcnJh
eVdpdGhBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZVRvSG9sZToKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUiOwot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJl
dHVybiAiQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiQXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZToKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
OgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzIjsKLSAgICBjYXNlIEFycmF5OjpUb0NvbnRpZ3VvdXM6Ci0gICAgICAgIHJldHVybiAiVG9D
b250aWd1b3VzIjsKLSAgICBjYXNlIEFycmF5OjpUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0
dXJuICJUb0FycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICByZXR1cm4gIlRvU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBB
cnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJBcnJheVRvQXJyYXlT
dG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6Ci0g
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CkBAIC0zNTMsNiArMjg3LDUzIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0
cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICB9CiB9CiAKK2NvbnN0IGNoYXIqIGFycmF5Q2xhc3NU
b1N0cmluZyhBcnJheTo6Q2xhc3MgYXJyYXlDbGFzcykKK3sKKyAgICBzd2l0Y2ggKGFycmF5Q2xh
c3MpIHsKKyAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgcmV0dXJuICJBcnJheSI7Cisg
ICAgY2FzZSBBcnJheTo6Tm9uQXJyYXk6CisgICAgICAgIHJldHVybiAiTm9uQXJyYXkiOworICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXk6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJh
eSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7CisgICAgfQorfQor
Citjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJyYXk6OlNwZWN1bGF0aW9u
IHNwZWN1bGF0aW9uKQoreworICAgIHN3aXRjaCAoc3BlY3VsYXRpb24pIHsKKyAgICBjYXNlIEFy
cmF5OjpJbkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJJbkJvdW5kcyI7CisgICAgY2FzZSBBcnJh
eTo6VG9Ib2xlOgorICAgICAgICByZXR1cm4gIlRvSG9sZSI7CisgICAgY2FzZSBBcnJheTo6T3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiT3V0T2ZCb3VuZHMiOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0KK30KKworY29uc3QgY2hhciogYXJyYXlD
b252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24gY29udmVyc2lvbikKK3sKKyAgICBz
d2l0Y2ggKGNvbnZlcnNpb24pIHsKKyAgICBjYXNlIEFycmF5OjpBc0lzOgorICAgICAgICByZXR1
cm4gIkFzSXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnZlcnQ6CisgICAgICAgIHJldHVybiAiQ29u
dmVydCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7CisgICAgfQor
fQorCitjb25zdCBjaGFyKiBBcnJheU1vZGU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBzdGF0
aWMgY2hhciBidWZmZXJbMjU2XTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp
LCAiJXMlcyVzJXMiLCBhcnJheVR5cGVUb1N0cmluZyh0eXBlKCkpLCBhcnJheUNsYXNzVG9TdHJp
bmcoYXJyYXlDbGFzcygpKSwgYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKHNwZWN1bGF0aW9uKCkp
LCBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhjb252ZXJzaW9uKCkpKTsKKyAgICByZXR1cm4gYnVm
ZmVyOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
cmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNDIgKzQ2LDE2IEBAIGVudW0gQWN0aW9uIHsKICAg
ICBXcml0ZQogfTsKIAotZW51bSBNb2RlIHsKK2VudW0gVHlwZSB7CiAgICAgU2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucywgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlvbnMgdG8gZGVjaWRl
LiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1vZGUuCiAgICAgVW5w
cm9maWxlZCwgLy8gSW1wbGllcyB0aGF0IGFycmF5IHByb2ZpbGluZyBkaWRuJ3Qgc2VlIGFueXRo
aW5nLiBCdXQgdGhhdCBjb3VsZCBiZSBiZWNhdXNlIHRoZSBvcGVyYW5kcyBkaWRuJ3QgY29tcGx5
IHdpdGggYmFzaWMgdHlwZSBhc3N1bXB0aW9ucyAoYmFzZSBpcyBjZWxsLCBwcm9wZXJ0eSBpcyBp
bnQpLiBUaGlzIGVpdGhlciBiZWNvbWVzIEdlbmVyaWMgb3IgRm9yY2VFeGl0IGRlcGVuZGluZyBv
biB2YWx1ZSBwcm9maWxpbmcuCiAgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2
ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgogICAgIEdlbmVyaWMsCiAgICAgU3RyaW5nLAogICAgIAotICAgIC8vIE1vZGVz
IG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIG5vbiBz
aWRlLWVmZmVjdGluZy4KICAgICBDb250aWd1b3VzLAotICAgIENvbnRpZ3VvdXNUb1RhaWwsCi0g
ICAgQ29udGlndW91c091dE9mQm91bmRzLAotICAgIEFycmF5V2l0aENvbnRpZ3VvdXMsCi0gICAg
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKLSAgICBBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHMsCi0gICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzLAotICAgIFBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCwKLSAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlTdG9yYWdlVG9Ib2xlLAog
ICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCi0g
ICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAotICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZSwKLSAgICBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlLAotICAgIEFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzLAotICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAot
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlLAotICAgIFBvc3NpYmx5QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSwKLSAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzLAotICAgIAotICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRl
eGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIHNpZGUtZWZmZWN0aW5nLgotICAgIFRvQ29u
dGlndW91cywKLSAgICBUb0FycmF5U3RvcmFnZSwKLSAgICBBcnJheVRvQXJyYXlTdG9yYWdlLAot
ICAgIFBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZSwKLSAgICBUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2UsCiAgICAgCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTk0LDMwNCArNjgs
Mjc3IEBAIGVudW0gTW9kZSB7CiAgICAgRmxvYXQzMkFycmF5LAogICAgIEZsb2F0NjRBcnJheQog
fTsKLX0gLy8gbmFtZXNwYWNlIEFycmF5Ci0KLS8vIEhlbHBlcnMgZm9yICdjYXNlJyBzdGF0ZW1l
bnRzLiBGb3IgZXhhbXBsZSwgc2F5aW5nICJjYXNlIEFsbEFycmF5U3RvcmFnZU1vZGVzOiIKLS8v
IGlzIHRoZSBzYW1lIGFzIGhhdmluZyBtdWx0aXBsZSBjYXNlIHN0YXRlbWVudHMgbGlzdGluZyBv
ZmYgYWxsIG9mIHRoZSBtb2RlcyB0aGF0Ci0vLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2Ui
IGluIHRoZW0uCi0KLS8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hl
Y2tzLgotI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCi0jZGVmaW5lIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCi0jZGVmaW5lIEFMTF9DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOT05fQVJS
QVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNh
c2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCi0jZGVmaW5lIElOX0JPVU5EU19DT05USUdV
T1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6Q29udGlndW91
czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCi0jZGVmaW5lIENPTlRJR1VPVVNfVE9f
VEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6Q29udGln
dW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCi0jZGVmaW5lIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJh
eTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMK
LSNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICBcCi0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwotI2RlZmluZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLSNk
ZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUg
SU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQotI2Rl
ZmluZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
VG9Ib2xlCi0jZGVmaW5lIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwotCi0vLyBOZXh0OiBoZWxwZXJzIGZv
ciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIE5PTl9BUlJBWV9FRkZFQ1RGVUxfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6VG9Db250aWd1b3VzOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlRvQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6
VG9TbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UKLSNkZWZpbmUgQVJSQVlfRUZGRUNURlVM
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFycmF5OjpBcnJheVRv
QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6VG9Db250aWd1b3VzCi0jZGVmaW5lIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJh
eTo6VG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UKLSNkZWZp
bmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAot
ICAgIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFMTF9FRkZFQ1RGVUxf
Q09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMKLQotQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVk
KEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCi1BcnJheTo6
TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNw
ZWN1bGF0ZWRUeXBlIGluZGV4KTsKK2VudW0gQ2xhc3MgeworICAgIE5vbkFycmF5LAorICAgIEFy
cmF5LAorICAgIFBvc3NpYmx5QXJyYXkKK307CiAKLWJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFi
c3RyYWN0VmFsdWUmLCBBcnJheTo6TW9kZSk7CitlbnVtIFNwZWN1bGF0aW9uIHsKKyAgICBJbkJv
dW5kcywKKyAgICBUb0hvbGUsCisgICAgT3V0T2ZCb3VuZHMKK307CiAKLWNvbnN0IGNoYXIqIG1v
ZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CitlbnVtIENvbnZlcnNpb24geworICAgIEFzSXMsCisg
ICAgQ29udmVydAorfTsKK30gLy8gbmFtZXNwYWNlIEFycmF5CiAKLWlubGluZSBib29sIG1vZGVV
c2VzQnV0dGVyZmx5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgewotICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK2NvbnN0
IGNoYXIqIGFycmF5VHlwZVRvU3RyaW5nKEFycmF5OjpUeXBlKTsKK2NvbnN0IGNoYXIqIGFycmF5
Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2xhc3MpOworY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlv
blRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlvbik7Citjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNp
b25Ub1N0cmluZyhBcnJheTo6Q29udmVyc2lvbik7CisKK2NsYXNzIEFycmF5TW9kZSB7CitwdWJs
aWM6CisgICAgQXJyYXlNb2RlKCkKKyAgICB7CisgICAgICAgIHUuYXNCeXRlcy50eXBlID0gQXJy
YXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgIHUuYXNCeXRlcy5hcnJheUNsYXNz
ID0gQXJyYXk6Ok5vbkFycmF5OworICAgICAgICB1LmFzQnl0ZXMuc3BlY3VsYXRpb24gPSBBcnJh
eTo6SW5Cb3VuZHM7CisgICAgICAgIHUuYXNCeXRlcy5jb252ZXJzaW9uID0gQXJyYXk6OkFzSXM7
CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgIGNhc2UgQVJSQVlfRUZGRUNURlVMX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZXhwbGljaXQg
QXJyYXlNb2RlKEFycmF5OjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlw
ZSA9IHR5cGU7CisgICAgICAgIHUuYXNCeXRlcy5hcnJheUNsYXNzID0gQXJyYXk6Ok5vbkFycmF5
OworICAgICAgICB1LmFzQnl0ZXMuc3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHM7CisgICAg
ICAgIHUuYXNCeXRlcy5jb252ZXJzaW9uID0gQXJyYXk6OkFzSXM7CiAgICAgfQotfQotCi1pbmxp
bmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
Ci0gICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6Ci0gICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEFycmF5TW9kZShBcnJheTo6VHlwZSB0eXBlLCBBcnJheTo6Q2xhc3Mg
YXJyYXlDbGFzcywgQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uLCBBcnJheTo6Q29udmVy
c2lvbiBjb252ZXJzaW9uKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVzLnR5cGUgPSB0eXBlOwor
ICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IGFycmF5Q2xhc3M7CisgICAgICAgIHUuYXNC
eXRlcy5zcGVjdWxhdGlvbiA9IHNwZWN1bGF0aW9uOworICAgICAgICB1LmFzQnl0ZXMuY29udmVy
c2lvbiA9IGNvbnZlcnNpb247CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc1Nsb3dQdXRBY2Nl
c3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgU0xPV19QVVRf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBBcnJheU1vZGUoQXJy
YXk6OlR5cGUgdHlwZSwgQXJyYXk6OkNsYXNzIGFycmF5Q2xhc3MsIEFycmF5OjpDb252ZXJzaW9u
IGNvbnZlcnNpb24pCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlwZSA9IHR5cGU7CisgICAg
ICAgIHUuYXNCeXRlcy5hcnJheUNsYXNzID0gYXJyYXlDbGFzczsKKyAgICAgICAgdS5hc0J5dGVz
LnNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzOworICAgICAgICB1LmFzQnl0ZXMuY29udmVy
c2lvbiA9IGNvbnZlcnNpb247CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtYXlTdG9yZVRvVGFp
bChBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAg
ICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKLSAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RF
UzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEFycmF5OjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxBcnJheTo6VHlwZT4odS5hc0J5dGVzLnR5cGUpOyB9CisgICAgQXJyYXk6OkNsYXNzIGFy
cmF5Q2xhc3MoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6Q2xhc3M+KHUuYXNC
eXRlcy5hcnJheUNsYXNzKTsgfQorICAgIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFycmF5OjpTcGVjdWxhdGlvbj4odS5hc0J5dGVz
LnNwZWN1bGF0aW9uKTsgfQorICAgIEFycmF5OjpDb252ZXJzaW9uIGNvbnZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6Q29udmVyc2lvbj4odS5hc0J5dGVzLmNvbnZl
cnNpb24pOyB9CisgICAgCisgICAgdW5zaWduZWQgYXNXb3JkKCkgY29uc3QgeyByZXR1cm4gdS5h
c1dvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgQXJyYXlNb2RlIGZyb21Xb3JkKHVuc2lnbmVkIHdv
cmQpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHdvcmQpOwogICAgIH0KLX0KLQot
aW5saW5lIGJvb2wgbWF5U3RvcmVUb0hvbGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9E
RVM6Ci0gICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2Fz
ZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3RhdGljIEFycmF5TW9kZSBmcm9tT2Jz
ZXJ2ZWQoQXJyYXlQcm9maWxlKiwgQXJyYXk6OkFjdGlvbiwgYm9vbCBtYWtlU2FmZSk7CisgICAg
CisgICAgQXJyYXlNb2RlIHdpdGhTcGVjdWxhdGlvbihBcnJheTo6U3BlY3VsYXRpb24gc3BlY3Vs
YXRpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUoKSwgYXJy
YXlDbGFzcygpLCBzcGVjdWxhdGlvbiwgY29udmVyc2lvbigpKTsKICAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
LSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
LSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24oQXJyYXlQcm9maWxlKiBwcm9maWxl
LCBib29sIG1ha2VTYWZlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTcGVjdWxh
dGlvbihtYWtlU2FmZSA/IEFycmF5OjpPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OlRvSG9sZSA6IEFycmF5OjpJbkJvdW5kcykpOwogICAgIH0KLX0KLQot
aW5saW5lIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsK
LSAgICByZXR1cm4gbW9kZUlzSlNBcnJheShhcnJheU1vZGUpOwotfQotCi1pbmxpbmUgQXJyYXk6
Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBBcnJh
eTo6R2VuZXJpYzsKKyAgICAKKyAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJh
c2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KSBjb25zdDsKKyAgICAKKyAgICBib29sIGFscmVhZHlD
aGVja2VkKEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBjaGFyKiB0b1N0
cmluZygpIGNvbnN0OworICAgIAorICAgIGJvb2wgdXNlc0J1dHRlcmZseSgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBib29sIGlzSlNBcnJheSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
YXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0lu
Qm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFy
cmF5OjpJbkJvdW5kczsKKyAgICB9CisgICAgCisgICAgYm9vbCBtYXlTdG9yZVRvSG9sZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzSW5Cb3VuZHMoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc091dE9mQm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kczsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1Nsb3dQdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5DU0VTdG9yYWdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJv
ZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBsZW5ndGhOZWVkc1N0b3JhZ2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheSgpOworICAgIH0KKyAgICAKKyAg
ICBBcnJheU1vZGUgbW9kZUZvclB1dCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpHZW5lcmljKTsKICNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBh
cnJheU1vZGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KICAgICB9Ci19Ci0KLWlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpN
b2RlIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczoKLSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
Ym9vbCBpc1NwZWNpZmljKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAg
fQotfQotCi1pbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkK
LXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRp
Y3Rpb25zOgotICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Ci0gICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgY2FzZSBOT05fQVJSQVlfQ09O
VElHVU9VU19NT0RFUzoKLSAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgot
ICAgIGNhc2UgTk9OX0FSUkFZX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGJvb2wgc3Vw
cG9ydHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBB
cnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotfQotCi1pbmxpbmUg
Ym9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBtb2RlKQotewotICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICBjYXNl
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgIGNhc2UgQXJyYXk6OlVucHJvZmls
ZWQ6Ci0gICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVj
dFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJzaW9uKCkgPT0gQXJyYXk6OkFzSXM7CisgICAgICAgIH0KICAgICB9Ci19
CisgICAgCisgICAgYm9vbCBkb2VzQ29udmVyc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0OworICAgIH0KKyAgICAKKyAgICBB
cnJheU1vZGVzIGFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpIGNvbnN0CisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAg
ICAgICAgICAgcmV0dXJuIEFMTF9BUlJBWV9NT0RFUzsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKKyAgICAgICAgICAgIHJldHVybiBhcnJheU1vZGVzV2l0aEluZGV4aW5nU2hhcGUo
Q29udGlndW91c1NoYXBlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShBcnJheVN0b3JhZ2VT
aGFwZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICByZXR1cm4gYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1NoYXBlKFNsb3dQdXRBcnJheVN0b3Jh
Z2VTaGFwZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gYXNBcnJheU1v
ZGVzKE5vbkFycmF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gb3RoZXIudHlwZSgpCisgICAgICAgICAgICAmJiBhcnJheUNsYXNzKCkgPT0gb3Ro
ZXIuYXJyYXlDbGFzcygpCisgICAgICAgICAgICAmJiBzcGVjdWxhdGlvbigpID09IG90aGVyLnNw
ZWN1bGF0aW9uKCkKKyAgICAgICAgICAgICYmIGNvbnZlcnNpb24oKSA9PSBvdGhlci5jb252ZXJz
aW9uKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcnJheU1vZGUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQXJyYXlNb2RlKHVuc2lnbmVkIHdvcmQpCisg
ICAgeworICAgICAgICB1LmFzV29yZCA9IHdvcmQ7CisgICAgfQorICAgIAorICAgIEFycmF5TW9k
ZXMgYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1NoYXBlKEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6Ok5vbkFycmF5OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzaGFwZSk7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2Rl
cyhzaGFwZSB8IElzQXJyYXkpOworICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5Ogor
ICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzaGFwZSkgfCBhc0FycmF5TW9kZXMoc2hh
cGUgfCBJc0FycmF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB1bmlvbiB7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50OF90IHR5cGU7CisgICAgICAgICAgICB1aW50
OF90IGFycmF5Q2xhc3M7CisgICAgICAgICAgICB1aW50OF90IHNwZWN1bGF0aW9uOworICAgICAg
ICAgICAgdWludDhfdCBjb252ZXJzaW9uOworICAgICAgICB9IGFzQnl0ZXM7CisgICAgICAgIHVu
c2lnbmVkIGFzV29yZDsKKyAgICB9IHU7Cit9OwogCi1pbmxpbmUgYm9vbCBpc0VmZmVjdGZ1bChB
cnJheTo6TW9kZSBtb2RlKQorc3RhdGljIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoY29uc3Qg
QXJyYXlNb2RlJiBhcnJheU1vZGUpCiB7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBB
TExfRUZGRUNURlVMX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBhcnJheU1vZGUuY2FuQ1NF
U3RvcmFnZSgpOwogfQogCi0vLyBUaGlzIHJldHVybnMgdGhlIHNldCBvZiBhcnJheSBtb2RlcyB0
aGF0IHdpbGwgcGFzcyBmaWx0ZXJpbmcgb2YgYSBDaGVja0FycmF5IG9yCi0vLyBBcnJheWlmeSB3
aXRoIHRoZSBnaXZlbiBtb2RlLgotaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0ZvcihBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdl
KGNvbnN0IEFycmF5TW9kZSYgYXJyYXlNb2RlKQogewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
Ci0gICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgcmV0dXJuIEFMTF9BUlJBWV9NT0RF
UzsKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAgIGNh
c2UgQXJyYXk6OlRvQ29udGlndW91czoKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhDb250aWd1b3VzKTsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENv
bnRpZ3VvdXM6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9U
YWlsOgotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMp
IHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgIGNhc2UgQVJSQVlfV0lU
SF9DT05USUdVT1VTX01PREVTOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0
aENvbnRpZ3VvdXMpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVy
biBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5
OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0g
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5KTsKLSAg
ICB9CisgICAgcmV0dXJuIGFycmF5TW9kZS5sZW5ndGhOZWVkc1N0b3JhZ2UoKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDYsMTMgKzkwNiwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlv
bihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAgICAK
LSAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQorICAg
IEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQogICAgIHsKICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVy
biBmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7
CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3Mo
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZUluZGV4IGJh
c2UpCisgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoQXJyYXlQcm9maWxl
KiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZUluZGV4IGJhc2UpCiAgICAgewog
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICAgICAgICAgCkBA
IC05MjYsOSArOTI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdXRPZkJvdW5kcyk7CiAgICAgICAgIAotICAgICAgICBBcnJheTo6TW9k
ZSByZXN1bHQgPSBmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgYWN0aW9uLCBtYWtlU2FmZSk7CisgICAg
ICAgIEFycmF5TW9kZSByZXN1bHQgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChwcm9maWxlLCBh
Y3Rpb24sIG1ha2VTYWZlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZp
bml0ZVN0cnVjdHVyZSgpICYmIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKHJlc3VsdCkpCisg
ICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpICYmIHJlc3VsdC5iZW5l
Zml0c0Zyb21TdHJ1Y3R1cmVDaGVjaygpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVk
U3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMTY0OSwxNiArMTY0OSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJh
eU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
KTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2gg
PSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkp
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICAg
ICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFy
cmF5UHVzaCk7CiAgICAgICAgICAgICAKQEAgLTE2NzQsMTYgKzE2NjksMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczogewotICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFw
aChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKKyAgICAgICAgQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFycmF5
UHJvZmlsZSk7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3As
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CiAgICAgICAgICAgICBpZiAodXNl
c1Jlc3VsdCkKICAgICAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDc2LDkgKzI0NjYsOSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRD
aGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwg
YmFzZSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5k
RW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpS
ZWFkLCBiYXNlKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZh
bCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9ieV92YWwpOwpAQCAtMjQ4Nyw3ICsyNDc3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwogCi0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJh
eU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwg
QXJyYXk6OldyaXRlLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBn
ZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZSwgQXJyYXk6OldyaXRlLCBiYXNlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwpAQCAtMjQ5Niw3ICsyNDg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwog
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoTm9Ob2RlKTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZSksIE9wSW5mbygwKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzYsMTMgKzE3Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJ
TF9NT0RFUzoKLSAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RF
UzoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC02OTgsNyArNjkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0
aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAg
Tm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtNzI5LDcgKzcyNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBOb2RlSW5k
ZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hp
bGQxLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CkBAIC0xMjM0LDcgKzEyMjksNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5
VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7Ci0gICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0
aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tBcnJheTogewotICAgICAgICAgICAgICAgIGlmICghbW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKQEAgLTExMiw3ICsx
MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICAgICAgICAgIGlmICghbW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPj0gMSk7CiAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRCdXR0ZXJmbHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAx
MzI1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAog
ICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnM7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpIHsKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQs
IGZhbHNlKSwKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNl
cnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1v
ZGVTdXBwb3J0c0xlbmd0aChhcnJheU1vZGUpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5n
dGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBl
Y3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKQEAgLTEwMywxMiArMTAzLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSByZWZpbmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAg
IGFycmF5TW9kZSwKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbW9kZVN1cHBvcnRzTGVuZ3Ro
KGFycmF5TW9kZSkpCisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKTsKQEAgLTEyNSwxNSArMTI0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0
OiB7CiAgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZp
bmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAg
ICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCkBA
IC0zMjMsOCArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCi0gICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAg
ICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCkucmVm
aW5lKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSk7CiAgICAg
ICAgICAgICAKQEAgLTMzMiw3ICszMjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgpAQCAtMzc2LDE2ICszNzMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwg
Tm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5D
U0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2RlSW5kZXggY2hl
Y2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBB
cnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKGFycmF5TW9kZSkpOworICAgICAg
ICBBU1NFUlQoYXJyYXlNb2RlLmlzU3BlY2lmaWMoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dy
YXBoLnJlZihhcnJheSk7CiAKLSAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsK
KyAgICAgICAgaWYgKGFycmF5TW9kZS5kb2VzQ29udmVyc2lvbigpKSB7CiAgICAgICAgICAgICBp
ZiAoaW5kZXggIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGluZGV4KTsK
LSAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhh
cnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJh
eWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5LCBpbmRl
eCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNl
ZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdp
Y2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtMzkzLDE1ICszOTAsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgYXJy
YXlpZnlJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChzaG91bGRHZW5l
cmF0ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFnZShhcnJheU1vZGUpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtb2RlVXNlc0J1dHRlcmZseShhcnJheU1vZGUpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChhcnJheU1vZGUuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKTsKIAogICAgICAgICAgICAgaWYgKCFzdG9yYWdl
Q2hlY2soYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgcmV0dXJuIGFycmF5aWZ5SW5kZXg7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IE5vZGUgY2hlY2tBcnJheShDaGVja0FycmF5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2Rl
KSwgYXJyYXkpOworICAgICAgICBOb2RlIGNoZWNrQXJyYXkoQ2hlY2tBcnJheSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKICAgICAgICAgY2hlY2tBcnJh
eS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGNoZWNrQXJyYXlJbmRleCA9IG1fZ3JhcGguc2l6
ZSgpOwogICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja0FycmF5KTsKQEAgLTQxMywxMCArNDEw
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkKICAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGFycmF5KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtb2RlVXNlc0J1dHRl
cmZseShhcnJheU1vZGUpKQorICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0ZXJmbHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2lu
LCBhcnJheSksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBhZGRO
b2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFy
cmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICByZXR1cm4gYWRkTm9k
ZShOb2RlKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBhcnJheSksIHNob3VsZEdlbmVyYXRlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWdu
ZWQgc3RvcmFnZUNoaWxkSWR4KQpAQCAtNDI2LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
ICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4
aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEzMjU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVm
aXgsIE5vZAogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUu
aGFzQXJyYXlNb2RlKCkpIHsKLSAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIG1vZGVUb1N0cmluZyhub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIGRhdGFM
b2coIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpLnRvU3Ry
aW5nKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUu
aGFzVmFyTnVtYmVyKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDE0ICs0OTAsMTQgQEAgcHVibGljOgogICAgIC8vIC0g
YW5kIHNvIG9uLgogICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpOworICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9w
KCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMzI1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDE4ICs3NjcsMTggQEAg
c3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSgpCisgICAgQXJyYXlNb2RlIGFycmF5TW9kZSgpCiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzQXJyYXlNb2RlKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6Ok1v
ZGU+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbVdvcmQobV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBib29sIHNldEFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJh
eU1vZGUpCisgICAgYm9vbCBzZXRBcnJheU1vZGUoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7CiAgICAgICAgIGlmICh0aGlzLT5hcnJh
eU1vZGUoKSA9PSBhcnJheU1vZGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG1fb3BJbmZvID0gYXJyYXlNb2RlOworICAgICAgICBtX29wSW5mbyA9IGFycmF5TW9kZS5hc1dv
cmQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTMyNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQo
RXhlY1N0YXRlKiBleGVjKQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZXMuc2l6ZSgpOyBpKyspCiAgICAgICAgIG9wZXJhbmRzLnNldE9wZXJh
bmQoZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZXNbaV0tPm9wZXJhbmQsIGV4aXQubV92YWx1
ZVJlY292ZXJ5T3ZlcnJpZGVzW2ldLT5yZWNvdmVyeSk7CiAKLSAgICAKICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQog
ICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5t
X3JlY292ZXJ5SW5kZXggLSAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CkBAIC0yNTY2LDI5ICsyNTY2LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01P
REVTOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBub2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RF
UzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnLmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1w
dHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAt
MjYyMSwzMCArMjYyMCwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewotICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkp
OwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkg
eworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
VGFnKHRoaXMpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMpOwogCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBt
X3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkp
LCByZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9y
WzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFn
LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6
Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKQEAgLTI3MjgsMTAgKzI3MjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBo
KCkudmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKICAgICAgICAgCi0gICAgICAgIEFycmF5OjpNb2Rl
IGFycmF5TW9kZSA9IG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CisgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKTsKICAgICAgICAg
Ym9vbCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc3MCw5
ICsyNzY5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVD
VEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFs
dWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKQEAgLTI4MDEsNyArMjc5OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgICAgICAgICAgaWYg
KCFtYXlTdG9yZVRvVGFpbChhcnJheU1vZGUpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAg
ICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CkBAIC0yODEwLDcgKzI4MDgsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5
TW9kZSkpCisgICAgICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQog
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CkBAIC0yODI4
LDcgKzI4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7
CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCkBAIC0yODQw
LDggKzI4MzgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
QUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJB
WV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlVGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CkBAIC0yODcyLDEzICsyODcwLDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAg
IGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAgICBpZiAoIWFycmF5
TW9kZS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRB
cnJheUJvdW5kcyk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8g
YSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAg
IGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRh
YmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAog
ICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUu
IFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKICAgICAgICAgICAgICAgICAvLyBwcm9maWxp
bmcuCkBAIC0yODg3LDcgKzI4ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVW
YWx1ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNj
ZXNzKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2xvd1B1
dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJ
ZiB3ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAog
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkg
bm90IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCiAgICAgICAgICAg
ICAgICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCkBAIC0zMDI2LDcgKzMwMjQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJh
eShub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlz
SlNBcnJheSgpKTsKICAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwpAQCAtMzA0NSw5ICszMDQzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgIHN3aXRjaCAobm9k
ZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVj
dG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CkBAIC0zMDY2LDggKzMwNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZz
ZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVz
ZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpAQCAtMzA5Nyw3ICszMDkzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheVBvcDogewotICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5
TW9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsK
ICAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC0zMTA5LDkgKzMxMDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZVBheWxv
YWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVQ
YXlsb2FkR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5lZENh
c2UgPQpAQCAtMzE0NCw4ICszMTM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VM
ZW5ndGgodGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3Jh
Z2VMZW5ndGguZ3ByKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMyNTgwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2Rl
LmFycmF5TW9kZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkp
IHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC0yNTk3LDI3ICsyNTk3LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElO
X0JPVU5EU19DT05USUdVT1VTX01PREVTOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAg
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFM
TF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CkBAIC0y
NjQ3LDI4ICsyNjQ2LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JPVU5EU19B
UlJBWV9TVE9SQUdFX01PREVTOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJB
WV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFH
RV9NT0RFUzogeworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjc0NSwxMCArMjc0NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgRWRnZSBjaGlsZDQgPSBtX2pp
dC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAg
QXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCkubW9kZUZvclB1dCgpOwogICAg
ICAgICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0y
Nzg4LDkgKzI3ODcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICAgICAgc3dpdGNoIChhcnJheU1vZGUp
IHsKLSAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUu
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJl
ZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjgyMSw3ICsyODE5LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUu
aXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAg
ICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKQEAgLTI4MzAsNyArMjgyOCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlN
b2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wb3JhcnlS
ZWcpOwpAQCAtMjg0Niw3ICsyODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdl
LnVzZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3Mo
YXJyYXlNb2RlKSkgeworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkp
IHsKICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLApAQCAtMjg1OCw4ICsyODU2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjg5MSwxMyArMjg4OSwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAg
ICAgICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgaWYg
KCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3Vu
ZHMpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YmV5b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0
aW5nIHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAg
ICAgICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIGlm
IChhcnJheU1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1
bmNvdW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGlu
ZSBKSVQKICAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xl
IHN0b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CiAgICAgICAgICAgICAgICAgLy8g
cHJvZmlsaW5nLgpAQCAtMjkwNiw3ICsyOTA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAg
ICAgICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUuaXNTbG93UHV0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNv
ZGUgcGF0aCwgd2Ugd291bGQgaW52ZXJ0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92
ZSBicmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhh
cHBlbnMgaWYgd2UncmUKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBi
YWQgdGltZS4KQEAgLTMwNzksNyArMzA3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0g
ICAgICAgIEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogICAgICAgICAKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zMDk3LDkgKzMw
OTUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBzd2l0Y2ggKG5vZGUu
YXJyYXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
LSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czogewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBz
dG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0
ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3Jl
NjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFn
ZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKQEAgLTMxMTYsOCArMzEx
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0
aHMuCkBAIC0zMTQ5LDcgKzMxNDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAg
IEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUuYXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zMTYxLDkgKzMxNTcsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0
b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CkBAIC0zMTkyLDggKzMxODcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6IHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsOSArMzIxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZv
PigpOwogfQogCi1jb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5
cGVkQXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK2NvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlN
b2RlIGFycmF5TW9kZSkKIHsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIHN3aXRjaCAo
YXJyYXlNb2RlLnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAg
cmV0dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgpAQCAtMzQ3LDU4ICszNDcsNTcgQEAgY29uc3QgVHlwZWRB
cnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogICAgIH0KIH0KIAotSklUQ29tcGlsZXI6Okp1
bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJl
ZyB0ZW1wR1BSLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCitKSVRDb21waWxlcjo6SnVtcExpc3Qg
U3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBH
UFIsIEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHJl
c3VsdDsKICAgICAKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgTk9OX0FSUkFZ
X0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwg
SW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
CisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzQXJyYXkgfCBD
b250aWd1b3VzU2hhcGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFw
ZSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdV
T1VTX01PREVTOiB7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwg
SW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgKLSAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3VzU2hh
cGUpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9T
VE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKGFycmF5TW9kZS5pc0pT
QXJyYXkoKSkgeworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc1Nsb3dQdXQoKSkgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3QzMigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
dGVtcEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKEFycmF5
U3RvcmFnZVNoYXBlKSwgdGVtcEdQUik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHRlbXBHUFIsCisgICAgICAgICAgICAgICAgICAg
ICAgICBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdl
U2hhcGUpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNr
KSwgdGVtcEdQUik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3Rl
ZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
dGVtcEdQUik7Ci0gICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAg
ICAgICBpZiAoYXJyYXlNb2RlLmlzU2xvd1B1dCgpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpLCB0ZW1wR1BSKTsKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgdGVtcEdQUiwKICAgICAgICAgICAg
ICAgICAgICAgVHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3Rv
cmFnZVNoYXBlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91
dE9mQm91bmRzOiB7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwg
SW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQ
UiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewotICAg
ICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAotICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHRlbXBHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSwgdGVtcEdQUiwKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwogICAgICAg
ICBicmVhazsKQEAgLTQwOSwyOCArNDA4LDI4IEBAIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBTcGVj
dWxhdGl2ZUpJVDo6anUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBu
b2RlKQogewotICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7Cisg
ICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKKyAgICBBU1NFUlQoIW5v
ZGUuYXJyYXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7CiAgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3Vs
dCA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAotICAgIGlm
IChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2Rl
LmFycmF5TW9kZSgpKSkgeworICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2Vk
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGNvbnN0IENs
YXNzSW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAwOwogICAgIAotICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3Ry
aW5nOjpzX2luZm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VP
VVNfTU9ERVM6Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2Fz
ZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFSUkFZX1dJVEhfQVJS
QVlfU1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0
ZW1wR1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTQ3NywyOSAr
NDc2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlLCBHUFJSZWcgYmFzZVJlZywgR1BS
UmVnIHByb3BlcnR5UmVnKQogewotICAgIEFycmF5OjpNb2RlIGRlc2lyZWRBcnJheU1vZGU7Ci0g
ICAgCi0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6VG9D
b250aWd1b3VzOgotICAgICAgICBkZXNpcmVkQXJyYXlNb2RlID0gQXJyYXk6OkNvbnRpZ3VvdXM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgotICAgICAg
ICBkZXNpcmVkQXJyYXlNb2RlID0gQXJyYXk6OkFycmF5U3RvcmFnZTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICBkZXNpcmVk
QXJyYXlNb2RlID0gQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGRlc2lyZWRBcnJh
eU1vZGUgPSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGRlc2ly
ZWRBcnJheU1vZGUgPSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGRlc2ly
ZWRBcnJheU1vZGUgPSBBcnJheTo6Rm9yY2VFeGl0OwotICAgICAgICBicmVhazsKLSAgICB9Cisg
ICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAg
R1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKQEAgLTUxNCw3ICs0OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2Rl
JiBub2RlCiAgICAgICAgIAogICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQg
aWYgd2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlcyA9Ci0gICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUo
dGVtcEdQUiwgZGVzaXJlZEFycmF5TW9kZSk7CisgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUodGVtcEdQUiwgbm9kZS5hcnJheU1vZGUoKSk7CiAgICAgICAgIAogICAgIG1faml0
LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOwpAQCAtNTI1LDcgKzUwMiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICAKICAgICAvLyBJZiB3
ZSdyZSBhbGxlZ2VkbHkgY3JlYXRpbmcgY29udGlndW91cyBzdG9yYWdlIGFuZCB0aGUgaW5kZXgg
aXMgYm9ndXMsIHRoZW4KICAgICAvLyBqdXN0IGRvbid0LgotICAgIGlmIChub2RlLmFycmF5TW9k
ZSgpID09IEFycmF5OjpUb0NvbnRpZ3VvdXMgJiYgcHJvcGVydHlSZWcgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91
cyAmJiBwcm9wZXJ0eVJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC01NDMsMTEgKzUyMCwxMiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgICAgIAogICAgIC8vIE5vdyBj
YWxsIG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCiAgICAgc2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnModGVtcEdQUik7Ci0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgdGVtcEdQUiwgYmFzZVJl
Zyk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdF
X01PREVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3Vy
ZUFycmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CkBAIC01NzAsNyArNTQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnko
Tm9kZSYgbm9kZQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIs
IFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIE5vTm9kZSwKLSAgICAgICAganVtcFNsb3dGb3JVbndhbnRl
ZEFycmF5TW9kZShzdHJ1Y3R1cmVHUFIsIGRlc2lyZWRBcnJheU1vZGUpKTsKKyAgICAgICAganVt
cFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShzdHJ1Y3R1cmVHUFIsIG5vZGUuYXJyYXlNb2RlKCkp
KTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICBzdG9yYWdlUmVzdWx0KHRlbXBH
UFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTU3OCwxMSArNTU2LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlp
ZnkoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5hcnJheU1v
ZGUoKSkpOworICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzU3BlY2lmaWMoKSk7CiAgICAg
CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAKLSAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJl
YWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0xODUxLDcgKzE4MjksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwog
Ci0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSksIEFycmF5OjpTdHJpbmcpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJp
bmcpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOwogCiAg
ICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBp
bmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwpAQCAtMjI2MCw3
ICsyMjM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKIAotICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgQVNTRVJUKG5vZGUuYXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7
CiAKICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLApAQCAtMjQxMCw3ICsyMzg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEFTU0VS
VChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2Rl
LmFycmF5TW9kZSgpKSk7CisgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNr
ZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAKICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7CkBAIC0y
NDQ3LDcgKzI0MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JG
CiAgICAgCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNl
KTsKICAgICAKLSAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUoYmFzZVVzZSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGJhc2VVc2UsIG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5m
b3JOb2RlKGJhc2VVc2UpKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAKQEAgLTMyMzAsNyArMzIwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRJbmRleGVkUHIKICAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3Jp
cHRvciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAotICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFs
dWUoKSksIHN0b3JhZ2VSZWcpOwogICAgICAgICAKQEAgLTMyNzAsNyArMzI0OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKICAgCi0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIEFycmF5OjpBcmd1bWVudHMpKTsKKyAgICBB
U1NFUlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOwogICAgIAogICAgIC8vIFR3byByZWFsbHkgbGFtZSBj
aGVja3MuCiAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTMzMjcsNyArMzMwNSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2Vk
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OkFyZ3VtZW50cykpOworICAg
IEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAgICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgTm9Ob2RlLApAQCAtMzM0NSw4
ICszMzIzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogewog
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURl
c2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzogeworICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OiB7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAgLTMzNTYsOCArMzMzNCw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50ZWdlclJl
c3VsdChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgQVJSQVlf
RUZGRUNURlVMX01PREVTOiB7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNh
c2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwpAQCAtMzU0Miw3ICszNTIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJl
YWxsb2NhdGVQcgogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4
KTsKIH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5
VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCitHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9y
YXJ5JiB0ZW1wb3JhcnksIEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgaWYgKCFwdXRCeVZh
bFdpbGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQogICAgICAgICByZXR1cm4gSW52YWxp
ZEdQUlJlZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDEzMjU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3MCwyOCArMjI3MCwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAg
IAotICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlKQorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXlNb2Rl
IGFycmF5TW9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAg
IC8vIEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8g
aG9sZXMgZXhjZXB0IGlmCi0gICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KLSAgICAg
ICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09G
X0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxf
QVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3Ig
YW55IGFjY2VzcyB0aGF0IG1heSBzdG9yZQotICAgICAgICAvLyB0byB0aGUgdGFpbC4KLSAgICAg
ICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElH
VU9VU19NT0RFUzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFycmF5TW9kZS5tYXlTdG9yZVRvSG9sZSgpOwogICAgIH0KLSAgICBHUFJSZWcg
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9kZSk7
CisgICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5Jiwg
QXJyYXlNb2RlKTsKICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJU
ZW1wb3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0
ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7
CkBAIC0yNDMwLDkgKzI0MTMsOSBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hw
b2ludCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxl
V2F0Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25X
YXRjaHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29sIGlzRm9yd2Fy
ZCk7CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNj
cmlwdG9yKEFycmF5OjpNb2RlKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlw
ZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVt
cExpc3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGlu
Z1R5cGVSZWcsIEFycmF5OjpNb2RlIGFycmF5TW9kZSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdU
eXBlUmVnLCBBcnJheU1vZGUgYXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSYp
OwogICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVy
dHlSZWcpOwogICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171119</attachid>
            <date>2012-10-27 21:35:54 -0700</date>
            <delta_ts>2012-10-27 22:05:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>arraymode_3.patch</filename>
            <type>text/plain</type>
            <size>113120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxMi0xMC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6QXJyYXk6Ok1vZGUgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiB0aGUgcHJldmlvdXMgbWFzc2l2
ZSBBcnJheTo6TW9kZSBlbnVtIGludG8gYSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZvdXIKKyAgICAg
ICAgZmllbGRzLCB0aGUgdHlwZSwgd2hldGhlciBpdCdzIGEgSlNBcnJheSwgdGhlIGxldmVsIG9m
IHNwZWN1bGF0aW9uLCBhbmQgdGhlCisgICAgICAgIGtpbmQgb2YgY29udmVyc2lvbiB0byBwZXJm
b3JtLgorICAgICAgICAKKyAgICAgICAgTm8gcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3JhbCBjaGFu
Z2UuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5TW9kZTo6cmVmaW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjphcnJheVR5cGVUb1N0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlDbGFzc1RvU3RyaW5nKToKKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjphcnJheUNvbnZlcnNpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp0b1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlw
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjphcnJheUNsYXNzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OnNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpB
cnJheU1vZGU6OmNvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YXNX
b3JkKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21Xb3JkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OndpdGhTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjp1c2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1v
ZGU6OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc0luQm91bmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1heVN0b3JlVG9Ib2xlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFycmF5TW9kZTo6aXNTbG93UHV0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmNhbkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6bGVuZ3RoTmVl
ZHNTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1vZGVGb3JQdXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6
OkRGRzo6QXJyYXlNb2RlOjpzdXBwb3J0c0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjpkb2VzQ29udmVyc2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2Rl
OjphcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5
TW9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpvcGVyYXRv
ciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFycmF5TW9kZXNXaXRoSW5kZXhp
bmdTaGFwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1v
ZGUpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRF
bWl0Q2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50
cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQ
aGFzZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmNoZWNrQXJyYXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRp
bmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dy
YXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRv
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50
ZWRBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0Fy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1
bWVudHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1w
b3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVl
ZEV4dHJhUmVnaXN0ZXIpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0x
MC0yNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFQUxfUExB
VEZPUk1fTkFNRSBidWlsZCBzZXR0aW5nIGlzIG5vIGxvbmdlciBuZWVkZWQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24g
MTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODM5LDcgKzgzOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsK
ICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewog
ICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC04NTksMTggKzg1OSwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQg
aW5kCiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAg
ICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FS
UkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9k
ZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldv
cmxkKG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBB
cnJheTo6SW50OEFycmF5OgpAQCAtOTI1LDI2ICs5MTksMjMgQEAgYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkp
IHsKICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJp
YzoKICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9j
ayk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9V
U19NT0RFUzoKLSAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAg
IGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKICAgICAgICAg
ICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVy
V29ybGQobm9kZS5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBj
YXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CisgICAgICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkubWF5U3RvcmVU
b0hvbGUoKSkKKyAgICAgICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS5jb2RlT3JpZ2luLCBp
bmRleEluQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkFy
Z3VtZW50czoKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
QEAgLTEzNzAsMTggKzEzNjEsMTkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3Vs
dCBpcyBub3QgYSBKUyB2YWx1ZS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDaGVja0FycmF5
OiB7Ci0gICAgICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgp
KSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxy
ZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91
bmRDb25zdGFudHMgPSB0cnVlOwogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsgLy8gTGllcywgYnV0IHRoaXMgaXMgZm9sbG93ZWQgYnkgb3BlcmF0aW9ucyAobGlrZSBH
ZXRCeVZhbCkgdGhhdCBhbHdheXMgZXhpdCwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gdXMgdHJ5
aW5nIHRvIGJlIGNsZXZlciBoZXJlLgotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFMTF9D
T05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgor
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAg
ICAgICAgICAvLyBUaGlzIGRvZXNuJ3QgZmlsdGVyIGFueXRoaW5nIG1lYW5pbmdmdWwgcmlnaHQg
bm93LiBXZSBtYXkgd2FudCB0byBhZGQKICAgICAgICAgICAgIC8vIENGQSB0cmFja2luZyBvZiBh
cnJheSBtb2RlIHNwZWN1bGF0aW9ucywgYnV0IHdlIGRvbid0IGhhdmUgdGhhdCwgeWV0LgogICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwpAQCAtMTQy
MCwzNSArMTQxMiwyOSBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rl
cyhhcnJheU1vZGVzRm9yKG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXJBcnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1Ro
YXRQYXNzRmlsdGVyaW5nKCkpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnk6IHsKLSAgICAgICAgaWYgKG1v
ZGVBbHJlYWR5Q2hlY2tlZChmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgp
KSkgeworICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpKSkgewogICAgICAgICAgICAgbV9mb3VuZENvbnN0YW50cyA9IHRydWU7
CiAgICAgICAgICAgICBub2RlLnNldENhbkV4aXQoZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgICAg
IGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0
cnVlKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxs
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpKQotICAgICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuY2xlYXIoKTsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5
TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7Ci0gICAgICAgICAgICBtX2hh
dmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29u
dmVydCk7CisgICAgICAgIG5vZGUuc2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOworICAgICAgICBpZiAobm9kZS5jaGlsZDIo
KSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFNwZWNJbnQzMik7
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5jbGVhcigpOworICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhpbmRleEluQmxvY2spOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlckFycmF5TW9kZXMobm9kZS5hcnJheU1vZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJp
bmcoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOiB7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIC8v
IFN0cmluZ3MgYXJlIHdlaXJkIC0gd2UgbWF5IHNwZWMgZmFpbCBpZiB0aGUgc3RyaW5nIHdhcyBh
IHJvcGUuIFRoYXQgaXMgb2YgY291cnNlCiAgICAgICAgICAgICAvLyBzdHVwaWQsIGFuZCB3ZSBz
aG91bGQgZml4IHRoYXQsIGJ1dCBmb3Igbm93IGxldCdzIGF0IGxlYXN0IGJlIGhvbmVzdCBhYm91
dCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTMyNzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjczLDcgKzI3Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0g
QXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1v
ZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
YXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykgewogICAgICAg
ICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDc2LDcg
KzQ3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuYXJyYXlNb2RlKCkgIT0gQXJyYXk6OkFyZ3VtZW50cykKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZhbCBpZiB3ZSBrbm93IHRo
YXQKQEAgLTQ5OSw3ICs0OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVu
dHMpCisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6QXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMjYgKzMyLDEy
NiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUFycmF5OjpNb2RlIGZy
b21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBi
b29sIG1ha2VTYWZlKQorQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UHJv
ZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCiB7CiAg
ICAgc3dpdGNoIChwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSkgewogICAgIGNhc2UgMDoK
LSAgICAgICAgcmV0dXJuIEFycmF5OjpVbnByb2ZpbGVkOworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpVbnByb2ZpbGVkKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSk6
CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAgICAgICAgICAgIHJldHVybiBBcnJheTo6VG9Db250
aWd1b3VzOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHRvIGdvIHRvIGNvbnRpZ3Vv
dXMgb3IgYXJyYXkgc3RvcmFnZS4gV2UncmUgbWFraW5nIGEgc3RhdGljIGd1ZXNzIGhlcmUuIElu
IGZ1dHVyZSB3ZSBzaG91bGQgdXNlIGV4aXQgcHJvZmlsaW5nIGZvciB0aGlzLgotICAgICAgICBy
ZXR1cm4gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRP
ZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOyAvLyBGSVhNRTogd2UgZG9uJ3Qga25vdyB3aGV0aGVy
IHRvIGdvIHRvIGNvbnRpZ3VvdXMgb3IgYXJyYXkgc3RvcmFnZS4gV2UncmUgbWFraW5nIGEgc3Rh
dGljIGd1ZXNzIGhlcmUuIEluIGZ1dHVyZSB3ZSBzaG91bGQgdXNlIGV4aXQgcHJvZmlsaW5nIGZv
ciB0aGlzLgorICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRp
Y3Rpb25zKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToK
LSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyA6
IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWwgOiBB
cnJheTo6Q29udGlndW91cyk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNvbnRp
Z3VvdXMsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9m
aWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91
cyk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXMpOworICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5
OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNB
cnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aENvbnRpZ3VvdXMpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6UG9zc2libHlB
cnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUo
KSA/IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwgOiBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6Q29udGlndW91cywgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3Bl
Y3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVN0b3JhZ2UpOworICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJy
YXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRp
b24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpID8gQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFy
cmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2Fm
ZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5
OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53
aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/
IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSA6IEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aEFycmF5U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRo
U3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpQb3Nz
aWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJh
eTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXk6OlRvQXJyYXlTdG9yYWdl
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpO
b25BcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2Fm
ZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpBcnJh
eVRvQXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0
b3JhZ2UsIEFycmF5OjpBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9m
aWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGln
dW91cykgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0
b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFn
ZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6
UG9zc2libHlBcnJheSwgQXJyYXk6OkNvbnZlcnQpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBt
YWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpX
cml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAg
ICAgICByZXR1cm4gQXJyYXk6OlRvQ29udGlndW91czsKLSAgICAgICAgcmV0dXJuIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3VuZHMsIEFycmF5
OjpDb252ZXJ0KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6CiAgICAgICAgIGlmIChhY3Rpb24gPT0gQXJy
YXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKLSAg
ICAgICAgICAgIHJldHVybiBBcnJheTo6VG9BcnJheVN0b3JhZ2U7Ci0gICAgICAgIHJldHVybiBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3Vu
ZHMsIEFycmF5OjpDb252ZXJ0KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpIHwg
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNhc2Ug
YXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgog
ICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJj
ZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OlRvU2xvd1B1
dEFycmF5U3RvcmFnZTsKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOworICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3VuZHMsIEFycmF5OjpDb252ZXJ0
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
cyk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgaXMgcG9zc2li
bHkgYSBraW5kIG9mIGFycmF5IGZvciB3aGljaCwgdGhvdWdoIHRoZXJlIGlzIG5vCiAgICAgICAg
IC8vIHVzZWZ1bCBkYXRhIGluIHRoZSBhcnJheSBwcm9maWxlLCB3ZSBtYXkgYmUgYWJsZSB0byBl
eHRyYWN0IHVzZWZ1bCBkYXRhIGZyb20KICAgICAgICAgLy8gdGhlIHZhbHVlIHByb2ZpbGVzIG9m
IHRoZSBpbnB1dHMuIEhlbmNlLCB3ZSBsZWF2ZSBpdCBhcyB1bmRlY2lkZWQsIGFuZCBsZXQKICAg
ICAgICAgLy8gdGhlIHByZWRpY3Rpb25zIHByb3BhZ2F0b3IgZGVjaWRlIGxhdGVyLgotICAgICAg
ICByZXR1cm4gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgIH0KIH0KIAotQXJy
YXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlIGFycmF5TW9kZSwgU3BlY3VsYXRl
ZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpCitBcnJheU1vZGUgQXJyYXlNb2RlOjpy
ZWZpbmUoU3BlY3VsYXRlZFR5cGUgYmFzZSwgU3BlY3VsYXRlZFR5cGUgaW5kZXgpIGNvbnN0CiB7
CiAgICAgaWYgKCFiYXNlIHx8ICFpbmRleCkgewogICAgICAgICAvLyBJdCBjYW4gYmUgdGhhdCB3
ZSBoYWQgYSBsZWdpdGltYXRlIGFycmF5TW9kZSBidXQgbm8gaW5jb21pbmcgcHJlZGljdGlvbnMu
IFRoYXQnbGwKICAgICAgICAgLy8gaGFwcGVuIGlmIHdlIGlubGluZWQgY29kZSBiYXNlZCBvbiwg
c2F5LCBhIGdsb2JhbCB2YXJpYWJsZSB3YXRjaHBvaW50LCBidXQgbGF0ZXIKICAgICAgICAgLy8g
cmVhbGl6ZWQgdGhhdCB0aGUgY2FsbHNpdGUgY291bGQgbm90IGhhdmUgcG9zc2libHkgZXhlY3V0
ZWQuIEl0IG1heSBiZSB3b3J0aHdoaWxlCiAgICAgICAgIC8vIHRvIGZpeCB0aGF0LCBidXQgZm9y
IG5vdyBJJ20gbGVhdmluZyBpdCBhcy1pcy4KLSAgICAgICAgcmV0dXJuIEFycmF5OjpGb3JjZUV4
aXQ7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkZvcmNlRXhpdCk7CiAgICAgfQog
ICAgIAogICAgIGlmICghaXNJbnQzMlNwZWN1bGF0aW9uKGluZGV4KSB8fCAhaXNDZWxsU3BlY3Vs
YXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgCi0gICAgaWYgKGFycmF5TW9kZSA9
PSBBcnJheTo6VW5wcm9maWxlZCkgeworICAgIGlmICh0eXBlKCkgPT0gQXJyYXk6OlVucHJvZmls
ZWQpIHsKICAgICAgICAgLy8gSWYgdGhlIGluZGV4aW5nIHR5cGUgd2Fzbid0IHJlY29yZGVkIGlu
IHRoZSBhcnJheSBwcm9maWxlIGJ1dCB0aGUgdmFsdWVzIGFyZQogICAgICAgICAvLyBiYXNlPWNl
bGwgcHJvcGVydHk9aW50LCB0aGVuIHdlIGtub3cgdGhhdCB0aGlzIGFjY2VzcyBkaWRuJ3QgZXhl
Y3V0ZS4KLSAgICAgICAgcmV0dXJuIEFycmF5OjpGb3JjZUV4aXQ7CisgICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OkZvcmNlRXhpdCk7CiAgICAgfQogICAgIAotICAgIGlmIChhcnJheU1v
ZGUgIT0gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpCi0gICAgICAgIHJldHVybiBhcnJh
eU1vZGU7CisgICAgaWYgKHR5cGUoKSAhPSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucykK
KyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIAogICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9u
KGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OlN0cmluZzsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6U3RyaW5nKTsKICAgICAKICAgICBpZiAoaXNBcmd1bWVudHNTcGVjdWxh
dGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpBcmd1bWVudHM7CisgICAgICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cyk7CiAgICAgCiAgICAgaWYgKGlzSW50OEFy
cmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6SW50OEFycmF5Owor
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpJbnQ4QXJyYXkpOwogICAgIAogICAgIGlm
IChpc0ludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpJ
bnQxNkFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpJbnQxNkFycmF5KTsK
ICAgICAKICAgICBpZiAoaXNJbnQzMkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJl
dHVybiBBcnJheTo6SW50MzJBcnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
SW50MzJBcnJheSk7CiAgICAgCiAgICAgaWYgKGlzVWludDhBcnJheVNwZWN1bGF0aW9uKGJhc2Up
KQotICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OlVpbnQ4QXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQ4Q2xhbXBlZEFy
cmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6VWludDhDbGFtcGVk
QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5
KTsKICAgICAKICAgICBpZiAoaXNVaW50MTZBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAg
ICByZXR1cm4gQXJyYXk6OlVpbnQxNkFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpVaW50MTZBcnJheSk7CiAgICAgCiAgICAgaWYgKGlzVWludDMyQXJyYXlTcGVjdWxhdGlv
bihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50MzJBcnJheTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6VWludDMyQXJyYXkpOwogICAgIAogICAgIGlmIChpc0Zsb2F0
MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkZsb2F0MzJB
cnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RmxvYXQzMkFycmF5KTsKICAg
ICAKICAgICBpZiAoaXNGbG9hdDY0QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0
dXJuIEFycmF5OjpGbG9hdDY0QXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6
OkZsb2F0NjRBcnJheSk7CiAgICAgCi0gICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwogfQogCi1ib29sIG1vZGVBbHJlYWR5Q2hl
Y2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorYm9vbCBB
cnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25zdAogewot
ICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCkBAIC0xNjIs
NjQgKzE2Miw0NCBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2CiAg
ICAgICAgIHJldHVybiBpc1N0cmluZ1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7CiAgICAgICAg
IAogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91
c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpUb0NvbnRp
Z3VvdXM6CisgICAgICAgIGlmIChhcnJheUNsYXNzKCkgPT0gQXJyYXk6OkFycmF5KSB7CisgICAg
ICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2Rlcywg
YXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgICAgICYmIGhhc0NvbnRpZ3VvdXModmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQorICAg
ICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYXJy
YXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYmIGhhc0NvbnRp
Z3VvdXModmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpKTsKICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoK
LSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICAgICAgaWYgKGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhDb250aWd1b3VzKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAg
ICAmJiBoYXNDb250aWd1b3VzKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKLQogICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VU
b0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpU
b0FycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3Jh
Z2U6CisgICAgICAgIGlmIChhcnJheUNsYXNzKCkgPT0gQXJyYXk6OkFycmF5KSB7CisgICAgICAg
ICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNB
cnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCisgICAgICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkp
CisgICAgICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICB9CiAgICAgICAgIGlm
IChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJh
eVN0b3JhZ2UpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4gdmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAgICAgICAgICAgICYm
IGhhc0Zhc3RBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xl
dG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
ICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgeworICAgICAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQorICAg
ICAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IElzQXJyYXkpOworICAgICAgICB9CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKICAg
ICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOgotICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGlm
IChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
Ci0gICAgICAgICAgICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICYmICh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkg
JiBJc0FycmF5KTsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZToKLSAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5t
X2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmIGhhc0FycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAg
ICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5n
VHlwZSgpICYgSXNBcnJheSk7Ci0gICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIGlzQXJndW1lbnRzU3BlY3VsYXRpb24odmFsdWUubV90eXBlKTsKICAg
ICAgICAgCkBAIC0yNTUsMTMgKzIzNSwxMyBAQCBib29sIG1vZGVBbHJlYWR5Q2hlY2tlZChBYnN0
cmFjdFZhbHVlJiB2CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBDUkFTSCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY29uc3Qg
Y2hhciogbW9kZVRvU3RyaW5nKEFycmF5OjpNb2RlIG1vZGUpCitjb25zdCBjaGFyKiBhcnJheVR5
cGVUb1N0cmluZyhBcnJheTo6VHlwZSB0eXBlKQogewotICAgIHN3aXRjaCAobW9kZSkgeworICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6
CiAgICAgICAgIHJldHVybiAiU2VsZWN0VXNpbmdQcmVkaWN0aW9ucyI7CiAgICAgY2FzZSBBcnJh
eTo6VW5wcm9maWxlZDoKQEAgLTI3NCw1NiArMjU0LDEwIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0
cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICAgICAgcmV0dXJuICJTdHJpbmciOwogICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIHJldHVybiAiQ29udGlndW91cyI7Ci0gICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKLSAgICAgICAgcmV0dXJuICJDb250aWd1b3VzVG9U
YWlsIjsKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJl
dHVybiAiQ29udGlndW91c091dE9mQm91bmRzIjsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXMiOwotICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgICAgIHJldHVybiAiQXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5V2l0aENvbnRpZ3VvdXNPdXRP
ZkJvdW5kcyI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzOgot
ICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyI7Ci0gICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgICAgICByZXR1cm4g
IlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCI7Ci0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiUG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMiOwogICAgIGNhc2UgQXJyYXk6OkFy
cmF5U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZVRvSG9sZToKLSAgICAgICAgcmV0dXJuICJBcnJheVN0b3JhZ2VUb0hv
bGUiOwogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVy
biAiU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJBcnJh
eVdpdGhBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFn
ZVRvSG9sZToKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUiOwot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJl
dHVybiAiQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiAiQXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlT
dG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRv
SG9sZToKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
OgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSI7
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91
bmRzIjsKLSAgICBjYXNlIEFycmF5OjpUb0NvbnRpZ3VvdXM6Ci0gICAgICAgIHJldHVybiAiVG9D
b250aWd1b3VzIjsKLSAgICBjYXNlIEFycmF5OjpUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0
dXJuICJUb0FycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9y
YWdlOgotICAgICAgICByZXR1cm4gIlRvU2xvd1B1dEFycmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBB
cnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJBcnJheVRvQXJyYXlT
dG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6Ci0g
ICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlIjsKICAgICBjYXNlIEFy
cmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiAiQXJndW1lbnRzIjsKICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CkBAIC0zNTMsNiArMjg3LDUzIEBAIGNvbnN0IGNoYXIqIG1vZGVUb1N0
cmluZyhBcnJheTo6TW9kZSBtb2QKICAgICB9CiB9CiAKK2NvbnN0IGNoYXIqIGFycmF5Q2xhc3NU
b1N0cmluZyhBcnJheTo6Q2xhc3MgYXJyYXlDbGFzcykKK3sKKyAgICBzd2l0Y2ggKGFycmF5Q2xh
c3MpIHsKKyAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgcmV0dXJuICJBcnJheSI7Cisg
ICAgY2FzZSBBcnJheTo6Tm9uQXJyYXk6CisgICAgICAgIHJldHVybiAiTm9uQXJyYXkiOworICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXk6CisgICAgICAgIHJldHVybiAiUG9zc2libHlBcnJh
eSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7CisgICAgfQorfQor
Citjb25zdCBjaGFyKiBhcnJheVNwZWN1bGF0aW9uVG9TdHJpbmcoQXJyYXk6OlNwZWN1bGF0aW9u
IHNwZWN1bGF0aW9uKQoreworICAgIHN3aXRjaCAoc3BlY3VsYXRpb24pIHsKKyAgICBjYXNlIEFy
cmF5OjpJbkJvdW5kczoKKyAgICAgICAgcmV0dXJuICJJbkJvdW5kcyI7CisgICAgY2FzZSBBcnJh
eTo6VG9Ib2xlOgorICAgICAgICByZXR1cm4gIlRvSG9sZSI7CisgICAgY2FzZSBBcnJheTo6T3V0
T2ZCb3VuZHM6CisgICAgICAgIHJldHVybiAiT3V0T2ZCb3VuZHMiOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0KK30KKworY29uc3QgY2hhciogYXJyYXlD
b252ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24gY29udmVyc2lvbikKK3sKKyAgICBz
d2l0Y2ggKGNvbnZlcnNpb24pIHsKKyAgICBjYXNlIEFycmF5OjpBc0lzOgorICAgICAgICByZXR1
cm4gIkFzSXMiOworICAgIGNhc2UgQXJyYXk6OkNvbnZlcnQ6CisgICAgICAgIHJldHVybiAiQ29u
dmVydCI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duISI7CisgICAgfQor
fQorCitjb25zdCBjaGFyKiBBcnJheU1vZGU6OnRvU3RyaW5nKCkgY29uc3QKK3sKKyAgICBzdGF0
aWMgY2hhciBidWZmZXJbMjU2XTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIp
LCAiJXMlcyVzJXMiLCBhcnJheVR5cGVUb1N0cmluZyh0eXBlKCkpLCBhcnJheUNsYXNzVG9TdHJp
bmcoYXJyYXlDbGFzcygpKSwgYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKHNwZWN1bGF0aW9uKCkp
LCBhcnJheUNvbnZlcnNpb25Ub1N0cmluZyhjb252ZXJzaW9uKCkpKTsKKyAgICByZXR1cm4gYnVm
ZmVyOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAko
cmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNDIgKzQ2LDE2IEBAIGVudW0gQWN0aW9uIHsKICAg
ICBXcml0ZQogfTsKIAotZW51bSBNb2RlIHsKK2VudW0gVHlwZSB7CiAgICAgU2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucywgLy8gSW1wbGllcyB0aGF0IHdlIG5lZWQgcHJlZGljdGlvbnMgdG8gZGVjaWRl
LiBXZSB3aWxsIG5ldmVyIGdldCB0byB0aGUgYmFja2VuZCBpbiB0aGlzIG1vZGUuCiAgICAgVW5w
cm9maWxlZCwgLy8gSW1wbGllcyB0aGF0IGFycmF5IHByb2ZpbGluZyBkaWRuJ3Qgc2VlIGFueXRo
aW5nLiBCdXQgdGhhdCBjb3VsZCBiZSBiZWNhdXNlIHRoZSBvcGVyYW5kcyBkaWRuJ3QgY29tcGx5
IHdpdGggYmFzaWMgdHlwZSBhc3N1bXB0aW9ucyAoYmFzZSBpcyBjZWxsLCBwcm9wZXJ0eSBpcyBp
bnQpLiBUaGlzIGVpdGhlciBiZWNvbWVzIEdlbmVyaWMgb3IgRm9yY2VFeGl0IGRlcGVuZGluZyBv
biB2YWx1ZSBwcm9maWxpbmcuCiAgICAgRm9yY2VFeGl0LCAvLyBJbXBsaWVzIHRoYXQgd2UgaGF2
ZSBubyBpZGVhIGhvdyB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uLCBzbyB3ZSBzaG91bGQganVz
dCBnaXZlIHVwLgogICAgIEdlbmVyaWMsCiAgICAgU3RyaW5nLAogICAgIAotICAgIC8vIE1vZGVz
IG9mIGNvbnZlbnRpb25hbCBpbmRleGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIG5vbiBz
aWRlLWVmZmVjdGluZy4KICAgICBDb250aWd1b3VzLAotICAgIENvbnRpZ3VvdXNUb1RhaWwsCi0g
ICAgQ29udGlndW91c091dE9mQm91bmRzLAotICAgIEFycmF5V2l0aENvbnRpZ3VvdXMsCi0gICAg
QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbCwKLSAgICBBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZC
b3VuZHMsCi0gICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzLAotICAgIFBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCwKLSAgICBQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNP
dXRPZkJvdW5kcywKICAgICBBcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlTdG9yYWdlVG9Ib2xlLAog
ICAgIFNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMsCi0g
ICAgQXJyYXlXaXRoQXJyYXlTdG9yYWdlLAotICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9s
ZSwKLSAgICBBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlLAotICAgIEFycmF5V2l0aEFycmF5
U3RvcmFnZU91dE9mQm91bmRzLAotICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlLAot
ICAgIFBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlLAotICAgIFBvc3NpYmx5QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSwKLSAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZU91dE9mQm91bmRzLAotICAgIAotICAgIC8vIE1vZGVzIG9mIGNvbnZlbnRpb25hbCBpbmRl
eGVkIHN0b3JhZ2Ugd2hlcmUgdGhlIGNoZWNrIGlzIHNpZGUtZWZmZWN0aW5nLgotICAgIFRvQ29u
dGlndW91cywKLSAgICBUb0FycmF5U3RvcmFnZSwKLSAgICBBcnJheVRvQXJyYXlTdG9yYWdlLAot
ICAgIFBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZSwKLSAgICBUb1Nsb3dQdXRBcnJheVN0b3Jh
Z2UsCiAgICAgCiAgICAgQXJndW1lbnRzLAogICAgIEludDhBcnJheSwKQEAgLTk0LDMwNCArNjgs
Mjc3IEBAIGVudW0gTW9kZSB7CiAgICAgRmxvYXQzMkFycmF5LAogICAgIEZsb2F0NjRBcnJheQog
fTsKLX0gLy8gbmFtZXNwYWNlIEFycmF5Ci0KLS8vIEhlbHBlcnMgZm9yICdjYXNlJyBzdGF0ZW1l
bnRzLiBGb3IgZXhhbXBsZSwgc2F5aW5nICJjYXNlIEFsbEFycmF5U3RvcmFnZU1vZGVzOiIKLS8v
IGlzIHRoZSBzYW1lIGFzIGhhdmluZyBtdWx0aXBsZSBjYXNlIHN0YXRlbWVudHMgbGlzdGluZyBv
ZmYgYWxsIG9mIHRoZSBtb2RlcyB0aGF0Ci0vLyBoYXZlIHRoZSB3b3JkICJBcnJheVN0b3JhZ2Ui
IGluIHRoZW0uCi0KLS8vIEZpcnN0OiBoZWxwZXJzIGZvciBub24tc2lkZS1lZmZlY3RpbmcgY2hl
Y2tzLgotI2RlZmluZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgQXJyYXk6OkNvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzVG9UYWlsOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5k
czogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhDb250aWd1b3VzOiAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCi0jZGVmaW5lIEFSUkFZX1dJVEhfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzCi0jZGVmaW5lIEFMTF9DT05U
SUdVT1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBOT05fQVJS
QVlfQ09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNh
c2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVTCi0jZGVmaW5lIElOX0JPVU5EU19DT05USUdV
T1VTX01PREVTICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6Q29udGlndW91
czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBB
cnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzCi0jZGVmaW5lIENPTlRJR1VPVVNfVE9f
VEFJTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6Q29udGln
dW91c1RvVGFpbDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsCi0jZGVmaW5lIE9VVF9P
Rl9CT1VORFNfQ09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJh
eTo6Q29udGlndW91c091dE9mQm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHMK
LSNkZWZpbmUgTk9OX0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91
bmRzOiAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdp
dGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICBcCi0gICAgY2FzZSBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwotI2RlZmluZSBBUlJBWV9X
SVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBj
YXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgXAot
ICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAg
ICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLSNk
ZWZpbmUgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOiAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVMKLSNkZWZpbmUg
SU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IEFycmF5OjpBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZQotI2Rl
ZmluZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdl
VG9Ib2xlCi0jZGVmaW5lIFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2U6ICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhT
bG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9N
T0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZU91dE9mQm91bmRzOiAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kcwotCi0vLyBOZXh0OiBoZWxwZXJzIGZv
ciBzaWRlLWVmZmVjdGluZyBjaGVja3MuCi0jZGVmaW5lIE5PTl9BUlJBWV9FRkZFQ1RGVUxfTU9E
RVMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6VG9Db250aWd1b3VzOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlRvQXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6
VG9TbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFy
cmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UKLSNkZWZpbmUgQVJSQVlfRUZGRUNURlVM
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFycmF5OjpBcnJheVRv
QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUyAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6VG9Db250aWd1b3VzCi0jZGVmaW5lIEFMTF9F
RkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUyAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJh
eTo6VG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UKLSNkZWZp
bmUgU0xPV19QVVRfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgXAot
ICAgIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2UKLSNkZWZpbmUgQUxMX0VGRkVDVEZVTF9N
T0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFMTF9FRkZFQ1RGVUxf
Q09OVElHVU9VU19NT0RFUzogICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMKLQotQXJyYXk6Ok1vZGUgZnJvbU9ic2VydmVk
KEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwogCi1BcnJheTo6
TW9kZSByZWZpbmVBcnJheU1vZGUoQXJyYXk6Ok1vZGUsIFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNw
ZWN1bGF0ZWRUeXBlIGluZGV4KTsKK2VudW0gQ2xhc3MgeworICAgIE5vbkFycmF5LAorICAgIEFy
cmF5LAorICAgIFBvc3NpYmx5QXJyYXkKK307CiAKLWJvb2wgbW9kZUFscmVhZHlDaGVja2VkKEFi
c3RyYWN0VmFsdWUmLCBBcnJheTo6TW9kZSk7CitlbnVtIFNwZWN1bGF0aW9uIHsKKyAgICBJbkJv
dW5kcywKKyAgICBUb0hvbGUsCisgICAgT3V0T2ZCb3VuZHMKK307CiAKLWNvbnN0IGNoYXIqIG1v
ZGVUb1N0cmluZyhBcnJheTo6TW9kZSk7CitlbnVtIENvbnZlcnNpb24geworICAgIEFzSXMsCisg
ICAgQ29udmVydAorfTsKK30gLy8gbmFtZXNwYWNlIEFycmF5CiAKLWlubGluZSBib29sIG1vZGVV
c2VzQnV0dGVyZmx5KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5
TW9kZSkgewotICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBBTExfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKK2NvbnN0
IGNoYXIqIGFycmF5VHlwZVRvU3RyaW5nKEFycmF5OjpUeXBlKTsKK2NvbnN0IGNoYXIqIGFycmF5
Q2xhc3NUb1N0cmluZyhBcnJheTo6Q2xhc3MpOworY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlv
blRvU3RyaW5nKEFycmF5OjpTcGVjdWxhdGlvbik7Citjb25zdCBjaGFyKiBhcnJheUNvbnZlcnNp
b25Ub1N0cmluZyhBcnJheTo6Q29udmVyc2lvbik7CisKK2NsYXNzIEFycmF5TW9kZSB7CitwdWJs
aWM6CisgICAgQXJyYXlNb2RlKCkKKyAgICB7CisgICAgICAgIHUuYXNCeXRlcy50eXBlID0gQXJy
YXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgIHUuYXNCeXRlcy5hcnJheUNsYXNz
ID0gQXJyYXk6Ok5vbkFycmF5OworICAgICAgICB1LmFzQnl0ZXMuc3BlY3VsYXRpb24gPSBBcnJh
eTo6SW5Cb3VuZHM7CisgICAgICAgIHUuYXNCeXRlcy5jb252ZXJzaW9uID0gQXJyYXk6OkFzSXM7
CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtb2RlSXNKU0FycmF5KEFycmF5OjpNb2RlIGFycmF5
TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9D
T05USUdVT1VTX01PREVTOgotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgIGNhc2UgQVJSQVlfRUZGRUNURlVMX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZXhwbGljaXQg
QXJyYXlNb2RlKEFycmF5OjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlw
ZSA9IHR5cGU7CisgICAgICAgIHUuYXNCeXRlcy5hcnJheUNsYXNzID0gQXJyYXk6Ok5vbkFycmF5
OworICAgICAgICB1LmFzQnl0ZXMuc3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHM7CisgICAg
ICAgIHUuYXNCeXRlcy5jb252ZXJzaW9uID0gQXJyYXk6OkFzSXM7CiAgICAgfQotfQotCi1pbmxp
bmUgYm9vbCBpc0luQm91bmRzQWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6
Ci0gICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgY2FzZSBBUlJBWV9TVE9S
QUdFX1RPX0hPTEVfTU9ERVM6Ci0gICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEFycmF5TW9kZShBcnJheTo6VHlwZSB0eXBlLCBBcnJheTo6Q2xhc3Mg
YXJyYXlDbGFzcywgQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uLCBBcnJheTo6Q29udmVy
c2lvbiBjb252ZXJzaW9uKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVzLnR5cGUgPSB0eXBlOwor
ICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IGFycmF5Q2xhc3M7CisgICAgICAgIHUuYXNC
eXRlcy5zcGVjdWxhdGlvbiA9IHNwZWN1bGF0aW9uOworICAgICAgICB1LmFzQnl0ZXMuY29udmVy
c2lvbiA9IGNvbnZlcnNpb247CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBpc1Nsb3dQdXRBY2Nl
c3MoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0g
ICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgU0xPV19QVVRf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBBcnJheU1vZGUoQXJy
YXk6OlR5cGUgdHlwZSwgQXJyYXk6OkNsYXNzIGFycmF5Q2xhc3MsIEFycmF5OjpDb252ZXJzaW9u
IGNvbnZlcnNpb24pCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlwZSA9IHR5cGU7CisgICAg
ICAgIHUuYXNCeXRlcy5hcnJheUNsYXNzID0gYXJyYXlDbGFzczsKKyAgICAgICAgdS5hc0J5dGVz
LnNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzOworICAgICAgICB1LmFzQnl0ZXMuY29udmVy
c2lvbiA9IGNvbnZlcnNpb247CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtYXlTdG9yZVRvVGFp
bChBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAg
ICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKLSAgICBjYXNlIE9VVF9PRl9CT1VORFNf
Q09OVElHVU9VU19NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RF
UzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEFycmF5OjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxBcnJheTo6VHlwZT4odS5hc0J5dGVzLnR5cGUpOyB9CisgICAgQXJyYXk6OkNsYXNzIGFy
cmF5Q2xhc3MoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6Q2xhc3M+KHUuYXNC
eXRlcy5hcnJheUNsYXNzKTsgfQorICAgIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEFycmF5OjpTcGVjdWxhdGlvbj4odS5hc0J5dGVz
LnNwZWN1bGF0aW9uKTsgfQorICAgIEFycmF5OjpDb252ZXJzaW9uIGNvbnZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6Q29udmVyc2lvbj4odS5hc0J5dGVzLmNvbnZl
cnNpb24pOyB9CisgICAgCisgICAgdW5zaWduZWQgYXNXb3JkKCkgY29uc3QgeyByZXR1cm4gdS5h
c1dvcmQ7IH0KKyAgICAKKyAgICBzdGF0aWMgQXJyYXlNb2RlIGZyb21Xb3JkKHVuc2lnbmVkIHdv
cmQpCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHdvcmQpOwogICAgIH0KLX0KLQot
aW5saW5lIGJvb2wgbWF5U3RvcmVUb0hvbGUoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAg
IHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9E
RVM6Ci0gICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2Fz
ZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9B
UlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3RhdGljIEFycmF5TW9kZSBmcm9tT2Jz
ZXJ2ZWQoQXJyYXlQcm9maWxlKiwgQXJyYXk6OkFjdGlvbiwgYm9vbCBtYWtlU2FmZSk7CisgICAg
CisgICAgQXJyYXlNb2RlIHdpdGhTcGVjdWxhdGlvbihBcnJheTo6U3BlY3VsYXRpb24gc3BlY3Vs
YXRpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUoKSwgYXJy
YXlDbGFzcygpLCBzcGVjdWxhdGlvbiwgY29udmVyc2lvbigpKTsKICAgICB9Ci19Ci0KLWlubGlu
ZSBib29sIGNhbkNTRVN0b3JhZ2UoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
LSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
LSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24oQXJyYXlQcm9maWxlKiBwcm9maWxl
LCBib29sIG1ha2VTYWZlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhTcGVjdWxh
dGlvbihtYWtlU2FmZSA/IEFycmF5OjpPdXRPZkJvdW5kcyA6IChwcm9maWxlLT5tYXlTdG9yZVRv
SG9sZSgpID8gQXJyYXk6OlRvSG9sZSA6IEFycmF5OjpJbkJvdW5kcykpOwogICAgIH0KLX0KLQot
aW5saW5lIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsK
LSAgICByZXR1cm4gbW9kZUlzSlNBcnJheShhcnJheU1vZGUpOwotfQotCi1pbmxpbmUgQXJyYXk6
Ok1vZGUgbW9kZUZvclB1dChBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBBcnJh
eTo6R2VuZXJpYzsKKyAgICAKKyAgICBBcnJheU1vZGUgcmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJh
c2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KSBjb25zdDsKKyAgICAKKyAgICBib29sIGFscmVhZHlD
aGVja2VkKEFic3RyYWN0VmFsdWUmKSBjb25zdDsKKyAgICAKKyAgICBjb25zdCBjaGFyKiB0b1N0
cmluZygpIGNvbnN0OworICAgIAorICAgIGJvb2wgdXNlc0J1dHRlcmZseSgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBib29sIGlzSlNBcnJheSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
YXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0lu
Qm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFy
cmF5OjpJbkJvdW5kczsKKyAgICB9CisgICAgCisgICAgYm9vbCBtYXlTdG9yZVRvSG9sZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzSW5Cb3VuZHMoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc091dE9mQm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzcGVj
dWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kczsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1Nsb3dQdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUoKSA9PSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYW5DU0VTdG9yYWdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2Ug
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJv
ZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgY2FzZSBBcnJh
eTo6R2VuZXJpYzoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBsZW5ndGhOZWVkc1N0b3JhZ2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSlNBcnJheSgpOworICAgIH0KKyAgICAKKyAg
ICBBcnJheU1vZGUgbW9kZUZvclB1dCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIGNh
c2UgQXJyYXk6OkFyZ3VtZW50czoKLSAgICAgICAgcmV0dXJuIEFycmF5OjpHZW5lcmljOworICAg
ICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpHZW5lcmljKTsKICNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBh
cnJheU1vZGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KICAgICB9Ci19Ci0KLWlubGluZSBib29sIG1vZGVJc1NwZWNpZmljKEFycmF5OjpN
b2RlIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczoKLSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDoKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
Ym9vbCBpc1NwZWNpZmljKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAg
fQotfQotCi1pbmxpbmUgYm9vbCBtb2RlU3VwcG9ydHNMZW5ndGgoQXJyYXk6Ok1vZGUgbW9kZSkK
LXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRp
Y3Rpb25zOgotICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Ci0gICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgY2FzZSBOT05fQVJSQVlfQ09O
VElHVU9VU19NT0RFUzoKLSAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgot
ICAgIGNhc2UgTk9OX0FSUkFZX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGJvb2wgc3Vw
cG9ydHNMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICAgICAgY2FzZSBB
cnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQotfQotCi1pbmxpbmUg
Ym9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayhBcnJheTo6TW9kZSBtb2RlKQotewotICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9NT0RFUzoKLSAgICBjYXNl
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgIGNhc2UgQXJyYXk6OlVucHJvZmls
ZWQ6Ci0gICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBib29sIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVj
dFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBjb252ZXJzaW9uKCkgPT0gQXJyYXk6OkFzSXM7CisgICAgICAgIH0KICAgICB9Ci19
CisgICAgCisgICAgYm9vbCBkb2VzQ29udmVyc2lvbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gY29udmVyc2lvbigpID09IEFycmF5OjpDb252ZXJ0OworICAgIH0KKyAgICAKKyAgICBB
cnJheU1vZGVzIGFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpIGNvbnN0CisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOgorICAg
ICAgICAgICAgcmV0dXJuIEFMTF9BUlJBWV9NT0RFUzsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKKyAgICAgICAgICAgIHJldHVybiBhcnJheU1vZGVzV2l0aEluZGV4aW5nU2hhcGUo
Q29udGlndW91c1NoYXBlKTsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShBcnJheVN0b3JhZ2VT
aGFwZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAg
ICAgICByZXR1cm4gYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1NoYXBlKFNsb3dQdXRBcnJheVN0b3Jh
Z2VTaGFwZSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gYXNBcnJheU1v
ZGVzKE5vbkFycmF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXJyYXlNb2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
eXBlKCkgPT0gb3RoZXIudHlwZSgpCisgICAgICAgICAgICAmJiBhcnJheUNsYXNzKCkgPT0gb3Ro
ZXIuYXJyYXlDbGFzcygpCisgICAgICAgICAgICAmJiBzcGVjdWxhdGlvbigpID09IG90aGVyLnNw
ZWN1bGF0aW9uKCkKKyAgICAgICAgICAgICYmIGNvbnZlcnNpb24oKSA9PSBvdGhlci5jb252ZXJz
aW9uKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcnJheU1vZGUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQXJyYXlNb2RlKHVuc2lnbmVkIHdvcmQpCisg
ICAgeworICAgICAgICB1LmFzV29yZCA9IHdvcmQ7CisgICAgfQorICAgIAorICAgIEFycmF5TW9k
ZXMgYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1NoYXBlKEluZGV4aW5nVHlwZSBzaGFwZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6Ok5vbkFycmF5OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzaGFwZSk7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2Rl
cyhzaGFwZSB8IElzQXJyYXkpOworICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5Ogor
ICAgICAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhzaGFwZSkgfCBhc0FycmF5TW9kZXMoc2hh
cGUgfCBJc0FycmF5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB1bmlvbiB7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50OF90IHR5cGU7CisgICAgICAgICAgICB1aW50
OF90IGFycmF5Q2xhc3M7CisgICAgICAgICAgICB1aW50OF90IHNwZWN1bGF0aW9uOworICAgICAg
ICAgICAgdWludDhfdCBjb252ZXJzaW9uOworICAgICAgICB9IGFzQnl0ZXM7CisgICAgICAgIHVu
c2lnbmVkIGFzV29yZDsKKyAgICB9IHU7Cit9OwogCi1pbmxpbmUgYm9vbCBpc0VmZmVjdGZ1bChB
cnJheTo6TW9kZSBtb2RlKQorc3RhdGljIGlubGluZSBib29sIGNhbkNTRVN0b3JhZ2UoY29uc3Qg
QXJyYXlNb2RlJiBhcnJheU1vZGUpCiB7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBB
TExfRUZGRUNURlVMX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBhcnJheU1vZGUuY2FuQ1NF
U3RvcmFnZSgpOwogfQogCi0vLyBUaGlzIHJldHVybnMgdGhlIHNldCBvZiBhcnJheSBtb2RlcyB0
aGF0IHdpbGwgcGFzcyBmaWx0ZXJpbmcgb2YgYSBDaGVja0FycmF5IG9yCi0vLyBBcnJheWlmeSB3
aXRoIHRoZSBnaXZlbiBtb2RlLgotaW5saW5lIEFycmF5TW9kZXMgYXJyYXlNb2Rlc0ZvcihBcnJh
eTo6TW9kZSBhcnJheU1vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdl
KGNvbnN0IEFycmF5TW9kZSYgYXJyYXlNb2RlKQogewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
Ci0gICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAgcmV0dXJuIEFMTF9BUlJBWV9NT0RF
UzsKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAgIGNh
c2UgQXJyYXk6OlRvQ29udGlndW91czoKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhDb250aWd1b3VzKTsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aENv
bnRpZ3VvdXM6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9U
YWlsOgotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMp
IHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgIGNhc2UgQVJSQVlfV0lU
SF9DT05USUdVT1VTX01PREVTOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0
aENvbnRpZ3VvdXMpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlT3V0
T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVy
biBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5
OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJh
eTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKTsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0g
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2Fz
ZSBBcnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFycmF5KTsKLSAg
ICB9CisgICAgcmV0dXJuIGFycmF5TW9kZS5sZW5ndGhOZWVkc1N0b3JhZ2UoKTsKIH0KIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MDYsMTMgKzkwNiwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlv
bihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwogICAgIH0KICAgICAK
LSAgICBBcnJheTo6TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQorICAg
IEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQogICAgIHsKICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgIHJldHVy
biBmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7
CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3Mo
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZUluZGV4IGJh
c2UpCisgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoQXJyYXlQcm9maWxl
KiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZUluZGV4IGJhc2UpCiAgICAgewog
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICAgICAgICAgCkBA
IC05MjYsOSArOTI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBPdXRPZkJvdW5kcyk7CiAgICAgICAgIAotICAgICAgICBBcnJheTo6TW9k
ZSByZXN1bHQgPSBmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgYWN0aW9uLCBtYWtlU2FmZSk7CisgICAg
ICAgIEFycmF5TW9kZSByZXN1bHQgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChwcm9maWxlLCBh
Y3Rpb24sIG1ha2VTYWZlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZp
bml0ZVN0cnVjdHVyZSgpICYmIGJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKHJlc3VsdCkpCisg
ICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpICYmIHJlc3VsdC5iZW5l
Zml0c0Zyb21TdHJ1Y3R1cmVDaGVjaygpKQogICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVk
U3RydWN0dXJlKCkpKSwgYmFzZSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMTY0OSwxNiArMTY0OSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoYm9vCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6Ok1vZGUgYXJy
YXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9m
aWxlKTsKLSAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRz
OgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAg
ICBOb2RlSW5kZXggYXJyYXlQdXNoID0gYWRkVG9HcmFwaChBcnJheVB1c2gsIE9wSW5mbyhhcnJh
eU1vZGUpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
KTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2gg
PSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
byhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkp
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICAg
ICAgaWYgKHVzZXNSZXN1bHQpCiAgICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFy
cmF5UHVzaCk7CiAgICAgICAgICAgICAKQEAgLTE2NzQsMTYgKzE2NjksMTEgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7Ci0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
KSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZToKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczogewotICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRkVG9HcmFw
aChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKKyAgICAgICAgQXJyYXlNb2Rl
IGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFycmF5
UHJvZmlsZSk7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3As
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7CiAgICAgICAgICAgICBpZiAodXNl
c1Jlc3VsdCkKICAgICAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNDc2LDkgKzI0NjYsOSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsK
LSAgICAgICAgICAgIEFycmF5OjpNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRD
aGVja3MoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwg
YmFzZSk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlQW5k
RW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpS
ZWFkLCBiYXNlKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBwcm9wZXJ0eSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZh
bCA9IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJhc2UsIHByb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeVZhbCA9
IGFkZFRvR3JhcGgoR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UsIHByb3BlcnR5KTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeVZhbCk7CiAKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9ieV92YWwpOwpAQCAtMjQ4Nyw3ICsyNDc3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsK
ICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOwogCi0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJh
eU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwg
QXJyYXk6OldyaXRlLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBn
ZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZSwgQXJyYXk6OldyaXRlLCBiYXNlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZUluZGV4IHByb3BlcnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
ICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOwpAQCAtMjQ5Niw3ICsyNDg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwog
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoTm9Ob2RlKTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZSksIE9wSW5mbygwKSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgUHV0
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOwogCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDEzMjc0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzYsMTMgKzE3Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJ
TF9NT0RFUzoKLSAgICAgICAgICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RF
UzoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1
bHQ6CkBAIC02OTgsNyArNjkzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSwgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQorICAgIGJvb2wgY2hlY2tBcnJheUVsaW1pbmF0
aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgewogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewogICAgICAgICAgICAg
Tm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtNzI5LDcgKzcyNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBOb2RlSW5k
ZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hp
bGQxLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgTm9kZUluZGV4IGdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2Nr
OyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
YXQoaSk7CkBAIC0xMjM0LDcgKzEyMjksNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5
VmFsOiB7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCk7CiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7Ci0gICAgICAgICAgICBpZiAoY2FuQ1NFU3RvcmFnZShub2RlLmFycmF5TW9kZSgpKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuY2FuQ1NFU3RvcmFnZSgpKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGdldEJ5VmFsTG9hZEVsaW1pbmF0
aW9uKGNoaWxkMS5pbmRleCgpLCBjaGlsZDIuaW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNyArMTAz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tBcnJheTogewotICAgICAgICAgICAgICAgIGlmICghbW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tKTsKQEAgLTExMiw3ICsx
MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBBcnJheWlmeTogewotICAgICAgICAgICAgICAgIGlmICghbW9kZUFscmVhZHlD
aGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1vZGUoKSkp
CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLnJlZkNvdW50KCkgPj0gMSk7CiAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRCdXR0ZXJmbHkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAx
MzI3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NiwxNCArODYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFy
cmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihub2RlUHRyLT5jb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKAog
ICAgICAgICAgICAgICAgICAgICBub2RlUHRyLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnM7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFy
cmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2Zp
bGUpIHsKICAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQs
IGZhbHNlKSwKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNl
cnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
YXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1v
ZGVTdXBwb3J0c0xlbmd0aChhcnJheU1vZGUpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVT
dHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5n
dGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5yZWYobm9kZVB0ci0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgICAgICBOb2RlIGNoZWNrU3RydWN0dXJlKENoZWNrU3RydWN0dXJlLCBub2RlUHRyLT5jb2Rl
T3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBl
Y3RlZFN0cnVjdHVyZSgpKSksIG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCkpOwogICAgICAgICAg
ICAgICAgICAgICBjaGVja1N0cnVjdHVyZS5yZWYoKTsKQEAgLTEwMywxMiArMTAzLDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBpbGVJ
bmRleF07CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBhcnJheU1vZGUgPSByZWZpbmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAg
IGFycmF5TW9kZSwKKyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5l
KAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24o
KSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghbW9kZVN1cHBvcnRzTGVuZ3Ro
KGFycmF5TW9kZSkpCisgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZVB0ci0+c2V0T3AoR2V0
QXJyYXlMZW5ndGgpOwogICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKTsKQEAgLTEyNSwxNSArMTI0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9yYWdlKG5vZGUuYXJyYXlNb2RlKCkp
KTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmNhbkNTRVN0b3JhZ2UoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0
OiB7CiAgICAgICAgICAgICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZp
bmVBcnJheU1vZGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAg
ICAgICAgICAgICAgbm9kZS5hcnJheU1vZGUoKS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkpOwogICAgICAgICAgICAgCkBA
IC0zMjMsOCArMzIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKIAogICAgICAgICAgICAgbm9kZS5zZXRBcnJheU1v
ZGUoCi0gICAgICAgICAgICAgICAgcmVmaW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAg
ICBub2RlLmFycmF5TW9kZSgpLAorICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCkucmVm
aW5lKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMV0ucHJlZGljdGlvbigpLAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkMl0ucHJlZGljdGlvbigpKSk7CiAgICAg
ICAgICAgICAKQEAgLTMzMiw3ICszMjksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZVB0ci0+YXJyYXlNb2Rl
KCkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMkFycmF5OgpAQCAtMzc2LDE2ICszNzMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CiAgICAgCi0gICAgTm9kZUluZGV4IGNoZWNrQXJyYXkoQXJyYXk6
Ok1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBhcnJheSwg
Tm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShBcnJheTo6TW9kZSkgPSBjYW5D
U0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2RlSW5kZXggY2hl
Y2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBhcnJheSwgTm9kZUluZGV4IGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBB
cnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKGFycmF5TW9kZSkpOworICAgICAg
ICBBU1NFUlQoYXJyYXlNb2RlLmlzU3BlY2lmaWMoKSk7CiAgICAgICAgIAogICAgICAgICBtX2dy
YXBoLnJlZihhcnJheSk7CiAKLSAgICAgICAgaWYgKGlzRWZmZWN0ZnVsKGFycmF5TW9kZSkpIHsK
KyAgICAgICAgaWYgKGFycmF5TW9kZS5kb2VzQ29udmVyc2lvbigpKSB7CiAgICAgICAgICAgICBp
ZiAoaW5kZXggIT0gTm9Ob2RlKQogICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVmKGluZGV4KTsK
LSAgICAgICAgICAgIE5vZGUgYXJyYXlpZnkoQXJyYXlpZnksIGNvZGVPcmlnaW4sIE9wSW5mbyhh
cnJheU1vZGUpLCBhcnJheSwgaW5kZXgpOworICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJh
eWlmeSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5LCBpbmRl
eCk7CiAgICAgICAgICAgICBhcnJheWlmeS5yZWYoKTsgLy8gT25jZSBiZWNhdXNlIGl0J3MgdXNl
ZCBhcyBhIGJ1dHRlcmZseS4KICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBBbmQgdHdp
Y2UgYmVjYXVzZSBpdCdzIG11c3QtZ2VuZXJhdGUuCiAgICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlpZnlJbmRleCA9IG1fZ3JhcGguc2l6ZSgpOwpAQCAtMzkzLDE1ICszOTAsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmFwcGVuZChtX2luZGV4SW5CbG9jaywgYXJy
YXlpZnlJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChzaG91bGRHZW5l
cmF0ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoY2FuQ1NFU3RvcmFnZShhcnJheU1vZGUpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtb2RlVXNlc0J1dHRlcmZseShhcnJheU1vZGUpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChhcnJheU1vZGUuY2FuQ1NFU3RvcmFnZSgpKTsKKyAgICAgICAgICAgIEFTU0VS
VChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKTsKIAogICAgICAgICAgICAgaWYgKCFzdG9yYWdl
Q2hlY2soYXJyYXlNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgICAg
ICAgICAgcmV0dXJuIGFycmF5aWZ5SW5kZXg7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IE5vZGUgY2hlY2tBcnJheShDaGVja0FycmF5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2Rl
KSwgYXJyYXkpOworICAgICAgICBOb2RlIGNoZWNrQXJyYXkoQ2hlY2tBcnJheSwgY29kZU9yaWdp
biwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KTsKICAgICAgICAgY2hlY2tBcnJh
eS5yZWYoKTsKICAgICAgICAgTm9kZUluZGV4IGNoZWNrQXJyYXlJbmRleCA9IG1fZ3JhcGguc2l6
ZSgpOwogICAgICAgICBtX2dyYXBoLmFwcGVuZChjaGVja0FycmF5KTsKQEAgLTQxMywxMCArNDEw
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzaG91bGRHZW5lcmF0ZSkKICAgICAgICAgICAg
IG1fZ3JhcGgucmVmKGFycmF5KTsKICAgICAgICAgCi0gICAgICAgIGlmIChtb2RlVXNlc0J1dHRl
cmZseShhcnJheU1vZGUpKQorICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0ZXJmbHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2lu
LCBhcnJheSksIHNob3VsZEdlbmVyYXRlKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBhZGRO
b2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFy
cmF5TW9kZSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICByZXR1cm4gYWRkTm9k
ZShOb2RlKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBhcnJheSksIHNob3VsZEdlbmVyYXRlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgdW5zaWdu
ZWQgc3RvcmFnZUNoaWxkSWR4KQpAQCAtNDI2LDcgKzQyMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW21fY29tcGlsZUluZGV4XTsK
ICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJyYXlNb2RlKCkpIHsKKyAgICAg
ICAgc3dpdGNoIChub2RlUHRyLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBOb2RlIGZvcmNlRXhpdChGb3JjZU9TUkV4
aXQsIG5vZGVQdHItPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgZm9yY2VFeGl0LnJlZigpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDEzMjc0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChjb25zdCBjaGFyKiBwcmVm
aXgsIE5vZAogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUu
aGFzQXJyYXlNb2RlKCkpIHsKLSAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAi
LCAiIDogIiIsIG1vZGVUb1N0cmluZyhub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIGRhdGFM
b2coIiVzJXMiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLmFycmF5TW9kZSgpLnRvU3Ry
aW5nKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUu
aGFzVmFyTnVtYmVyKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNDkwLDE0ICs0OTAsMTQgQEAgcHVibGljOgogICAgIC8vIC0g
YW5kIHNvIG9uLgogICAgIGJvb2wgYnlWYWxJc1B1cmUoTm9kZSYgbm9kZSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6Ci0gICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFSUkFZ
X1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kcygpOworICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OgorICAgICAgICAgICAgcmV0dXJuICFub2RlLmFycmF5TW9kZSgpLm1heVN0b3JlVG9Ib2xlKCk7
CiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBub2RlLm9w
KCkgPT0gR2V0QnlWYWw7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMzI3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzY3LDE4ICs3NjcsMTggQEAg
c3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSgpCisgICAgQXJyYXlNb2RlIGFycmF5TW9kZSgpCiAgICAgewogICAgICAgICBBU1NF
UlQoaGFzQXJyYXlNb2RlKCkpOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6Ok1v
ZGU+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbVdvcmQobV9vcElu
Zm8pOwogICAgIH0KICAgICAKLSAgICBib29sIHNldEFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJh
eU1vZGUpCisgICAgYm9vbCBzZXRBcnJheU1vZGUoQXJyYXlNb2RlIGFycmF5TW9kZSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7CiAgICAgICAgIGlmICh0aGlzLT5hcnJh
eU1vZGUoKSA9PSBhcnJheU1vZGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IG1fb3BJbmZvID0gYXJyYXlNb2RlOworICAgICAgICBtX29wSW5mbyA9IGFycmF5TW9kZS5hc1dv
cmQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24g
MTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw2IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQo
RXhlY1N0YXRlKiBleGVjKQogICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAogICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOwogICAgIH0KLSAgICAKICAgICBTcGVjdWxhdGlvblJl
Y292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQogICAg
ICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3Jl
Y292ZXJ5SW5kZXggLSAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTMyNzQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjU0NSw3ICsyNTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dp
dGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUo
KS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
ICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0yNTY2LDI5ICsyNTY2LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVT
OiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Cisg
ICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMygpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGlj
TGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdw
cigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoK
LSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNh
c2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVzdWx0VGFnLmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgcmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjYy
MSwzMCArMjYyMCwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJl
ZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgY2FzZSBJTl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzogewotICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwot
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsK
LSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFn
KHRoaXMpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMp
OwogCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3Zl
Y3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZXN1bHRQYXlsb2FkLmdwcigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBd
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnLmdw
cigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
cmVzdWx0VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0
UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0g
ICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBB
TExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2Rl
LmNoaWxkMygpKTsKQEAgLTI3MjgsMTAgKzI3MjcsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBFZGdlIGNoaWxkMyA9IG1faml0LmdyYXBoKCku
dmFyQXJnQ2hpbGQobm9kZSwgMik7CiAgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9qaXQuZ3JhcGgo
KS52YXJBcmdDaGlsZChub2RlLCAzKTsKICAgICAgICAgCi0gICAgICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSk7CisgICAgICAgIEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKTsKICAgICAgICAgYm9v
bCBhbHJlYWR5SGFuZGxlZCA9IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChhcnJh
eU1vZGUpIHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjc3MCw5ICsy
NzY5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAg
ICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9DT05USUdVT1VTX01PREVTOiB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkg
eworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVU
YWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKQEAgLTI4MDEsNyArMjc5OSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIAotICAgICAgICAgICAgaWYgKCFt
YXlTdG9yZVRvVGFpbChhcnJheU1vZGUpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlz
SW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAg
ICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCiAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CkBAIC0yODEwLDcgKzI4MDgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9k
ZSkpCisgICAgICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQogICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIHNsb3dDYXNlcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBwcm9wZXJ0eVJlZyk7CkBAIC0yODI4LDcg
KzI4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7Cisg
ICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCiAgICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsCkBAIC0yODQwLDgg
KzI4MzgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9T
VE9SQUdFX01PREVTOiB7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVl
VGFnUmVnID0gdmFsdWUudGFnR1BSKCk7CkBAIC0yODcyLDEzICsyODcwLDEzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlm
IChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisgICAgICAgICAgICBpZiAoIWFycmF5TW9k
ZS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBiZXlvbmRBcnJheUJvdW5kcyk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJh
eUJvdW5kcyk7CiAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBo
b2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJblZlY3Rvci4KLSAgICAgICAgICAgIGlm
ICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAgaWYgKGFycmF5TW9k
ZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHVuY291bnRhYmxl
IGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRoZW4gdGhlIGJhc2VsaW5lIEpJVAogICAg
ICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkgY291bnQgdGhlIGhvbGUgc3RvcmUuIFNv
IHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKICAgICAgICAgICAgICAgICAvLyBwcm9maWxpbmcu
CkBAIC0yODg3LDcgKzI4ODUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXNTbG93UHV0QWNjZXNz
KGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2xvd1B1dCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc29ydCBvZiBzdHJhbmdlLiBJZiB3
ZSB3YW50ZWQgdG8gb3B0aW1pemUgdGhpcyBjb2RlIHBhdGgsIHdlIHdvdWxkIGludmVydAogICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgYWJvdmUgYnJhbmNoLiBCdXQgaXQncyBzaW1wbHkgbm90
IHdvcnRoIGl0IHNpbmNlIHRoaXMgb25seSBoYXBwZW5zIGlmIHdlJ3JlCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGFscmVhZHkgaGF2aW5nIGEgYmFkIHRpbWUuCkBAIC0zMDI2LDcgKzMwMjQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIEFycmF5UHVzaDogewotICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShu
b2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzSlNB
cnJheSgpKTsKICAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwpAQCAtMzA0NSw5ICszMDQzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3By
KCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICAg
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgIHN3aXRjaCAobm9kZS5h
cnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIp
OwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9y
TGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CkBAIC0zMDY2LDggKzMwNjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0
byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpAQCAtMzA5Nyw3ICszMDkzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2Fz
ZSBBcnJheVBvcDogewotICAgICAgICBBU1NFUlQobW9kZUlzSlNBcnJheShub2RlLmFycmF5TW9k
ZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzSlNBcnJheSgpKTsKICAg
ICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIo
KSk7CkBAIC0zMTA5LDkgKzMxMDUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZVBheWxvYWQu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAg
ICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgdmFsdWVQYXls
b2FkR1BSKTsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHVuZGVmaW5lZENhc2Ug
PQpAQCAtMzE0NCw4ICszMTM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VMZW5n
dGgodGhpcyk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VM
ZW5ndGguZ3ByKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU3OCw3ICsyNTc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLmFy
cmF5TW9kZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsK
ICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2Fz
ZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBA
IC0yNTk3LDI3ICsyNTk3LDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JP
VU5EU19DT05USUdVT1VTX01PREVTOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5pc0luQm91
bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q2NChNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAg
IGNhc2UgT1VUX09GX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFMTF9F
RkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CkBAIC0yNjQ3
LDI4ICsyNjQ2LDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJB
WV9TVE9SQUdFX01PREVTOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5
U3RvcmFnZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9T
VE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9N
T0RFUzogeworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwpAQCAtMjc0NSwxMCArMjc0NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQzID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgRWRnZSBjaGlsZDQgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6Ok1v
ZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsKKyAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCkubW9kZUZvclB1dCgpOwogICAgICAg
ICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2gg
KGFycmF5TW9kZSkgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzg4
LDkgKzI3ODcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICAgICAgc3dpdGNoIChhcnJheU1vZGUpIHsK
LSAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZG
RUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjgyMSw3ICsyODE5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1h
eVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNJ
bkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAg
ICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKQEAgLTI4MzAsNyArMjgyOCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2Rl
KSkKKyAgICAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5UmVnLCB0ZW1wb3JhcnlSZWcp
OwpAQCAtMjg0Niw3ICsyODQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgICAgICBzdG9yYWdlLnVz
ZSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzSW5Cb3VuZHNBY2Nlc3MoYXJy
YXlNb2RlKSkgeworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpIHsK
ICAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LApAQCAtMjg1OCw4ICsyODU2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZF
Q1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZVJlZyA9IHZhbHVlLmdwcigpOwpAQCAtMjg5MSwxMyArMjg4OSwxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBiZXlvbmRBcnJheUJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7Ci0gICAgICAg
ICAgICBpZiAoaXNJbkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgaWYgKCFh
cnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgYmV5b25kQXJyYXlCb3VuZHMp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYmV5
b25kQXJyYXlCb3VuZHMpOwogCiAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSB3cml0aW5n
IHRvIGEgaG9sZTsgaWYgc28gaW5jcmVtZW50IG1fbnVtVmFsdWVzSW5WZWN0b3IuCi0gICAgICAg
ICAgICBpZiAoIW1heVN0b3JlVG9Ib2xlKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChh
cnJheU1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB1bmNv
dW50YWJsZSBiZWNhdXNlIGlmIHdlIHRha2UgdGhpcyBleGl0LCB0aGVuIHRoZSBiYXNlbGluZSBK
SVQKICAgICAgICAgICAgICAgICAvLyB3aWxsIGltbWVkaWF0ZWx5IGNvdW50IHRoZSBob2xlIHN0
b3JlLiBTbyB0aGVyZSBpcyBubyBuZWVkIGZvciBleGl0CiAgICAgICAgICAgICAgICAgLy8gcHJv
ZmlsaW5nLgpAQCAtMjkwNiw3ICsyOTA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0NjQoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdEhvbGVWYWx1ZSA9IG1faml0LmJy
YW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpOwotICAgICAgICAg
ICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAgICAg
IGlmIChhcnJheU1vZGUuaXNTbG93UHV0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBzb3J0IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUg
cGF0aCwgd2Ugd291bGQgaW52ZXJ0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBi
cmFuY2guIEJ1dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBl
bnMgaWYgd2UncmUKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQg
dGltZS4KQEAgLTMwNzksNyArMzA3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAg
ICAgIEFTU0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogICAgICAgICAKICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zMDk3LDkgKzMwOTUs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJy
YXlNb2RlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAg
ICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czogewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSks
IHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xv
d1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9y
YWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQo
dmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKQEAgLTMxMTYsOCArMzExMyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
R1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgIAogICAgICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMu
CkBAIC0zMTQ5LDcgKzMxNDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgIEFT
U0VSVChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUuYXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zMTYxLDkgKzMxNTcsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3Jh
Z2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2Rl
KCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOiB7CisgICAgICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKAogICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9CkBAIC0zMTkyLDggKzMxODcsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHVuZGVmaW5lZENhc2UgPQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEz
Mjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsOSArMzE3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2xlYXJHZW5lcmF0aW9uSW5mbwogICAgIG1fZnBycyA9IFJlZ2lzdGVyQmFuazxGUFJJbmZvPigp
OwogfQogCi1jb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKSVQ6OnR5cGVk
QXJyYXlEZXNjcmlwdG9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK2NvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKiBTcGVjdWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXlNb2Rl
IGFycmF5TW9kZSkKIHsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKICAgICAgICAgcmV0
dXJuICZtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKICAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgpAQCAtMzQzLDU4ICszNDMsNTcgQEAgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSgogICAgIH0KIH0KIAotSklUQ29tcGlsZXI6Okp1bXBM
aXN0IFNwZWN1bGF0aXZlSklUOjpqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0
ZW1wR1BSLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCitKSVRDb21waWxlcjo6SnVtcExpc3QgU3Bl
Y3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBHUFIs
IEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHJlc3Vs
dDsKICAgICAKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgTk9OX0FSUkFZX0NP
TlRJR1VPVVNfTU9ERVM6IHsKKyAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0FycmF5
KCkpIHsKKyAgICAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5k
ZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250
aWd1b3VzU2hhcGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBt
X2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFwZSkp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VT
X01PREVTOiB7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5k
ZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgKLSAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzQXJyYXkgfCBDb250aWd1b3VzU2hhcGUp
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9S
QUdFX01PREVTOiB7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKGFycmF5TW9kZS5pc0pTQXJy
YXkoKSkgeworICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc1Nsb3dQdXQoKSkgeworICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aFRlc3QzMigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0
ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgdGVt
cEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKEFycmF5U3Rv
cmFnZVNoYXBlKSwgdGVtcEdQUik7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHRlbXBHUFIsCisgICAgICAgICAgICAgICAgICAgICAg
ICBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hh
cGUpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSwg
dGVtcEdQUik7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgdGVt
cEdQUik7Ci0gICAgICAgIGlmIChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzU2xvd1B1dCgpKSB7CiAgICAgICAgICAgICBtX2ppdC5zdWIzMihU
cnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpLCB0ZW1wR1BSKTsKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgdGVtcEdQUiwKICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3RvcmFn
ZVNoYXBlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgK
LSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHRlbXBHUFIsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiB7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5k
ZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwg
VHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSkpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAg
ICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAotICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpaZXJvLCB0ZW1wR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKElzQXJyYXkpKSk7Ci0gICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHRlbXBHUFIpOwotICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpLCB0ZW1wR1BSKTsKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgKLSAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZSwgdGVtcEdQUiwKLSAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
U2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBDUkFTSCgpOwogICAgICAgICBi
cmVhazsKQEAgLTQwNSwyOCArNDA0LDI4IEBAIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBTcGVjdWxh
dGl2ZUpJVDo6anUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChtb2RlSXNTcGVjaWZpYyhub2RlLmFycmF5TW9kZSgpKSk7CisgICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNTcGVjaWZpYygpKTsKKyAgICBBU1NFUlQoIW5vZGUu
YXJyYXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CiAgICAgCiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHJlc3VsdCA9
IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAotICAgIGlmICht
b2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFy
cmF5TW9kZSgpKSkgeworICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpIHsKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGNvbnN0IENsYXNz
SW5mbyogZXhwZWN0ZWRDbGFzc0luZm8gPSAwOwogICAgIAotICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICBj
YXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIGV4cGVjdGVkQ2xhc3NJbmZvID0gJkpTU3RyaW5n
OjpzX2luZm87CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgTk9OX0FSUkFZX0NPTlRJR1VPVVNf
TU9ERVM6Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBO
T05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlf
U1RPUkFHRV9NT0RFUzogeworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTQ3MywyOSArNDcy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcnJheShOb2RlJiBubwogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVn
IHByb3BlcnR5UmVnKQogewotICAgIEFycmF5OjpNb2RlIGRlc2lyZWRBcnJheU1vZGU7Ci0gICAg
Ci0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2FzZSBBcnJheTo6VG9Db250
aWd1b3VzOgotICAgICAgICBkZXNpcmVkQXJyYXlNb2RlID0gQXJyYXk6OkNvbnRpZ3VvdXM7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OlRvQXJyYXlTdG9yYWdlOgotICAgICAgICBk
ZXNpcmVkQXJyYXlNb2RlID0gQXJyYXk6OkFycmF5U3RvcmFnZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICBkZXNpcmVkQXJy
YXlNb2RlID0gQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGRlc2lyZWRBcnJheU1v
ZGUgPSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIGRlc2lyZWRB
cnJheU1vZGUgPSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2U7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGRlc2lyZWRB
cnJheU1vZGUgPSBBcnJheTo6Rm9yY2VFeGl0OwotICAgICAgICBicmVhazsKLSAgICB9CisgICAg
QVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuZG9lc0NvbnZlcnNpb24oKSk7CiAgICAgCiAgICAgR1BS
VGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
QEAgLTUxMCw3ICs0ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBu
b2RlCiAgICAgICAgIAogICAgIC8vIFdlIGNhbiBza2lwIGFsbCB0aGF0IGNvbWVzIG5leHQgaWYg
d2UgYWxyZWFkeSBoYXZlIGFycmF5IHN0b3JhZ2UuCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlcyA9Ci0gICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUodGVt
cEdQUiwgZGVzaXJlZEFycmF5TW9kZSk7CisgICAgICAgIGp1bXBTbG93Rm9yVW53YW50ZWRBcnJh
eU1vZGUodGVtcEdQUiwgbm9kZS5hcnJheU1vZGUoKSk7CiAgICAgICAgIAogICAgIG1faml0Lmxv
YWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHRlbXBHUFIpOwpAQCAtNTIxLDcgKzQ5OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICAKICAgICAvLyBJZiB3ZSdy
ZSBhbGxlZ2VkbHkgY3JlYXRpbmcgY29udGlndW91cyBzdG9yYWdlIGFuZCB0aGUgaW5kZXggaXMg
Ym9ndXMsIHRoZW4KICAgICAvLyBqdXN0IGRvbid0LgotICAgIGlmIChub2RlLmFycmF5TW9kZSgp
ID09IEFycmF5OjpUb0NvbnRpZ3VvdXMgJiYgcHJvcGVydHlSZWcgIT0gSW52YWxpZEdQUlJlZykg
eworICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAm
JiBwcm9wZXJ0eVJlZyAhPSBJbnZhbGlkR1BSUmVnKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCiAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAogICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC01MzksMTEgKzUxNiwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgICAgIAogICAgIC8vIE5vdyBjYWxs
IG91dCB0byBjcmVhdGUgdGhlIGFycmF5IHN0b3JhZ2UuCiAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnModGVtcEdQUik7Ci0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7Ci0gICAgY2Fz
ZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6CisgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91cywgdGVtcEdQUiwgYmFzZVJlZyk7
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01P
REVTOgorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFy
cmF5U3RvcmFnZSwgdGVtcEdQUiwgYmFzZVJlZyk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CkBAIC01NjYsNyArNTQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9k
ZSYgbm9kZQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmVHUFIsIFN0
cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmVHUFIpOwogICAgIHNwZWN1
bGF0aW9uQ2hlY2soCiAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZVJlZyksIE5vTm9kZSwKLSAgICAgICAganVtcFNsb3dGb3JVbndhbnRlZEFy
cmF5TW9kZShzdHJ1Y3R1cmVHUFIsIGRlc2lyZWRBcnJheU1vZGUpKTsKKyAgICAgICAganVtcFNs
b3dGb3JVbndhbnRlZEFycmF5TW9kZShzdHJ1Y3R1cmVHUFIsIG5vZGUuYXJyYXlNb2RlKCkpKTsK
ICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICBzdG9yYWdlUmVzdWx0KHRlbXBHUFIs
IG1fY29tcGlsZUluZGV4KTsKQEAgLTU3NCwxMSArNTUyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnko
Tm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMobm9kZS5hcnJheU1vZGUo
KSkpOworICAgIEFTU0VSVChub2RlLmFycmF5TW9kZSgpLmlzU3BlY2lmaWMoKSk7CiAgICAgCiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAK
LSAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KSwgbm9kZS5hcnJheU1vZGUoKSkpIHsKKyAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5
Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgdGVtcC5ncHIoKSk7CkBAIC0xODQ3LDcgKzE4MjUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0g
ICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSksIEFycmF5OjpTdHJpbmcpKTsKKyAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcp
LmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkpOwogCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwpAQCAtMjI1Niw3ICsy
MjM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKIAotICAgIEFTU0VSVChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSk7CisgICAgQVNTRVJUKG5vZGUuYXJyYXlN
b2RlKCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLApAQCAtMjQwNiw3ICsyMzg0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25GbAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEFTU0VSVCht
b2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFy
cmF5TW9kZSgpKSk7CisgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAKICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7CkBAIC0yNDQz
LDcgKzI0MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGCiAg
ICAgCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlVXNlKTsK
ICAgICAKLSAgICBBU1NFUlRfVU5VU0VEKGJhc2VVc2UsIG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0
YXRlLmZvck5vZGUoYmFzZVVzZSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGJhc2VVc2UsIG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JO
b2RlKGJhc2VVc2UpKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAg
ICAKQEAgLTMyMjYsNyArMzIwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHIKICAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogZGVzY3JpcHRv
ciA9IHR5cGVkQXJyYXlEZXNjcmlwdG9yKG5vZGUuYXJyYXlNb2RlKCkpOwogICAgIAotICAgIHN3
aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgeworICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50
eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUo
KSksIHN0b3JhZ2VSZWcpOwogICAgICAgICAKQEAgLTMyNjYsNyArMzI0NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQXIKICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgIHJldHVybjsKICAgCi0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIEFycmF5OjpBcmd1bWVudHMpKTsKKyAgICBBU1NF
UlQoQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpOwogICAgIAogICAgIC8vIFR3byByZWFsbHkgbGFtZSBjaGVj
a3MuCiAgICAgc3BlY3VsYXRpb25DaGVjaygKQEAgLTMzMjMsNyArMzMwMSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVudHMKICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OkFyZ3VtZW50cykpOworICAgIEFT
U0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAgICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVTb3VyY2UoKSwgTm9Ob2RlLApAQCAtMzM0MSw4ICsz
MzE5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogewogICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2Ny
aXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7CiAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkp
IHsKLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUzogeworICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgc3RvcmFnZSk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAgLTMzNTIsOCArMzMzMCw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmcKICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRSZWcsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2UgQVJSQVlfRUZG
RUNURlVMX01PREVTOiB7CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBzdG9yYWdlKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwpAQCAtMzUzOCw3ICszNTE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxs
b2NhdGVQcgogICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG1fY29tcGlsZUluZGV4KTsK
IH0KIAotR1BSUmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFs
KEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCitHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5
JiB0ZW1wb3JhcnksIEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgaWYgKCFwdXRCeVZhbFdp
bGxOZWVkRXh0cmFSZWdpc3RlcihhcnJheU1vZGUpKQogICAgICAgICByZXR1cm4gSW52YWxpZEdQ
UlJlZzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjI3MCwyOCArMjI3MCwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwog
ICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSYpOwogICAgIAot
ICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXk6Ok1vZGUgYXJyYXlN
b2RlKQorICAgIGJvb2wgcHV0QnlWYWxXaWxsTmVlZEV4dHJhUmVnaXN0ZXIoQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgICAgIC8v
IEZvciBBcnJheVN0b3JhZ2UsIHdlIG5lZWQgYW4gZXh0cmEgcmVnIGZvciBzdG9yZXMgdG8gaG9s
ZXMgZXhjZXB0IGlmCi0gICAgICAgIC8vIHdlJ3JlIGluIFNsb3dQdXQgbW9kZS4KLSAgICAgICAg
Y2FzZSBBUlJBWV9TVE9SQUdFX1RPX0hPTEVfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09GX0JP
VU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJS
QVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgIC8vIEZvciBDb250aWd1b3VzLCB3ZSBuZWVkIGFuIGV4dHJhIHJlZyBmb3IgYW55
IGFjY2VzcyB0aGF0IG1heSBzdG9yZQotICAgICAgICAvLyB0byB0aGUgdGFpbC4KLSAgICAgICAg
Y2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAgIGNhc2UgT1VUX09GX0JPVU5E
U19DT05USUdVT1VTX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9V
U19NT0RFUzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGFycmF5TW9kZS5tYXlTdG9yZVRvSG9sZSgpOwogICAgIH0KLSAgICBHUFJSZWcgdGVt
cG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmLCBBcnJheTo6TW9kZSk7Cisg
ICAgR1BSUmVnIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiwgQXJy
YXlNb2RlKTsKICAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1w
b3JhcnkmIHRlbXBvcmFyeSwgTm9kZSYgbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiB0ZW1w
b3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS5hcnJheU1vZGUoKSk7CkBA
IC0yNDMwLDkgKzI0MTMsOSBAQCBwdWJsaWM6CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2lu
dCogZm9yd2FyZFNwZWN1bGF0aW9uV2F0Y2hwb2ludChFeGl0S2luZCA9IFVuY291bnRhYmxlV2F0
Y2hwb2ludCk7CiAgICAgSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludCogc3BlY3VsYXRpb25XYXRj
aHBvaW50V2l0aENvbmRpdGlvbmFsRGlyZWN0aW9uKEV4aXRLaW5kLCBib29sIGlzRm9yd2FyZCk7
CiAgICAgCi0gICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIHR5cGVkQXJyYXlEZXNjcmlw
dG9yKEFycmF5OjpNb2RlKTsKKyAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogdHlwZWRB
cnJheURlc2NyaXB0b3IoQXJyYXlNb2RlKTsKICAgICAKLSAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVtcFdpdGhJbmRleGluZ1R5
cGVSZWcsIEFycmF5OjpNb2RlIGFycmF5TW9kZSk7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0
IGp1bXBTbG93Rm9yVW53YW50ZWRBcnJheU1vZGUoR1BSUmVnIHRlbXBXaXRoSW5kZXhpbmdUeXBl
UmVnLCBBcnJheU1vZGUgYXJyYXlNb2RlKTsKICAgICB2b2lkIGNoZWNrQXJyYXkoTm9kZSYpOwog
ICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYsIEdQUlJlZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlS
ZWcpOwogICAgIHZvaWQgYXJyYXlpZnkoTm9kZSYpOwo=
</data>
<flag name="review"
          id="184918"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="184919"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171120</attachid>
            <date>2012-10-27 22:05:52 -0700</date>
            <delta_ts>2012-10-27 22:05:52 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>arraymode_4.patch</filename>
            <type>text/plain</type>
            <size>116490</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxMi0xMC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRzo6QXJyYXk6Ok1vZGUgbmVlZHMgdG8gYmUgY2xlYW5lZCB1cAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgT2xpdmVyIEh1bnQuCisKKyAgICAgICAgVHVybiB0aGUgcHJldmlvdXMgbWFzc2l2ZSBB
cnJheTo6TW9kZSBlbnVtIGludG8gYSBjbGFzcyB0aGF0IGNvbnRhaW5zIGZvdXIKKyAgICAgICAg
ZmllbGRzLCB0aGUgdHlwZSwgd2hldGhlciBpdCdzIGEgSlNBcnJheSwgdGhlIGxldmVsIG9mIHNw
ZWN1bGF0aW9uLCBhbmQgdGhlCisgICAgICAgIGtpbmQgb2YgY29udmVyc2lvbiB0byBwZXJmb3Jt
LgorICAgICAgICAKKyAgICAgICAgTm8gcGVyZm9ybWFuY2Ugb3IgYmVoYXZpb3JhbCBjaGFuZ2Uu
CisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgorICAgICAgICAoSlND
OjpERkc6OkFycmF5TW9kZTo6cmVmaW5lKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmFscmVhZHlDaGVja2VkKToKKyAgICAgICAgKEpTQzo6REZHOjphcnJheVR5cGVUb1N0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlDbGFzc1RvU3RyaW5nKToKKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6YXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjphcnJheUNvbnZlcnNpb25Ub1N0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjp0b1N0cmluZyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAg
ICAgICAoREZHKToKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjpBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6dHlwZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjphcnJheUNsYXNzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBcnJheU1vZGU6OnNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJh
eU1vZGU6OmNvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YXNXb3Jk
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21Xb3JkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBcnJheU1vZGU6OndpdGhTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
QXJyYXlNb2RlOjp1c2VzQnV0dGVyZmx5KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmlzSlNBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc0luQm91bmRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1heVN0b3JlVG9Ib2xlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OmlzT3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpERkc6
OkFycmF5TW9kZTo6aXNTbG93UHV0KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmNh
bkNTRVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6bGVuZ3RoTmVlZHNT
dG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6Om1vZGVGb3JQdXQpOgorICAg
ICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTcGVjaWZpYyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJyYXlNb2RlOjpzdXBwb3J0c0xlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlN
b2RlOjpiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6QXJy
YXlNb2RlOjpkb2VzQ29udmVyc2lvbik6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjph
cnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9k
ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFycmF5TW9kZXNXaXRoSW5kZXhpbmdT
aGFwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ1NFU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OkRGRzo6bGVuZ3RoTmVlZHNTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGUp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcnJheU1vZGVBbmRFbWl0
Q2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmlu
c2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6Z2V0QXJyYXlMZW5ndGhFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrQXJyYXlFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OmdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQ
aGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Rml4dXBQaGFzZTo6Y2hlY2tBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQ
aGFzZTo6Ymxlc3NBcnJheU9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJ5VmFsSXNQdXJlKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFycmF5TW9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0QXJyYXlNb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVzY3JpcHRvcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcmd1bWVu
dHNMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZW1wb3Jh
cnlSZWdpc3RlckZvclB1dEJ5VmFsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cHV0QnlWYWxXaWxsTmVlZEV4
dHJhUmVnaXN0ZXIpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKwogMjAxMi0xMC0y
NyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJFQUxfUExBVEZP
Uk1fTkFNRSBidWlsZCBzZXR0aW5nIGlzIG5vIGxvbmdlciBuZWVkZWQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTMy
NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODM5LDcgKzgzOSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAg
ICAgICAgbm9kZS5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAg
ICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFy
cmF5OjpVbnByb2ZpbGVkOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04
NTksMTggKzg1OSwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5k
CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwog
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01PREVTOgotICAgICAgICBj
YXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgorICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNh
c2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9VVF9PRl9C
T1VORFNfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZ
X1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoU3BlY0NlbGwpOwotICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoU3BlY0ludDMyKTsKLSAgICAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBpZiAobm9kZS5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUuY29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgpAQCAtOTI1LDMxICs5MTksMzIgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCk7CiAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKTsKICAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpOwotICAgICAgICBzd2l0Y2ggKG1vZGVGb3JQdXQobm9kZS5hcnJheU1vZGUoKSkpIHsK
KyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsK
ICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgbV9pc1ZhbGlkID0g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJTl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUzoKLSAgICAgICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgICAgIGNh
c2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAg
IGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShj
aGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpKQorICAgICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgQVJSQVlfU1RP
UkFHRV9UT19IT0xFX01PREVTOgotICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlfU1RP
UkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTOgot
ICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CisgICAgICAgIGNhc2UgQXJyYXk6OlNs
b3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNw
ZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsK
LSAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5tYXlTdG9yZVRvSG9sZSgpKQorICAg
ICAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEp
LmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNw
ZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJ
bnQzMik7CkBAIC05NTcsNiArOTUyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVu
c2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051
bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJh
eToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgaWYg
KG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAg
ICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpAQCAtOTY0LDYgKzk2MCw3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgICAgICAgICBmb3JOb2RlKGNo
aWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQyKS5maWx0
ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxkM10uc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIo
U3BlY0ludDMyKTsKQEAgLTk3MSw2ICs5NjgsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihT
cGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFycmF5OjpVaW50
OEFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAg
ICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAg
ICBpZiAobV9ncmFwaFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAg
ICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC05NzgsNiArOTc2
LDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAg
ICAgICAgIGZvck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAg
ICBmb3JOb2RlKGNoaWxkMSkuZmlsdGVyKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGZvck5vZGUo
Y2hpbGQyKS5maWx0ZXIoU3BlY0ludDMyKTsKICAgICAgICAgICAgIGlmIChtX2dyYXBoW2NoaWxk
M10uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgIGZvck5vZGUoY2hp
bGQzKS5maWx0ZXIoU3BlY0ludDMyKTsKQEAgLTk4NSw2ICs5ODQsNyBAQCBib29sIEFic3RyYWN0
U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IEFycmF5OjpVaW50MTZBcnJheToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIo
U3BlY0NlbGwpOwogICAgICAgICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIp
OwogICAgICAgICAgICAgaWYgKG1fZ3JhcGhbY2hpbGQzXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpCiAgICAgICAgICAgICAgICAgZm9yTm9kZShjaGlsZDMpLmZpbHRlcihTcGVjSW50MzIpOwpA
QCAtOTkyLDYgKzk5Miw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBp
bmQKICAgICAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1iZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAg
ICAgICAgICAgZm9yTm9kZShjaGlsZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBm
b3JOb2RlKGNoaWxkMikuZmlsdGVyKFNwZWNJbnQzMik7CiAgICAgICAgICAgICBpZiAobV9ncmFw
aFtjaGlsZDNdLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICBmb3JO
b2RlKGNoaWxkMykuZmlsdGVyKFNwZWNJbnQzMik7CkBAIC05OTksMTUgKzEwMDAsMTcgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICAgICAgICAgIGZv
ck5vZGUoY2hpbGQzKS5maWx0ZXIoU3BlY051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgICAgICAgICAgZm9yTm9kZShjaGls
ZDEpLmZpbHRlcihTcGVjQ2VsbCk7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMikuZmlsdGVy
KFNwZWNJbnQzMik7CiAgICAgICAgICAgICBmb3JOb2RlKGNoaWxkMykuZmlsdGVyKFNwZWNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eToKKyAgICAgICAgICAgIGZvck5vZGUoY2hpbGQxKS5maWx0ZXIoU3BlY0NlbGwpOwogICAgICAg
ICAgICAgZm9yTm9kZShjaGlsZDIpLmZpbHRlcihTcGVjSW50MzIpOwogICAgICAgICAgICAgZm9y
Tm9kZShjaGlsZDMpLmZpbHRlcihTcGVjTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBDUkFTSCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC0xMzcwLDE4ICsxMzczLDE5IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1
bnNpZ25lZCBpbmQKICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2hlY2tB
cnJheTogewotICAgICAgICBpZiAobW9kZUFscmVhZHlDaGVja2VkKGZvck5vZGUobm9kZS5jaGls
ZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
LmFscmVhZHlDaGVja2VkKGZvck5vZGUobm9kZS5jaGlsZDEoKSkpKSB7CiAgICAgICAgICAgICBt
X2ZvdW5kQ29uc3RhbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxz
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7IC8vIExpZXMsIGJ1dCB0aGlzIGlzIGZvbGxvd2VkIGJ5IG9wZXJhdGlvbnMgKGxp
a2UgR2V0QnlWYWwpIHRoYXQgYWx3YXlzIGV4aXQsIHNvIHRoZXJlIGlzIG5vIHBvaW50IGluIHVz
IHRyeWluZyB0byBiZSBjbGV2ZXIgaGVyZS4KLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9k
ZSgpKSB7CisgICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
TExfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgog
ICAgICAgICAgICAgLy8gVGhpcyBkb2Vzbid0IGZpbHRlciBhbnl0aGluZyBtZWFuaW5nZnVsIHJp
Z2h0IG5vdy4gV2UgbWF5IHdhbnQgdG8gYWRkCiAgICAgICAgICAgICAvLyBDRkEgdHJhY2tpbmcg
b2YgYXJyYXkgbW9kZSBzcGVjdWxhdGlvbnMsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoYXQsIHlldC4K
ICAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKQEAg
LTE0MjAsMzUgKzE0MjQsMjkgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVk
IGluZAogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlckFycmF5
TW9kZXMoYXJyYXlNb2Rlc0Zvcihub2RlLmFycmF5TW9kZSgpKSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyQXJyYXlNb2Rlcyhub2RlLmFycmF5TW9kZSgpLmFycmF5TW9k
ZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgIGlm
IChtb2RlQWxyZWFkeUNoZWNrZWQoZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgbm9kZS5hcnJheU1v
ZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQoZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSkpIHsKICAgICAgICAgICAgIG1fZm91bmRDb25zdGFudHMgPSB0
cnVlOwogICAgICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAgICAgICBub2RlLnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihTcGVj
Q2VsbCk7Ci0gICAgICAgICAgICBpZiAobm9kZS5jaGlsZDIoKSkKLSAgICAgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50MzIpOwotICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLmNsZWFyKCk7Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhp
bmRleEluQmxvY2spOwotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXJB
cnJheU1vZGVzKGFycmF5TW9kZXNGb3Iobm9kZS5hcnJheU1vZGUoKSkpOwotICAgICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQorICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5jb252ZXJzaW9uKCkgPT0gQXJyYXk6
OkNvbnZlcnQpOworICAgICAgICBub2RlLnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFNwZWNDZWxsKTsKKyAgICAgICAgaWYgKG5vZGUuY2hp
bGQyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihTcGVjSW50
MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsKKyAgICAgICAgY2xvYmJl
clN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXJBcnJheU1vZGVzKG5vZGUuYXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmls
dGVyaW5nKCkpOworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6CiAgICAgICAgICAg
ICAvLyBTdHJpbmdzIGFyZSB3ZWlyZCAtIHdlIG1heSBzcGVjIGZhaWwgaWYgdGhlIHN0cmluZyB3
YXMgYSByb3BlLiBUaGF0IGlzIG9mIGNvdXJzZQogICAgICAgICAgICAgLy8gc3R1cGlkLCBhbmQg
d2Ugc2hvdWxkIGZpeCB0aGF0LCBidXQgZm9yIG5vdyBsZXQncyBhdCBsZWFzdCBiZSBob25lc3Qg
YWJvdXQgaXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEzMjc0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Myw3ICsyNzMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
ICE9IEFycmF5OjpBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuYXJy
YXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4Nyw3ICsyODcsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpBcmd1bWVudHMpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ3
Niw3ICs0NzYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLmFycmF5TW9kZSgpICE9IEFycmF5OjpBcmd1bWVudHMpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6QXJndW1lbnRz
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50QnlWYWwgaWYgd2Uga25v
dyB0aGF0CkBAIC00OTksNyArNDk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDog
ewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKSAhPSBBcnJheTo6QXJn
dW1lbnRzKQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkg
IT0gQXJyYXk6OkFyZ3VtZW50cykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTI2ICsz
MiwxMjYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1BcnJheTo6TW9k
ZSBmcm9tT2JzZXJ2ZWQoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlv
biwgYm9vbCBtYWtlU2FmZSkKK0FycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChBcnJh
eVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBib29sIG1ha2VTYWZlKQog
ewogICAgIHN3aXRjaCAocHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkpIHsKICAgICBjYXNl
IDA6Ci0gICAgICAgIHJldHVybiBBcnJheTo6VW5wcm9maWxlZDsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6VW5wcm9maWxlZCk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJy
YXkpOgogICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5
SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCi0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OlRv
Q29udGlndW91czsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hldGhlciB0byBnbyB0byBjb250
aWd1b3VzIG9yIGFycmF5IHN0b3JhZ2UuIFdlJ3JlIG1ha2luZyBhIHN0YXRpYyBndWVzcyBoZXJl
LiBJbiBmdXR1cmUgd2Ugc2hvdWxkIHVzZSBleGl0IHByb2ZpbGluZyBmb3IgdGhpcy4KLSAgICAg
ICAgcmV0dXJuIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6
T3V0T2ZCb3VuZHMsIEFycmF5OjpDb252ZXJ0KTsgLy8gRklYTUU6IHdlIGRvbid0IGtub3cgd2hl
dGhlciB0byBnbyB0byBjb250aWd1b3VzIG9yIGFycmF5IHN0b3JhZ2UuIFdlJ3JlIG1ha2luZyBh
IHN0YXRpYyBndWVzcyBoZXJlLiBJbiBmdXR1cmUgd2Ugc2hvdWxkIHVzZSBleGl0IHByb2ZpbGlu
ZyBmb3IgdGhpcy4KKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9ucyk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91
cyk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpDb250aWd1b3VzT3V0T2ZCb3Vu
ZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/IEFycmF5OjpDb250aWd1b3VzVG9UYWls
IDogQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpD
b250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24o
cHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRp
Z3VvdXMpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlXaXRoQ29udGln
dW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKCkgPyBBcnJheTo6QXJy
YXlXaXRoQ29udGlndW91c1RvVGFpbCA6IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzKTsKKyAg
ICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OkFycmF5LCBB
cnJheTo6QXNJcykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNl
IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIG1ha2VTYWZlID8gQXJyYXk6OlBvc3Np
Ymx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsIDogQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cyk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUo
QXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0
aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJh
eTo6QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/
IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlTdG9yYWdlKTsKKyAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXks
IEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0aFNwZWN1
bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gbWFrZVNhZmUgPyBBcnJheTo6QXJyYXlX
aXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3RvcmVUb0hvbGUoKSA/
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6QXJyYXlXaXRoQXJy
YXlTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdl
LCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFr
ZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBB
cnJheTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJ
cykud2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBtYWtlU2FmZSA/IEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIDogKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xl
KCkgPyBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGUgOiBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcyku
d2l0aFNwZWN1bGF0aW9uKHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6
UG9zc2libHlBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6UG9zc2libHlBcnJheSwg
QXJyYXk6OkFzSXMpLndpdGhTcGVjdWxhdGlvbihwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2Fz
ZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoTm9u
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpUb0FycmF5U3Rv
cmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJh
eTo6Tm9uQXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmlsZSwgbWFr
ZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNB
cnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheTo6
QXJyYXlUb0FycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJy
YXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24o
cHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENv
bnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0
b3JhZ2U7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJy
YXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpDb252ZXJ0KS53aXRoU3BlY3VsYXRpb24ocHJvZmls
ZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJh
eTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAg
ICAgICAgICAgcmV0dXJuIEFycmF5OjpUb0NvbnRpZ3VvdXM7Ci0gICAgICAgIHJldHVybiBBcnJh
eTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUo
QXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9mQm91bmRzLCBB
cnJheTo6Q29udmVydCk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgogICAgICAgICBpZiAoYWN0aW9uID09
IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkp
Ci0gICAgICAgICAgICByZXR1cm4gQXJyYXk6OlRvQXJyYXlTdG9yYWdlOwotICAgICAgICByZXR1
cm4gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM7CisgICAgICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9m
Qm91bmRzLCBBcnJheTo6Q29udmVydCk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5
KSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBj
YXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdl
KToKICAgICAgICAgaWYgKGFjdGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUlu
dGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpKQotICAgICAgICAgICAgcmV0dXJuIEFycmF5OjpUb1Ns
b3dQdXRBcnJheVN0b3JhZ2U7Ci0gICAgICAgIHJldHVybiBBcnJheTo6U2VsZWN0VXNpbmdQcmVk
aWN0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6Ok91dE9mQm91bmRzLCBBcnJheTo6Q29u
dmVydCk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGlj
dGlvbnMpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGlzIHBv
c3NpYmx5IGEga2luZCBvZiBhcnJheSBmb3Igd2hpY2gsIHRob3VnaCB0aGVyZSBpcyBubwogICAg
ICAgICAvLyB1c2VmdWwgZGF0YSBpbiB0aGUgYXJyYXkgcHJvZmlsZSwgd2UgbWF5IGJlIGFibGUg
dG8gZXh0cmFjdCB1c2VmdWwgZGF0YSBmcm9tCiAgICAgICAgIC8vIHRoZSB2YWx1ZSBwcm9maWxl
cyBvZiB0aGUgaW5wdXRzLiBIZW5jZSwgd2UgbGVhdmUgaXQgYXMgdW5kZWNpZGVkLCBhbmQgbGV0
CiAgICAgICAgIC8vIHRoZSBwcmVkaWN0aW9ucyBwcm9wYWdhdG9yIGRlY2lkZSBsYXRlci4KLSAg
ICAgICAgcmV0dXJuIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICB9CiB9CiAK
LUFycmF5OjpNb2RlIHJlZmluZUFycmF5TW9kZShBcnJheTo6TW9kZSBhcnJheU1vZGUsIFNwZWN1
bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KQorQXJyYXlNb2RlIEFycmF5TW9k
ZTo6cmVmaW5lKFNwZWN1bGF0ZWRUeXBlIGJhc2UsIFNwZWN1bGF0ZWRUeXBlIGluZGV4KSBjb25z
dAogewogICAgIGlmICghYmFzZSB8fCAhaW5kZXgpIHsKICAgICAgICAgLy8gSXQgY2FuIGJlIHRo
YXQgd2UgaGFkIGEgbGVnaXRpbWF0ZSBhcnJheU1vZGUgYnV0IG5vIGluY29taW5nIHByZWRpY3Rp
b25zLiBUaGF0J2xsCiAgICAgICAgIC8vIGhhcHBlbiBpZiB3ZSBpbmxpbmVkIGNvZGUgYmFzZWQg
b24sIHNheSwgYSBnbG9iYWwgdmFyaWFibGUgd2F0Y2hwb2ludCwgYnV0IGxhdGVyCiAgICAgICAg
IC8vIHJlYWxpemVkIHRoYXQgdGhlIGNhbGxzaXRlIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IGV4
ZWN1dGVkLiBJdCBtYXkgYmUgd29ydGh3aGlsZQogICAgICAgICAvLyB0byBmaXggdGhhdCwgYnV0
IGZvciBub3cgSSdtIGxlYXZpbmcgaXQgYXMtaXMuCi0gICAgICAgIHJldHVybiBBcnJheTo6Rm9y
Y2VFeGl0OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpGb3JjZUV4aXQpOwogICAg
IH0KICAgICAKICAgICBpZiAoIWlzSW50MzJTcGVjdWxhdGlvbihpbmRleCkgfHwgIWlzQ2VsbFNw
ZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkdlbmVyaWM7CisgICAgICAg
IHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgIAotICAgIGlmIChhcnJheU1v
ZGUgPT0gQXJyYXk6OlVucHJvZmlsZWQpIHsKKyAgICBpZiAodHlwZSgpID09IEFycmF5OjpVbnBy
b2ZpbGVkKSB7CiAgICAgICAgIC8vIElmIHRoZSBpbmRleGluZyB0eXBlIHdhc24ndCByZWNvcmRl
ZCBpbiB0aGUgYXJyYXkgcHJvZmlsZSBidXQgdGhlIHZhbHVlcyBhcmUKICAgICAgICAgLy8gYmFz
ZT1jZWxsIHByb3BlcnR5PWludCwgdGhlbiB3ZSBrbm93IHRoYXQgdGhpcyBhY2Nlc3MgZGlkbid0
IGV4ZWN1dGUuCi0gICAgICAgIHJldHVybiBBcnJheTo6Rm9yY2VFeGl0OworICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpGb3JjZUV4aXQpOwogICAgIH0KICAgICAKLSAgICBpZiAoYXJy
YXlNb2RlICE9IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKQotICAgICAgICByZXR1cm4g
YXJyYXlNb2RlOworICAgIGlmICh0eXBlKCkgIT0gQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnMpCisgICAgICAgIHJldHVybiAqdGhpczsKICAgICAKICAgICBpZiAoaXNTdHJpbmdTcGVjdWxh
dGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpTdHJpbmc7CisgICAgICAgIHJldHVy
biBBcnJheU1vZGUoQXJyYXk6OlN0cmluZyk7CiAgICAgCiAgICAgaWYgKGlzQXJndW1lbnRzU3Bl
Y3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6QXJndW1lbnRzOworICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcmd1bWVudHMpOwogICAgIAogICAgIGlmIChpc0lu
dDhBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OkludDhBcnJh
eTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50OEFycmF5KTsKICAgICAKICAg
ICBpZiAoaXNJbnQxNkFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJh
eTo6SW50MTZBcnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MTZBcnJh
eSk7CiAgICAgCiAgICAgaWYgKGlzSW50MzJBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAg
ICByZXR1cm4gQXJyYXk6OkludDMyQXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkludDMyQXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQ4QXJyYXlTcGVjdWxhdGlvbihi
YXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpVaW50OEFycmF5OworICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpVaW50OEFycmF5KTsKICAgICAKICAgICBpZiAoaXNVaW50OENsYW1w
ZWRBcnJheVNwZWN1bGF0aW9uKGJhc2UpKQotICAgICAgICByZXR1cm4gQXJyYXk6OlVpbnQ4Q2xh
bXBlZEFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpVaW50OENsYW1wZWRB
cnJheSk7CiAgICAgCiAgICAgaWYgKGlzVWludDE2QXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAg
ICAgICAgcmV0dXJuIEFycmF5OjpVaW50MTZBcnJheTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6VWludDE2QXJyYXkpOwogICAgIAogICAgIGlmIChpc1VpbnQzMkFycmF5U3BlY3Vs
YXRpb24oYmFzZSkpCi0gICAgICAgIHJldHVybiBBcnJheTo6VWludDMyQXJyYXk7CisgICAgICAg
IHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlVpbnQzMkFycmF5KTsKICAgICAKICAgICBpZiAoaXNG
bG9hdDMyQXJyYXlTcGVjdWxhdGlvbihiYXNlKSkKLSAgICAgICAgcmV0dXJuIEFycmF5OjpGbG9h
dDMyQXJyYXk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkZsb2F0MzJBcnJheSk7
CiAgICAgCiAgICAgaWYgKGlzRmxvYXQ2NEFycmF5U3BlY3VsYXRpb24oYmFzZSkpCi0gICAgICAg
IHJldHVybiBBcnJheTo6RmxvYXQ2NEFycmF5OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpGbG9hdDY0QXJyYXkpOwogICAgIAotICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsKKyAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljKTsKIH0KIAotYm9vbCBtb2RlQWxyZWFk
eUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK2Jv
b2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJiB2YWx1ZSkgY29uc3QK
IHsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIHN3aXRjaCAodHlwZSgpKSB7CiAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIApAQCAt
MTYyLDY0ICsxNjIsNDQgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQoQWJzdHJhY3RWYWx1ZSYg
dgogICAgICAgICByZXR1cm4gaXNTdHJpbmdTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpOwogICAg
ICAgICAKICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKLSAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6UG9z
c2libHlBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9D
b250aWd1b3VzOgorICAgICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgewor
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9k
ZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkKKyAgICAgICAgICAgICAgICAmJiBoYXNDb250aWd1b3VzKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkK
KyAgICAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xl
dG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgIH0KICAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1
b3VzKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAgICAmJiBoYXND
b250aWd1b3VzKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSk7CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3Vv
dXM6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGlmIChhcnJh
eU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQ29udGlndW91cykpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAg
ICAgICAgJiYgaGFzQ29udGlndW91cyh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7Ci0K
ICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOgotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJh
eTo6VG9BcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlT
dG9yYWdlOgorICAgICAgICBpZiAoYXJyYXlDbGFzcygpID09IEFycmF5OjpBcnJheSkgeworICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMs
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5oYXNTaW5nbGV0b24oKQorICAgICAgICAgICAgICAgICYmIGhhc0Zhc3RBcnJheVN0b3Jh
Z2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpKQorICAgICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgfQogICAgICAg
ICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRo
QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCiAgICAgICAgICAg
ICAmJiBoYXNGYXN0QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OlNs
b3dQdXRBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToK
KyAgICAgICAgaWYgKGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXkpIHsKKyAgICAgICAgICAg
IGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
KyAgICAgICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgICYm
ICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBl
KCkgJiBJc0FycmF5KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlD
aGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5
U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
CiAgICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCi0gICAgY2FzZSBB
cnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFy
cmF5U3RvcmFnZVRvSG9sZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VP
dXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAg
ICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJh
eU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKQotICAgICAgICAgICAgJiYgaGFzRmFzdEFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSXNBcnJheSk7Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFs
dWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiBoYXNBcnJheVN0b3JhZ2UodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQotICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIElzQXJyYXkpOwotICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVu
dHM6CiAgICAgICAgIHJldHVybiBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSk7
CiAgICAgICAgIApAQCAtMjU1LDEzICsyMzUsMTMgQEAgYm9vbCBtb2RlQWxyZWFkeUNoZWNrZWQo
QWJzdHJhY3RWYWx1ZSYgdgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgQ1JBU0goKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWNv
bnN0IGNoYXIqIG1vZGVUb1N0cmluZyhBcnJheTo6TW9kZSBtb2RlKQorY29uc3QgY2hhciogYXJy
YXlUeXBlVG9TdHJpbmcoQXJyYXk6OlR5cGUgdHlwZSkKIHsKLSAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgogICAgICAgICByZXR1cm4gIlNlbGVjdFVzaW5nUHJlZGljdGlvbnMiOwogICAgIGNhc2Ug
QXJyYXk6OlVucHJvZmlsZWQ6CkBAIC0yNzQsNTYgKzI1NCwxMCBAQCBjb25zdCBjaGFyKiBtb2Rl
VG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgICAgIHJldHVybiAiU3RyaW5nIjsKICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICByZXR1cm4gIkNvbnRpZ3VvdXMiOwotICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgICAgIHJldHVybiAiQ29udGlndW91
c1RvVGFpbCI7Ci0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c091dE9mQm91bmRzOgotICAgICAg
ICByZXR1cm4gIkNvbnRpZ3VvdXNPdXRPZkJvdW5kcyI7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlX
aXRoQ29udGlndW91czoKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3VzIjsKLSAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOgotICAgICAgICByZXR1cm4g
IkFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENv
bnRpZ3VvdXNPdXRPZkJvdW5kczoKLSAgICAgICAgcmV0dXJuICJBcnJheVdpdGhDb250aWd1b3Vz
T3V0T2ZCb3VuZHMiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91
czoKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXMiOwotICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbDoKLSAgICAgICAgcmV0
dXJuICJQb3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwiOwotICAgIGNhc2UgQXJyYXk6
OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgotICAgICAgICByZXR1cm4g
IlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzIjsKICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CiAgICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdlIjsKLSAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgICAgIHJldHVybiAiQXJyYXlTdG9yYWdl
VG9Ib2xlIjsKICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBy
ZXR1cm4gIlNsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsK
LSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAi
QXJyYXlXaXRoQXJyYXlTdG9yYWdlIjsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0
b3JhZ2VUb0hvbGU6Ci0gICAgICAgIHJldHVybiAiQXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xl
IjsKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAg
ICByZXR1cm4gIkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOgotICAgICAgICByZXR1cm4gIkFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzIjsKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFy
cmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aEFy
cmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2VUb0hvbGU6Ci0gICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VU
b0hvbGUiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZToKLSAgICAgICAgcmV0dXJuICJQb3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UiOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZC
b3VuZHM6Ci0gICAgICAgIHJldHVybiAiUG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kcyI7Ci0gICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgotICAgICAgICByZXR1cm4g
IlRvQ29udGlndW91cyI7Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAg
IHJldHVybiAiVG9BcnJheVN0b3JhZ2UiOwotICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5
U3RvcmFnZToKLSAgICAgICAgcmV0dXJuICJUb1Nsb3dQdXRBcnJheVN0b3JhZ2UiOwotICAgIGNh
c2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiAiQXJyYXlUb0Fy
cmF5U3RvcmFnZSI7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdl
OgotICAgICAgICByZXR1cm4gIlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZSI7CiAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gIkFyZ3VtZW50cyI7CiAgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgpAQCAtMzUzLDYgKzI4Nyw1MyBAQCBjb25zdCBjaGFyKiBtb2Rl
VG9TdHJpbmcoQXJyYXk6Ok1vZGUgbW9kCiAgICAgfQogfQogCitjb25zdCBjaGFyKiBhcnJheUNs
YXNzVG9TdHJpbmcoQXJyYXk6OkNsYXNzIGFycmF5Q2xhc3MpCit7CisgICAgc3dpdGNoIChhcnJh
eUNsYXNzKSB7CisgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgIHJldHVybiAiQXJyYXki
OworICAgIGNhc2UgQXJyYXk6Ok5vbkFycmF5OgorICAgICAgICByZXR1cm4gIk5vbkFycmF5IjsK
KyAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5OgorICAgICAgICByZXR1cm4gIlBvc3NpYmx5
QXJyYXkiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAgIH0K
K30KKworY29uc3QgY2hhciogYXJyYXlTcGVjdWxhdGlvblRvU3RyaW5nKEFycmF5OjpTcGVjdWxh
dGlvbiBzcGVjdWxhdGlvbikKK3sKKyAgICBzd2l0Y2ggKHNwZWN1bGF0aW9uKSB7CisgICAgY2Fz
ZSBBcnJheTo6SW5Cb3VuZHM6CisgICAgICAgIHJldHVybiAiSW5Cb3VuZHMiOworICAgIGNhc2Ug
QXJyYXk6OlRvSG9sZToKKyAgICAgICAgcmV0dXJuICJUb0hvbGUiOworICAgIGNhc2UgQXJyYXk6
Ok91dE9mQm91bmRzOgorICAgICAgICByZXR1cm4gIk91dE9mQm91bmRzIjsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gIlVua25vd24hIjsKKyAgICB9Cit9CisKK2NvbnN0IGNoYXIqIGFy
cmF5Q29udmVyc2lvblRvU3RyaW5nKEFycmF5OjpDb252ZXJzaW9uIGNvbnZlcnNpb24pCit7Cisg
ICAgc3dpdGNoIChjb252ZXJzaW9uKSB7CisgICAgY2FzZSBBcnJheTo6QXNJczoKKyAgICAgICAg
cmV0dXJuICJBc0lzIjsKKyAgICBjYXNlIEFycmF5OjpDb252ZXJ0OgorICAgICAgICByZXR1cm4g
IkNvbnZlcnQiOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93biEiOworICAg
IH0KK30KKworY29uc3QgY2hhciogQXJyYXlNb2RlOjp0b1N0cmluZygpIGNvbnN0Cit7CisgICAg
c3RhdGljIGNoYXIgYnVmZmVyWzI1Nl07CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSwgIiVzJXMlcyVzIiwgYXJyYXlUeXBlVG9TdHJpbmcodHlwZSgpKSwgYXJyYXlDbGFzc1Rv
U3RyaW5nKGFycmF5Q2xhc3MoKSksIGFycmF5U3BlY3VsYXRpb25Ub1N0cmluZyhzcGVjdWxhdGlv
bigpKSwgYXJyYXlDb252ZXJzaW9uVG9TdHJpbmcoY29udmVyc2lvbigpKSk7CisgICAgcmV0dXJu
IGJ1ZmZlcjsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmgJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJy
YXlNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDQyICs0NiwxNiBAQCBlbnVtIEFjdGlvbiB7
CiAgICAgV3JpdGUKIH07CiAKLWVudW0gTW9kZSB7CitlbnVtIFR5cGUgewogICAgIFNlbGVjdFVz
aW5nUHJlZGljdGlvbnMsIC8vIEltcGxpZXMgdGhhdCB3ZSBuZWVkIHByZWRpY3Rpb25zIHRvIGRl
Y2lkZS4gV2Ugd2lsbCBuZXZlciBnZXQgdG8gdGhlIGJhY2tlbmQgaW4gdGhpcyBtb2RlLgogICAg
IFVucHJvZmlsZWQsIC8vIEltcGxpZXMgdGhhdCBhcnJheSBwcm9maWxpbmcgZGlkbid0IHNlZSBh
bnl0aGluZy4gQnV0IHRoYXQgY291bGQgYmUgYmVjYXVzZSB0aGUgb3BlcmFuZHMgZGlkbid0IGNv
bXBseSB3aXRoIGJhc2ljIHR5cGUgYXNzdW1wdGlvbnMgKGJhc2UgaXMgY2VsbCwgcHJvcGVydHkg
aXMgaW50KS4gVGhpcyBlaXRoZXIgYmVjb21lcyBHZW5lcmljIG9yIEZvcmNlRXhpdCBkZXBlbmRp
bmcgb24gdmFsdWUgcHJvZmlsaW5nLgogICAgIEZvcmNlRXhpdCwgLy8gSW1wbGllcyB0aGF0IHdl
IGhhdmUgbm8gaWRlYSBob3cgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiwgc28gd2Ugc2hvdWxk
IGp1c3QgZ2l2ZSB1cC4KICAgICBHZW5lcmljLAogICAgIFN0cmluZywKICAgICAKLSAgICAvLyBN
b2RlcyBvZiBjb252ZW50aW9uYWwgaW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBu
b24gc2lkZS1lZmZlY3RpbmcuCiAgICAgQ29udGlndW91cywKLSAgICBDb250aWd1b3VzVG9UYWls
LAotICAgIENvbnRpZ3VvdXNPdXRPZkJvdW5kcywKLSAgICBBcnJheVdpdGhDb250aWd1b3VzLAot
ICAgIEFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCi0gICAgQXJyYXlXaXRoQ29udGlndW91c091
dE9mQm91bmRzLAotICAgIFBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cywKLSAgICBQb3NzaWJs
eUFycmF5V2l0aENvbnRpZ3VvdXNUb1RhaWwsCi0gICAgUG9zc2libHlBcnJheVdpdGhDb250aWd1
b3VzT3V0T2ZCb3VuZHMsCiAgICAgQXJyYXlTdG9yYWdlLAotICAgIEFycmF5U3RvcmFnZVRvSG9s
ZSwKICAgICBTbG93UHV0QXJyYXlTdG9yYWdlLAotICAgIEFycmF5U3RvcmFnZU91dE9mQm91bmRz
LAotICAgIEFycmF5V2l0aEFycmF5U3RvcmFnZSwKLSAgICBBcnJheVdpdGhBcnJheVN0b3JhZ2VU
b0hvbGUsCi0gICAgQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSwKLSAgICBBcnJheVdpdGhB
cnJheVN0b3JhZ2VPdXRPZkJvdW5kcywKLSAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFn
ZSwKLSAgICBQb3NzaWJseUFycmF5V2l0aEFycmF5U3RvcmFnZVRvSG9sZSwKLSAgICBQb3NzaWJs
eUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgUG9zc2libHlBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kcywKLSAgICAKLSAgICAvLyBNb2RlcyBvZiBjb252ZW50aW9uYWwg
aW5kZXhlZCBzdG9yYWdlIHdoZXJlIHRoZSBjaGVjayBpcyBzaWRlLWVmZmVjdGluZy4KLSAgICBU
b0NvbnRpZ3VvdXMsCi0gICAgVG9BcnJheVN0b3JhZ2UsCi0gICAgQXJyYXlUb0FycmF5U3RvcmFn
ZSwKLSAgICBQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2UsCi0gICAgVG9TbG93UHV0QXJyYXlT
dG9yYWdlLAogICAgIAogICAgIEFyZ3VtZW50cywKICAgICBJbnQ4QXJyYXksCkBAIC05NCwzMDQg
KzY4LDI4MCBAQCBlbnVtIE1vZGUgewogICAgIEZsb2F0MzJBcnJheSwKICAgICBGbG9hdDY0QXJy
YXkKIH07Ci19IC8vIG5hbWVzcGFjZSBBcnJheQotCi0vLyBIZWxwZXJzIGZvciAnY2FzZScgc3Rh
dGVtZW50cy4gRm9yIGV4YW1wbGUsIHNheWluZyAiY2FzZSBBbGxBcnJheVN0b3JhZ2VNb2Rlczoi
Ci0vLyBpcyB0aGUgc2FtZSBhcyBoYXZpbmcgbXVsdGlwbGUgY2FzZSBzdGF0ZW1lbnRzIGxpc3Rp
bmcgb2ZmIGFsbCBvZiB0aGUgbW9kZXMgdGhhdAotLy8gaGF2ZSB0aGUgd29yZCAiQXJyYXlTdG9y
YWdlIiBpbiB0aGVtLgotCi0vLyBGaXJzdDogaGVscGVycyBmb3Igbm9uLXNpZGUtZWZmZWN0aW5n
IGNoZWNrcy4KLSNkZWZpbmUgTk9OX0FSUkFZX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIEFycmF5OjpDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDogICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0T2ZC
b3VuZHM6ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQ29udGlndW91czogICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwotI2RlZmluZSBBUlJBWV9XSVRI
X0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkFy
cmF5V2l0aENvbnRpZ3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kcwotI2RlZmluZSBBTExf
Q09OVElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTk9O
X0FSUkFZX0NPTlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19NT0RFUwotI2RlZmluZSBJTl9CT1VORFNfQ09O
VElHVU9VU19NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkNvbnRp
Z3VvdXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFy
cmF5OjpBcnJheVdpdGhDb250aWd1b3VzOiAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNh
c2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91cwotI2RlZmluZSBDT05USUdVT1VT
X1RPX1RBSUxfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkNv
bnRpZ3VvdXNUb1RhaWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzVG9UYWlsOiAgICAgICAgICAgICAgICAgXAotICAg
IGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c1RvVGFpbAotI2RlZmluZSBP
VVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVMgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
QXJyYXk6OkNvbnRpZ3VvdXNPdXRPZkJvdW5kczogICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6ICAgICAgICAg
ICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91
bmRzCi0jZGVmaW5lIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZTogICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTog
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczogICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2li
bHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQ
b3NzaWJseUFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OlBvc3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLSNkZWZpbmUgQVJS
QVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgXAotICAgIEFy
cmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAgICAgICAgICAgICAg
IFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlOiAgICAgICAg
ICAgICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRz
Ci0jZGVmaW5lIEFMTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RFUzogICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGNhc2UgQVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTCi0jZGVm
aW5lIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBBcnJheTo6QXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZTogICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2UK
LSNkZWZpbmUgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIEFycmF5OjpBcnJheVN0b3JhZ2VUb0hvbGU6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlVG9Ib2xlOiAg
ICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5U3Rv
cmFnZVRvSG9sZQotI2RlZmluZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlOiAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZQotI2RlZmluZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JB
R0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OkFycmF5U3RvcmFnZU91dE9m
Qm91bmRzOiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczogICAgICAgICAgXAotICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHMKLQotLy8gTmV4dDogaGVscGVy
cyBmb3Igc2lkZS1lZmZlY3RpbmcgY2hlY2tzLgotI2RlZmluZSBOT05fQVJSQVlfRUZGRUNURlVM
X01PREVTICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OlRvQ29udGlndW91
czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjYXNlIEFycmF5OjpU
b0FycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2UgQXJy
YXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZTogICAgICAgICAgICAgICAgICAgICBcCi0gICAgY2Fz
ZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFSUkFZX0VGRkVD
VEZVTF9NT0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBcnJheTo6QXJy
YXlUb0FycmF5U3RvcmFnZQotI2RlZmluZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVMg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgQXJyYXk6OlRvQ29udGlndW91cwotI2RlZmluZSBB
TExfRUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVMgICAgICAgICAgICAgICAgICBcCi0gICAg
QXJyYXk6OlRvQXJyYXlTdG9yYWdlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGNhc2UgQXJyYXk6OkFycmF5VG9BcnJheVN0b3JhZ2U6ICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVRvQXJyYXlTdG9yYWdlCi0j
ZGVmaW5lIFNMT1dfUFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTICAgICAgICAgICAg
IFwKLSAgICBBcnJheTo6VG9TbG93UHV0QXJyYXlTdG9yYWdlCi0jZGVmaW5lIEFMTF9FRkZFQ1RG
VUxfTU9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBBTExfRUZGRUNU
RlVMX0NPTlRJR1VPVVNfTU9ERVM6ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTCi0KLUFycmF5OjpNb2RlIGZyb21PYnNl
cnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKIAotQXJy
YXk6Ok1vZGUgcmVmaW5lQXJyYXlNb2RlKEFycmF5OjpNb2RlLCBTcGVjdWxhdGVkVHlwZSBiYXNl
LCBTcGVjdWxhdGVkVHlwZSBpbmRleCk7CitlbnVtIENsYXNzIHsKKyAgICBOb25BcnJheSwKKyAg
ICBBcnJheSwKKyAgICBQb3NzaWJseUFycmF5Cit9OwogCi1ib29sIG1vZGVBbHJlYWR5Q2hlY2tl
ZChBYnN0cmFjdFZhbHVlJiwgQXJyYXk6Ok1vZGUpOworZW51bSBTcGVjdWxhdGlvbiB7CisgICAg
SW5Cb3VuZHMsCisgICAgVG9Ib2xlLAorICAgIE91dE9mQm91bmRzCit9OwogCi1jb25zdCBjaGFy
KiBtb2RlVG9TdHJpbmcoQXJyYXk6Ok1vZGUpOworZW51bSBDb252ZXJzaW9uIHsKKyAgICBBc0lz
LAorICAgIENvbnZlcnQKK307Cit9IC8vIG5hbWVzcGFjZSBBcnJheQogCi1pbmxpbmUgYm9vbCBt
b2RlVXNlc0J1dHRlcmZseShBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgotICAgIGNhc2UgQUxM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX01PREVTOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Citj
b25zdCBjaGFyKiBhcnJheVR5cGVUb1N0cmluZyhBcnJheTo6VHlwZSk7Citjb25zdCBjaGFyKiBh
cnJheUNsYXNzVG9TdHJpbmcoQXJyYXk6OkNsYXNzKTsKK2NvbnN0IGNoYXIqIGFycmF5U3BlY3Vs
YXRpb25Ub1N0cmluZyhBcnJheTo6U3BlY3VsYXRpb24pOworY29uc3QgY2hhciogYXJyYXlDb252
ZXJzaW9uVG9TdHJpbmcoQXJyYXk6OkNvbnZlcnNpb24pOworCitjbGFzcyBBcnJheU1vZGUgewor
cHVibGljOgorICAgIEFycmF5TW9kZSgpCisgICAgeworICAgICAgICB1LmFzQnl0ZXMudHlwZSA9
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOworICAgICAgICB1LmFzQnl0ZXMuYXJyYXlD
bGFzcyA9IEFycmF5OjpOb25BcnJheTsKKyAgICAgICAgdS5hc0J5dGVzLnNwZWN1bGF0aW9uID0g
QXJyYXk6OkluQm91bmRzOworICAgICAgICB1LmFzQnl0ZXMuY29udmVyc2lvbiA9IEFycmF5OjpB
c0lzOwogICAgIH0KLX0KLQotaW5saW5lIGJvb2wgbW9kZUlzSlNBcnJheShBcnJheTo6TW9kZSBh
cnJheU1vZGUpCi17Ci0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFSUkFZX1dJ
VEhfQ09OVElHVU9VU19NT0RFUzoKLSAgICBjYXNlIEFSUkFZX1dJVEhfQVJSQVlfU1RPUkFHRV9N
T0RFUzoKLSAgICBjYXNlIEFSUkFZX0VGRkVDVEZVTF9NT0RFUzoKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGV4cGxp
Y2l0IEFycmF5TW9kZShBcnJheTo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVz
LnR5cGUgPSB0eXBlOworICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IEFycmF5OjpOb25B
cnJheTsKKyAgICAgICAgdS5hc0J5dGVzLnNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzOwor
ICAgICAgICB1LmFzQnl0ZXMuY29udmVyc2lvbiA9IEFycmF5OjpBc0lzOwogICAgIH0KLX0KLQot
aW5saW5lIGJvb2wgaXNJbkJvdW5kc0FjY2VzcyhBcnJheTo6TW9kZSBhcnJheU1vZGUpCi17Ci0g
ICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIElOX0JPVU5EU19DT05USUdVT1VTX01P
REVTOgotICAgIGNhc2UgQ09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgIGNhc2UgQVJSQVlf
U1RPUkFHRV9UT19IT0xFX01PREVTOgotICAgIGNhc2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0Vf
TU9ERVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBBcnJheU1vZGUoQXJyYXk6OlR5cGUgdHlwZSwgQXJyYXk6OkNs
YXNzIGFycmF5Q2xhc3MsIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbiwgQXJyYXk6OkNv
bnZlcnNpb24gY29udmVyc2lvbikKKyAgICB7CisgICAgICAgIHUuYXNCeXRlcy50eXBlID0gdHlw
ZTsKKyAgICAgICAgdS5hc0J5dGVzLmFycmF5Q2xhc3MgPSBhcnJheUNsYXNzOworICAgICAgICB1
LmFzQnl0ZXMuc3BlY3VsYXRpb24gPSBzcGVjdWxhdGlvbjsKKyAgICAgICAgdS5hc0J5dGVzLmNv
bnZlcnNpb24gPSBjb252ZXJzaW9uOwogICAgIH0KLX0KLQotaW5saW5lIGJvb2wgaXNTbG93UHV0
QWNjZXNzKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBzd2l0Y2ggKGFycmF5TW9kZSkg
ewotICAgIGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIFNMT1df
UFVUX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQXJyYXlNb2Rl
KEFycmF5OjpUeXBlIHR5cGUsIEFycmF5OjpDbGFzcyBhcnJheUNsYXNzLCBBcnJheTo6Q29udmVy
c2lvbiBjb252ZXJzaW9uKQorICAgIHsKKyAgICAgICAgdS5hc0J5dGVzLnR5cGUgPSB0eXBlOwor
ICAgICAgICB1LmFzQnl0ZXMuYXJyYXlDbGFzcyA9IGFycmF5Q2xhc3M7CisgICAgICAgIHUuYXNC
eXRlcy5zcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kczsKKyAgICAgICAgdS5hc0J5dGVzLmNv
bnZlcnNpb24gPSBjb252ZXJzaW9uOwogICAgIH0KLX0KLQotaW5saW5lIGJvb2wgbWF5U3RvcmVU
b1RhaWwoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
Ci0gICAgY2FzZSBDT05USUdVT1VTX1RPX1RBSUxfTU9ERVM6Ci0gICAgY2FzZSBPVVRfT0ZfQk9V
TkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNf
TU9ERVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBBcnJheTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8QXJyYXk6OlR5cGU+KHUuYXNCeXRlcy50eXBlKTsgfQorICAgIEFycmF5OjpDbGFz
cyBhcnJheUNsYXNzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6OkNsYXNzPih1
LmFzQnl0ZXMuYXJyYXlDbGFzcyk7IH0KKyAgICBBcnJheTo6U3BlY3VsYXRpb24gc3BlY3VsYXRp
b24oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTo6U3BlY3VsYXRpb24+KHUuYXNC
eXRlcy5zcGVjdWxhdGlvbik7IH0KKyAgICBBcnJheTo6Q29udmVyc2lvbiBjb252ZXJzaW9uKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk6OkNvbnZlcnNpb24+KHUuYXNCeXRlcy5j
b252ZXJzaW9uKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGFzV29yZCgpIGNvbnN0IHsgcmV0dXJu
IHUuYXNXb3JkOyB9CisgICAgCisgICAgc3RhdGljIEFycmF5TW9kZSBmcm9tV29yZCh1bnNpZ25l
ZCB3b3JkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh3b3JkKTsKICAgICB9Ci19
Ci0KLWlubGluZSBib29sIG1heVN0b3JlVG9Ib2xlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsK
LSAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xF
X01PREVTOgotICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAg
IGNhc2UgU0xPV19QVVRfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICBjYXNlIEFMTF9FRkZFQ1RG
VUxfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN0YXRpYyBBcnJheU1vZGUgZnJv
bU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOwor
ICAgIAorICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24oQXJyYXk6OlNwZWN1bGF0aW9uIHNw
ZWN1bGF0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlKCks
IGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24sIGNvbnZlcnNpb24oKSk7CiAgICAgfQotfQotCi1p
bmxpbmUgYm9vbCBjYW5DU0VTdG9yYWdlKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBz
d2l0Y2ggKGFycmF5TW9kZSkgewotICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnM6Ci0gICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKLSAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6Ci0gICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAKKyAgICBBcnJheU1vZGUgd2l0aFNwZWN1bGF0aW9uKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgYm9vbCBtYWtlU2FmZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoU3Bl
Y3VsYXRpb24obWFrZVNhZmUgPyBBcnJheTo6T3V0T2ZCb3VuZHMgOiAocHJvZmlsZS0+bWF5U3Rv
cmVUb0hvbGUoKSA/IEFycmF5OjpUb0hvbGUgOiBBcnJheTo6SW5Cb3VuZHMpKTsKICAgICB9Ci19
Ci0KLWlubGluZSBib29sIGxlbmd0aE5lZWRzU3RvcmFnZShBcnJheTo6TW9kZSBhcnJheU1vZGUp
Ci17Ci0gICAgcmV0dXJuIG1vZGVJc0pTQXJyYXkoYXJyYXlNb2RlKTsKLX0KLQotaW5saW5lIEFy
cmF5OjpNb2RlIG1vZGVGb3JQdXQoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQotewotICAgIHN3aXRj
aCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICByZXR1cm4g
QXJyYXk6OkdlbmVyaWM7CisgICAgCisgICAgQXJyYXlNb2RlIHJlZmluZShTcGVjdWxhdGVkVHlw
ZSBiYXNlLCBTcGVjdWxhdGVkVHlwZSBpbmRleCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBhbHJl
YWR5Q2hlY2tlZChBYnN0cmFjdFZhbHVlJikgY29uc3Q7CisgICAgCisgICAgY29uc3QgY2hhciog
dG9TdHJpbmcoKSBjb25zdDsKKyAgICAKKyAgICBib29sIHVzZXNCdXR0ZXJmbHkoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0pTQXJyYXkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNJbkJvdW5kcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9
PSBBcnJheTo6SW5Cb3VuZHM7CisgICAgfQorICAgIAorICAgIGJvb2wgbWF5U3RvcmVUb0hvbGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0luQm91bmRzKCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNPdXRPZkJvdW5kcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
c3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHM7CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNTbG93UHV0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlKCkgPT0gQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FuQ1NFU3Rv
cmFnZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICBjYXNlIEFycmF5OjpV
bnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgbGVuZ3RoTmVlZHNTdG9yYWdl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0pTQXJyYXkoKTsKKyAgICB9CisgICAg
CisgICAgQXJyYXlNb2RlIG1vZGVGb3JQdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBjYXNlIEFycmF5OjpBcmd1bWVudHM6Ci0gICAgICAgIHJldHVybiBBcnJheTo6R2VuZXJpYzsK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6R2VuZXJpYyk7CiAjZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gYXJyYXlNb2RlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CiAgICAgfQotfQotCi1pbmxpbmUgYm9vbCBtb2RlSXNTcGVjaWZpYyhBcnJh
eTo6TW9kZSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgQXJyYXk6OlNl
bGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKLSAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIGJvb2wgaXNTcGVjaWZpYygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUo
KSkgeworICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6
CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KLX0KLQotaW5saW5lIGJvb2wgbW9kZVN1cHBvcnRzTGVuZ3RoKEFycmF5OjpNb2RlIG1v
ZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKLSAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgIGNhc2UgQXJyYXk6
OkZvcmNlRXhpdDoKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgIGNhc2UgTk9OX0FSUkFZ
X0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgY2FzZSBOT05fQVJSQVlfQVJSQVlfU1RPUkFHRV9NT0RF
UzoKLSAgICBjYXNlIE5PTl9BUlJBWV9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBib29s
IHN1cHBvcnRzTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7
CisgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgICAgIGNh
c2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlT
dG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAg
ICAgICAgcmV0dXJuIGFycmF5Q2xhc3MoKSA9PSBBcnJheTo6QXJyYXk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgIH0KLX0KLQotaW5s
aW5lIGJvb2wgYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soQXJyYXk6Ok1vZGUgbW9kZSkKLXsK
LSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICBjYXNlIEFycmF5OjpVbnBy
b2ZpbGVkOgotICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgYm9vbCBiZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVjaygpIGNvbnN0
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgor
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gY29udmVyc2lvbigpID09IEFycmF5OjpBc0lzOworICAgICAgICB9CiAgICAg
fQotfQorICAgIAorICAgIGJvb2wgZG9lc0NvbnZlcnNpb24oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGNvbnZlcnNpb24oKSA9PSBBcnJheTo6Q29udmVydDsKKyAgICB9CisgICAgCisg
ICAgQXJyYXlNb2RlcyBhcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzoK
KyAgICAgICAgICAgIHJldHVybiBBTExfQVJSQVlfTU9ERVM7CisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICByZXR1cm4gYXJyYXlNb2Rlc1dpdGhJbmRleGluZ1No
YXBlKENvbnRpZ3VvdXNTaGFwZSk7CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
KyAgICAgICAgICAgIHJldHVybiBhcnJheU1vZGVzV2l0aEluZGV4aW5nU2hhcGUoQXJyYXlTdG9y
YWdlU2hhcGUpOworICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
ICAgICAgICAgcmV0dXJuIGFycmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShTbG93UHV0QXJyYXlT
dG9yYWdlU2hhcGUpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGFzQXJy
YXlNb2RlcyhOb25BcnJheSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEFycmF5TW9kZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdHlwZSgpID09IG90aGVyLnR5cGUoKQorICAgICAgICAgICAgJiYgYXJyYXlDbGFzcygpID09
IG90aGVyLmFycmF5Q2xhc3MoKQorICAgICAgICAgICAgJiYgc3BlY3VsYXRpb24oKSA9PSBvdGhl
ci5zcGVjdWxhdGlvbigpCisgICAgICAgICAgICAmJiBjb252ZXJzaW9uKCkgPT0gb3RoZXIuY29u
dmVyc2lvbigpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJyYXlN
b2RlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9Citwcml2YXRlOgorICAgIGV4cGxpY2l0IEFycmF5TW9kZSh1bnNpZ25lZCB3b3Jk
KQorICAgIHsKKyAgICAgICAgdS5hc1dvcmQgPSB3b3JkOworICAgIH0KKyAgICAKKyAgICBBcnJh
eU1vZGVzIGFycmF5TW9kZXNXaXRoSW5kZXhpbmdTaGFwZShJbmRleGluZ1R5cGUgc2hhcGUpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgeworICAgICAgICBjYXNl
IEFycmF5OjpOb25BcnJheToKKyAgICAgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hhcGUp
OworICAgICAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgICAgIHJldHVybiBhc0FycmF5
TW9kZXMoc2hhcGUgfCBJc0FycmF5KTsKKyAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJh
eToKKyAgICAgICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVz
KHNoYXBlIHwgSXNBcnJheSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBUaGlz
IGlzIG9ubHkgbmVjZXNzYXJ5IGZvciBDKysgY29tcGlsZXJzIHRoYXQgZG9uJ3QgdW5kZXJzdGFu
ZCBlbnVtcy4KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQ4X3QgdHlwZTsK
KyAgICAgICAgICAgIHVpbnQ4X3QgYXJyYXlDbGFzczsKKyAgICAgICAgICAgIHVpbnQ4X3Qgc3Bl
Y3VsYXRpb247CisgICAgICAgICAgICB1aW50OF90IGNvbnZlcnNpb247CisgICAgICAgIH0gYXNC
eXRlczsKKyAgICAgICAgdW5zaWduZWQgYXNXb3JkOworICAgIH0gdTsKK307CiAKLWlubGluZSBi
b29sIGlzRWZmZWN0ZnVsKEFycmF5OjpNb2RlIG1vZGUpCitzdGF0aWMgaW5saW5lIGJvb2wgY2Fu
Q1NFU3RvcmFnZShjb25zdCBBcnJheU1vZGUmIGFycmF5TW9kZSkKIHsKLSAgICBzd2l0Y2ggKG1v
ZGUpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJu
IGFycmF5TW9kZS5jYW5DU0VTdG9yYWdlKCk7CiB9CiAKLS8vIFRoaXMgcmV0dXJucyB0aGUgc2V0
IG9mIGFycmF5IG1vZGVzIHRoYXQgd2lsbCBwYXNzIGZpbHRlcmluZyBvZiBhIENoZWNrQXJyYXkg
b3IKLS8vIEFycmF5aWZ5IHdpdGggdGhlIGdpdmVuIG1vZGUuCi1pbmxpbmUgQXJyYXlNb2RlcyBh
cnJheU1vZGVzRm9yKEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBs
ZW5ndGhOZWVkc1N0b3JhZ2UoY29uc3QgQXJyYXlNb2RlJiBhcnJheU1vZGUpCiB7Ci0gICAgc3dp
dGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEFycmF5OjpHZW5lcmljOgotICAgICAgICByZXR1
cm4gQUxMX0FSUkFZX01PREVTOwotICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6Ci0gICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91c1RvVGFpbDoKLSAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzT3V0
T2ZCb3VuZHM6Ci0gICAgY2FzZSBBcnJheTo6VG9Db250aWd1b3VzOgotICAgICAgICByZXR1cm4g
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgIGNhc2UgQXJyYXk6OlBv
c3NpYmx5QXJyYXlXaXRoQ29udGlndW91czoKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5
V2l0aENvbnRpZ3VvdXNUb1RhaWw6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhD
b250aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoQ29udGlndW91cykgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk7Ci0g
ICAgY2FzZSBBUlJBWV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIHJldHVybiBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZVRvSG9sZToKLSAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2VPdXRPZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpUb0FycmF5U3RvcmFn
ZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2Up
OwotICAgIGNhc2UgQXJyYXk6OlRvU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICByZXR1cm4gYXNBcnJheU1vZGVzKE5vbkFy
cmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFy
cmF5U3RvcmFnZSk7Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3Jh
Z2U6Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6
Ci0gICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czoKLSAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5VG9BcnJheVN0b3JhZ2U6Ci0gICAgICAg
IHJldHVybiBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBh
c0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk7Ci0gICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5
U3RvcmFnZVRvSG9sZToKLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRP
ZkJvdW5kczoKLSAgICBjYXNlIEFycmF5OjpBcnJheVRvQXJyYXlTdG9yYWdlOgotICAgICAgICBy
ZXR1cm4gYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk7Ci0gICAgY2FzZSBBcnJh
eTo6QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhc0FycmF5TW9k
ZXMoTm9uQXJyYXkpOwotICAgIH0KKyAgICByZXR1cm4gYXJyYXlNb2RlLmxlbmd0aE5lZWRzU3Rv
cmFnZSgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTMy
NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwNiwxMyArOTA2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRl
eCk7CiAgICAgfQogICAgIAotICAgIEFycmF5OjpNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2Zp
bGUqIHByb2ZpbGUpCisgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHBy
b2ZpbGUpCiAgICAgewogICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKLSAgICAgICAgcmV0dXJuIGZyb21PYnNlcnZlZChwcm9maWxlLCBBcnJheTo6UmVhZCwgZmFs
c2UpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgQXJy
YXk6OlJlYWQsIGZhbHNlKTsKICAgICB9CiAgICAgCi0gICAgQXJyYXk6Ok1vZGUgZ2V0QXJyYXlN
b2RlQW5kRW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0
aW9uLCBOb2RlSW5kZXggYmFzZSkKKyAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5kRW1pdENo
ZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBOb2RlSW5k
ZXggYmFzZSkKICAgICB7CiAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bigpOwogICAgICAgICAKQEAgLTkyNiw5ICs5MjYsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkKICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE91dE9mQm91bmRzKTsKICAgICAgICAgCi0g
ICAgICAgIEFycmF5OjpNb2RlIHJlc3VsdCA9IGZyb21PYnNlcnZlZChwcm9maWxlLCBhY3Rpb24s
IG1ha2VTYWZlKTsKKyAgICAgICAgQXJyYXlNb2RlIHJlc3VsdCA9IEFycmF5TW9kZTo6ZnJvbU9i
c2VydmVkKHByb2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOwogICAgICAgICAKLSAgICAgICAgaWYg
KHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkgJiYgYmVuZWZpdHNGcm9tU3RydWN0dXJl
Q2hlY2socmVzdWx0KSkKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJl
KCkgJiYgcmVzdWx0LmJlbmVmaXRzRnJvbVN0cnVjdHVyZUNoZWNrKCkpCiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQo
cHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CkBAIC0xNjQ5LDE2ICsxNjQ5LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUpOwotICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewotICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzT3V0T2ZCb3VuZHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3Rv
cmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3Vu
ZHM6IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5
UHVzaCwgT3BJbmZvKGFycmF5TW9kZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgTm9k
ZUluZGV4IGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpKSk7CiAgICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKICAgICAgICAgICAgICAgICBzZXQo
cmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIApAQCAtMTY3NCwxNiArMTY2
OSwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKLSAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKLSAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlT
dG9yYWdlVG9Ib2xlOgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAg
Y2FzZSBBcnJheTo6QXJyYXlXaXRoQ29udGlndW91c091dE9mQm91bmRzOgotICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggYXJy
YXlQb3AgPSBhZGRUb0dyYXBoKEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwor
ICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3Ry
dWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgTm9kZUluZGV4IGFycmF5UG9wID0gYWRk
VG9HcmFwaChBcnJheVBvcCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKICAg
ICAgICAgICAgIGlmICh1c2VzUmVzdWx0KQogICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCBhcnJheVBvcCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0NzYsOSArMjQ2
Niw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlQW5kRW1pdENoZWNrcyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGUsIEFycmF5OjpSZWFkLCBiYXNlKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUg
PSBnZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGJhc2UpOwogICAgICAgICAgICAgTm9kZUluZGV4IHByb3Bl
cnR5ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAg
Tm9kZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgTm9k
ZUluZGV4IGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOwogICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5VmFsKTsKIAogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2J5X3ZhbCk7CkBAIC0yNDg3LDcgKzI0NzcsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ug
b3BfcHV0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAKLSAgICAgICAgICAgIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUsIGJhc2UpOworICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUsIGJhc2UpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBOb2RlSW5kZXggcHJvcGVydHkgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWUgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CkBAIC0yNDk2LDcgKzI0ODYsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChwcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChOb05vZGUpOyAvLyBMZWF2ZSByb29tIGZvciBwcm9wZXJ0
eSBzdG9yYWdlLgotICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIFB1dEJ5VmFs
LCBPcEluZm8oYXJyYXlNb2RlKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
bygwKSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2
aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxMyArMTc2LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmJ5VmFsSXNQ
dXJlKG5vZGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwotICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
Q09OVElHVU9VU19UT19UQUlMX01PREVTOgotICAgICAgICAgICAgICAgIGNhc2UgQVJSQVlfU1RP
UkFHRV9UT19IT0xFX01PREVTOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgp
Lm1heVN0b3JlVG9Ib2xlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Ci0g
ICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTY5OCw3ICs2OTMsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBib29sIGNoZWNrQXJyYXlFbGltaW5h
dGlvbihOb2RlSW5kZXggY2hpbGQxLCBBcnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgYm9vbCBj
aGVja0FycmF5RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgQXJyYXlNb2RlIGFycmF5TW9k
ZSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07
KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7
CkBAIC03MjksNyArNzI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIE5vZGVJbmRleCBnZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0
aW9uKE5vZGVJbmRleCBjaGlsZDEsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICBOb2RlSW5k
ZXggZ2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hp
bGQxLCBBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9pbmRleEluQmxvY2s7IGktLTspIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9
IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTEyMzQsNyArMTIyOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgUHV0QnlWYWw6IHsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIGlmIChjYW5DU0VTdG9yYWdlKG5v
ZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAobm9kZS5hcnJheU1vZGUoKS5jYW5D
U0VTdG9yYWdlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gZ2V0
QnlWYWxMb2FkRWxpbWluYXRpb24oY2hpbGQxLmluZGV4KCksIGNoaWxkMi5pbmRleCgpKTsKICAg
ICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBu
b2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJyYXlNb2RlKCku
YWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQo
KSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50
b20pOwpAQCAtMTEyLDcgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBu
b2RlLmFycmF5TW9kZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuYXJyYXlNb2RlKCku
YWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUucmVmQ291bnQo
KSA+PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldEJ1
dHRlcmZseSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDEzMjc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE0ICs4NiwxNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGVQdHItPmNvZGVPcmlnaW4pLT5n
ZXRBcnJheVByb2ZpbGUoCiAgICAgICAgICAgICAgICAgICAgIG5vZGVQdHItPmNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBBcnJh
eTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgICAgICAg
ICAgaWYgKGFycmF5UHJvZmlsZSkgewogICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gcmVm
aW5lQXJyYXlNb2RlKAotICAgICAgICAgICAgICAgICAgICBmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9m
aWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpLAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFy
cmF5TW9kZTo6ZnJvbU9ic2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAogICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSwKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICBpZiAobW9kZVN1cHBvcnRzTGVuZ3RoKGFycmF5TW9kZSkgJiYgYXJyYXlQcm9m
aWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihub2RlUHRyLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUgY2hlY2tTdHJ1Y3R1cmUoQ2hlY2tTdHJ1Y3R1
cmUsIG5vZGVQdHItPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChh
cnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgbm9kZVB0ci0+Y2hpbGQxKCkuaW5k
ZXgoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlLnJlZigpOwpAQCAtMTAz
LDEyICsxMDMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZt
X2dyYXBoW21fY29tcGlsZUluZGV4XTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IHJlZmluZUFycmF5TW9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgYXJyYXlNb2RlLAorICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9
IGFycmF5TW9kZS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoW21fY29tcGls
ZUluZGV4XS5wcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFt
b2RlU3VwcG9ydHNMZW5ndGgoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgIGlmICghYXJyYXlNb2Rl
LnN1cHBvcnRzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBu
b2RlUHRyLT5zZXRPcChHZXRBcnJheUxlbmd0aCk7CiAgICAgICAgICAgICBBU1NFUlQobm9kZVB0
ci0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwpAQCAtMTI1LDE1ICsxMjQsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZTogewotICAgICAgICAgICAgQVNTRVJUKGNhbkNTRVN0b3JhZ2Uo
bm9kZS5hcnJheU1vZGUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCku
Y2FuQ1NFU3RvcmFnZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNl
IFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAgICAgIG5vZGUuc2V0QXJyYXlNb2RlKAotICAg
ICAgICAgICAgICAgIHJlZmluZUFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS5h
cnJheU1vZGUoKSwKKyAgICAgICAgICAgICAgICBub2RlLmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCksCiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSk7
CiAgICAgICAgICAgICAKQEAgLTMyMyw4ICszMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
RWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogCiAgICAgICAgICAg
ICBub2RlLnNldEFycmF5TW9kZSgKLSAgICAgICAgICAgICAgICByZWZpbmVBcnJheU1vZGUoCi0g
ICAgICAgICAgICAgICAgICAgIG5vZGUuYXJyYXlNb2RlKCksCisgICAgICAgICAgICAgICAgbm9k
ZS5hcnJheU1vZGUoKS5yZWZpbmUoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQx
XS5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGhbY2hpbGQyXS5wcmVk
aWN0aW9uKCkpKTsKICAgICAgICAgICAgIApAQCAtMzMyLDcgKzMyOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFttX2NvbXBp
bGVJbmRleF07CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobW9kZUZvclB1dChu
b2RlUHRyLT5hcnJheU1vZGUoKSkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZVB0ci0+YXJy
YXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6
SW50OEFycmF5OgogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CkBAIC0zNzYsMTYgKzM3MywxNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
Y2hlY2tBcnJheShBcnJheTo6TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
Tm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKEFy
cmF5OjpNb2RlKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQor
ICAgIE5vZGVJbmRleCBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgTm9kZUluZGV4IGFycmF5LCBOb2RlSW5kZXggaW5kZXgsIGJvb2wgKCpzdG9y
YWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZSA9IHRydWUpCiAgICAgewotICAgICAgICBBU1NFUlQobW9kZUlzU3BlY2lmaWMoYXJy
YXlNb2RlKSk7CisgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fZ3JhcGgucmVmKGFycmF5KTsKIAotICAgICAgICBpZiAoaXNFZmZlY3Rm
dWwoYXJyYXlNb2RlKSkgeworICAgICAgICBpZiAoYXJyYXlNb2RlLmRvZXNDb252ZXJzaW9uKCkp
IHsKICAgICAgICAgICAgIGlmIChpbmRleCAhPSBOb05vZGUpCiAgICAgICAgICAgICAgICAgbV9n
cmFwaC5yZWYoaW5kZXgpOwotICAgICAgICAgICAgTm9kZSBhcnJheWlmeShBcnJheWlmeSwgY29k
ZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZSksIGFycmF5LCBpbmRleCk7CisgICAgICAgICAgICBO
b2RlIGFycmF5aWZ5KEFycmF5aWZ5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgYXJyYXksIGluZGV4KTsKICAgICAgICAgICAgIGFycmF5aWZ5LnJlZigpOyAvLyBPbmNl
IGJlY2F1c2UgaXQncyB1c2VkIGFzIGEgYnV0dGVyZmx5LgogICAgICAgICAgICAgYXJyYXlpZnku
cmVmKCk7IC8vIEFuZCB0d2ljZSBiZWNhdXNlIGl0J3MgbXVzdC1nZW5lcmF0ZS4KICAgICAgICAg
ICAgIE5vZGVJbmRleCBhcnJheWlmeUluZGV4ID0gbV9ncmFwaC5zaXplKCk7CkBAIC0zOTMsMTUg
KzM5MCwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuYXBwZW5kKG1f
aW5kZXhJbkJsb2NrLCBhcnJheWlmeUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
QVNTRVJUKHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIEFTU0VSVChjYW5DU0VTdG9yYWdl
KGFycmF5TW9kZSkpOwotICAgICAgICAgICAgQVNTRVJUKG1vZGVVc2VzQnV0dGVyZmx5KGFycmF5
TW9kZSkpOworICAgICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS5jYW5DU0VTdG9yYWdlKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpOwogCiAgICAgICAg
ICAgICBpZiAoIXN0b3JhZ2VDaGVjayhhcnJheU1vZGUpKQogICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CiAgICAgICAgICAgICByZXR1cm4gYXJyYXlpZnlJbmRleDsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgTm9kZSBjaGVja0FycmF5KENoZWNrQXJyYXksIGNvZGVPcmlnaW4s
IE9wSW5mbyhhcnJheU1vZGUpLCBhcnJheSk7CisgICAgICAgIE5vZGUgY2hlY2tBcnJheShDaGVj
a0FycmF5LCBjb2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgYXJyYXkpOwog
ICAgICAgICBjaGVja0FycmF5LnJlZigpOwogICAgICAgICBOb2RlSW5kZXggY2hlY2tBcnJheUlu
ZGV4ID0gbV9ncmFwaC5zaXplKCk7CiAgICAgICAgIG1fZ3JhcGguYXBwZW5kKGNoZWNrQXJyYXkp
OwpAQCAtNDEzLDEwICs0MTAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKHNob3VsZEdlbmVy
YXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYoYXJyYXkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKG1vZGVVc2VzQnV0dGVyZmx5KGFycmF5TW9kZSkpCisgICAgICAgIGlmIChhcnJheU1vZGUu
dXNlc0J1dHRlcmZseSgpKQogICAgICAgICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRCdXR0
ZXJmbHksIGNvZGVPcmlnaW4sIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUpOwogICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIGFkZE5vZGUoTm9kZShHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2Rl
T3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlKSwgYXJyYXkpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAg
ICAgIHJldHVybiBhZGROb2RlKE5vZGUoR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9y
aWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIGFycmF5KSwgc2hvdWxkR2VuZXJhdGUp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBiYXNlLCBF
ZGdlIGluZGV4LCB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJZHgpCkBAIC00MjYsNyArNDIzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlUHRyLT5hcnJh
eU1vZGUoKSkgeworICAgICAgICBzd2l0Y2ggKG5vZGVQdHItPmFycmF5TW9kZSgpLnR5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAgICAgICAgIE5vZGUgZm9y
Y2VFeGl0KEZvcmNlT1NSRXhpdCwgbm9kZVB0ci0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICBm
b3JjZUV4aXQucmVmKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEdyYXBoOjpkdW1w
KGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICBpZiAobm9kZS5oYXNBcnJheU1vZGUoKSkgewotICAgICAgICBkYXRhTG9nKCIlcyVz
IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbW9kZVRvU3RyaW5nKG5vZGUuYXJyYXlNb2RlKCkp
KTsKKyAgICAgICAgZGF0YUxvZygiJXMlcyIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUu
YXJyYXlNb2RlKCkudG9TdHJpbmcoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAg
IH0KICAgICBpZiAobm9kZS5oYXNWYXJOdW1iZXIoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsMTQgKzQ5MCwxNCBAQCBw
dWJsaWM6CiAgICAgLy8gLSBhbmQgc28gb24uCiAgICAgYm9vbCBieVZhbElzUHVyZShOb2RlJiBu
b2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6
R2VuZXJpYzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0g
ICAgICAgIGNhc2UgQVJSQVlfU1RPUkFHRV9UT19IT0xFX01PREVTOgotICAgICAgICBjYXNlIE9V
VF9PRl9CT1VORFNfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BVVF9B
UlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfTU9ERVM6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIHJldHVybiAh
bm9kZS5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCk7CisgICAgICAgIGNhc2UgQXJyYXk6OlNs
b3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICByZXR1cm4gIW5vZGUuYXJyYXlNb2RlKCku
bWF5U3RvcmVUb0hvbGUoKTsKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgogICAgICAgICAg
ICAgcmV0dXJuIG5vZGUub3AoKSA9PSBHZXRCeVZhbDsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEzMjc0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NjcsMTggKzc2NywxOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKCkKKyAgICBBcnJheU1vZGUgYXJyYXlNb2RlKCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChoYXNBcnJheU1vZGUoKSk7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBcnJheTo6TW9kZT4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
Ojpmcm9tV29yZChtX29wSW5mbyk7CiAgICAgfQogICAgIAotICAgIGJvb2wgc2V0QXJyYXlNb2Rl
KEFycmF5OjpNb2RlIGFycmF5TW9kZSkKKyAgICBib29sIHNldEFycmF5TW9kZShBcnJheU1vZGUg
YXJyYXlNb2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0FycmF5TW9kZSgpKTsKICAgICAg
ICAgaWYgKHRoaXMtPmFycmF5TW9kZSgpID09IGFycmF5TW9kZSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgbV9vcEluZm8gPSBhcnJheU1vZGU7CisgICAgICAgIG1fb3BJbmZv
ID0gYXJyYXlNb2RlLmFzV29yZCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxMzI3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDYgQEAgdm9p
ZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIG9wZXJhbmRzLnNldE9w
ZXJhbmQoCiAgICAgICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlLT5vcGVyYW5k
LCBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlLT5yZWNvdmVyeSk7CiAgICAgfQotICAgIAog
ICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5ID0gMDsKICAgICBpZiAoZXhpdC5tX3Jl
Y292ZXJ5SW5kZXgpCiAgICAgICAgIHJlY292ZXJ5ID0gJmNvZGVCbG9jay0+c3BlY3VsYXRpb25S
ZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCAtIDEpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxMzI3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQ1LDcgKzI1NDUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZh
bDogewotICAgICAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNo
IChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RV
c2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI1NjYsMjkgKzI1NjYsMjggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSU5fQk9VTkRT
X0NPTlRJR1VPVVNfTU9ERVM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ09OVElHVU9V
U19UT19UQUlMX01PREVTOgotICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQ09OVElHVU9VU19N
T0RFUzoKLSAgICAgICAgY2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAg
ICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworICAgICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7CisgICAgICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5j
aGlsZDMoKSk7CkBAIC0yNjIxLDMwICsyNjIwLDMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVn
LCByZXN1bHRQYXlsb2FkUmVnLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIElOX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOiB7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bm9kZS5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQzKCkpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
IAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7CiAKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRh
Zy5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihB
cnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3Rv
cmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZXN1bHRUYWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9VVF9PRl9CT1VORFNfQVJSQVlf
U1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBTTE9XX1BVVF9BUlJBWV9TVE9SQUdFX01PREVT
OgotICAgICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQVJSQVlfU1RPUkFHRV9NT0RFUzogeworICAg
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2Fk
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOwpAQCAtMjcyOCwxMCArMjcyNywxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEVkZ2UgY2hpbGQz
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKICAgICAgICAgRWRnZSBjaGls
ZDQgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwogICAgICAgICAKLSAgICAg
ICAgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlID0gbW9kZUZvclB1dChub2RlLmFycmF5TW9kZSgpKTsK
KyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUuYXJyYXlNb2RlKCkubW9kZUZvclB1
dCgpOwogICAgICAgICBib29sIGFscmVhZHlIYW5kbGVkID0gZmFsc2U7CiAgICAgICAgIAotICAg
ICAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBl
KCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAg
ICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0yNzcwLDkgKzI3NjksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUpIHsKLSAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19NT0RFUzoKLSAgICAgICAg
Y2FzZSBBTExfRUZGRUNURlVMX0NPTlRJR1VPVVNfTU9ERVM6IHsKKyAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIGNoaWxkMyk7CiAKICAgICAgICAg
ICAgIEdQUlJlZyB2YWx1ZVRhZ1JlZyA9IHZhbHVlLnRhZ0dQUigpOwpAQCAtMjgwMSw3ICsyNzk5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogCi0g
ICAgICAgICAgICBpZiAoIW1heVN0b3JlVG9UYWlsKGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAg
IGlmIChhcnJheU1vZGUuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKICAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKQEAgLTI4MTAs
NyArMjgwOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCkpKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW5Cb3Vu
ZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgc2xvd0Nhc2VzKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHByb3BlcnR5
UmVnKTsKQEAgLTI4MjgsNyArMjgyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICAgICAgc3RvcmFn
ZS51c2UoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFpc0luQm91bmRzQWNjZXNz
KGFycmF5TW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygp
KSB7CiAgICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywKQEAgLTI4NDAsOCArMjgzOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9NT0RFUzoKLSAgICAgICAgY2FzZSBBTExf
RUZGRUNURlVMX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CiAg
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBjaGlsZDMpOwogCiAgICAgICAg
ICAgICBHUFJSZWcgdmFsdWVUYWdSZWcgPSB2YWx1ZS50YWdHUFIoKTsKQEAgLTI4NzIsMTMgKzI4
NzAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKIAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmV5b25kQXJyYXlCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwotICAgICAgICAgICAgaWYgKGlzSW5Cb3VuZHNBY2Nlc3MoYXJyYXlNb2RlKSkKKyAgICAgICAg
ICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGJleW9uZEFy
cmF5Qm91bmRzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJleW9uZEFycmF5Qm91bmRzKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Un
cmUgd3JpdGluZyB0byBhIGhvbGU7IGlmIHNvIGluY3JlbWVudCBtX251bVZhbHVlc0luVmVjdG9y
LgotICAgICAgICAgICAgaWYgKCFtYXlTdG9yZVRvSG9sZShhcnJheU1vZGUpKSB7CisgICAgICAg
ICAgICBpZiAoYXJyYXlNb2RlLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgdW5jb3VudGFibGUgYmVjYXVzZSBpZiB3ZSB0YWtlIHRoaXMgZXhpdCwgdGhlbiB0aGUg
YmFzZWxpbmUgSklUCiAgICAgICAgICAgICAgICAgLy8gd2lsbCBpbW1lZGlhdGVseSBjb3VudCB0
aGUgaG9sZSBzdG9yZS4gU28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgZXhpdAogICAgICAgICAgICAg
ICAgIC8vIHByb2ZpbGluZy4KQEAgLTI4ODcsNyArMjg4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykp
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbm90SG9sZVZhbHVlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgICAgICAgICAgICAgIGlm
IChpc1Nsb3dQdXRBY2Nlc3MoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAgICAgIGlmIChhcnJh
eU1vZGUuaXNTbG93UHV0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzb3J0
IG9mIHN0cmFuZ2UuIElmIHdlIHdhbnRlZCB0byBvcHRpbWl6ZSB0aGlzIGNvZGUgcGF0aCwgd2Ug
d291bGQgaW52ZXJ0CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhYm92ZSBicmFuY2guIEJ1
dCBpdCdzIHNpbXBseSBub3Qgd29ydGggaXQgc2luY2UgdGhpcyBvbmx5IGhhcHBlbnMgaWYgd2Un
cmUKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZpbmcgYSBiYWQgdGltZS4KQEAg
LTMwMjYsNyArMzAyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNoOiB7Ci0gICAgICAgIEFTU0VS
VChtb2RlSXNKU0FycmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUu
YXJyYXlNb2RlKCkuaXNKU0FycmF5KCkpOwogICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zMDQ1LDkgKzMwNDMsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobm9kZS5hcnJh
eU1vZGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzOgotICAg
ICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3VuZHM6IHsKKyAgICAg
ICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwg
c3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93
UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3Jh
Z2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2
YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKQEAgLTMwNjYsOCArMzA2Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9y
YWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VPdXRPZkJvdW5k
czogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3Jh
Z2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAg
ICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCkBAIC0zMDk3LDcgKzMw
OTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIEFycmF5UG9wOiB7Ci0gICAgICAgIEFTU0VSVChtb2RlSXNKU0Fy
cmF5KG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCku
aXNKU0FycmF5KCkpOwogICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTMxMDksOSArMzEwNSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQ
UiA9IHZhbHVlUGF5bG9hZC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9y
YWdlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXM6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5V2l0aENvbnRpZ3VvdXNPdXRPZkJvdW5kczogeworICAgICAgICBzd2l0Y2gg
KG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpLCB2YWx1ZVBheWxvYWRHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgdW5kZWZpbmVkQ2FzZSA9CkBAIC0zMTQ0LDggKzMxMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToK
LSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlXaXRoQXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsK
KyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RvcmFnZUxlbmd0aCh0aGlzKTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVu
Z3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMzI3NDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTc4LDcgKzI1NzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTI1OTcsMjcgKzI1OTcsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSU5fQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
LSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Cisg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChub2RlLmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJ
TF9NT0RFUzoKLSAgICAgICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0g
ICAgICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9DT05USUdVT1VTX01PREVTOiB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNo
aWxkMygpKTsKQEAgLTI2NDcsMjggKzI2NDYsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSU5fQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKLSAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkuaXNJbkJv
dW5kcygpKSB7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5n
cHIoKSkpOworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3By
KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgT1VUX09GX0JPVU5EU19BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICBjYXNl
IFNMT1dfUFVUX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VGRkVDVEZV
TF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDMoKSk7CkBAIC0yNzQ1LDEwICsyNzQ0LDEwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgRWRnZSBj
aGlsZDMgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwogICAgICAgICBFZGdl
IGNoaWxkNCA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMyk7CiAgICAgICAgIAot
ICAgICAgICBBcnJheTo6TW9kZSBhcnJheU1vZGUgPSBtb2RlRm9yUHV0KG5vZGUuYXJyYXlNb2Rl
KCkpOworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS5hcnJheU1vZGUoKS5tb2Rl
Rm9yUHV0KCk7CiAgICAgICAgIGJvb2wgYWxyZWFkeUhhbmRsZWQgPSBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7CisgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgog
ICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTI3ODgsOSArMjc4Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAotICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZSkgewotICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX01PREVTOgotICAg
ICAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzogeworICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQzKTsKIAogICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yODIxLDcgKzI4MTks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbWF5U3RvcmVUb1RhaWwoYXJyYXlNb2RlKSkgeworICAgICAgICAgICAg
aWYgKGFycmF5TW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAogICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAogICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwpAQCAtMjgzMCw3
ICsyODI4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgoKSkpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbkJvdW5k
c0FjY2VzcyhhcnJheU1vZGUpKQorICAgICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0
T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBzbG93Q2FzZXMpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcHJvcGVydHlS
ZWcsIHRlbXBvcmFyeVJlZyk7CkBAIC0yODQ2LDcgKzI4NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgICAgIHN0b3JhZ2UudXNlKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghaXNJ
bkJvdW5kc0FjY2VzcyhhcnJheU1vZGUpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlz
T3V0T2ZCb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAog
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsCkBAIC0yODU4LDggKzI4NTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAg
ICAgIGNhc2UgQUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZTogewogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgY2hpbGQz
KTsKIAogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUmVnID0gdmFsdWUuZ3ByKCk7CkBAIC0yODkx
LDEzICsyODg5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAKICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJleW9uZEFycmF5Qm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChpc0luQm91bmRzQWNjZXNzKGFycmF5TW9kZSkpCisg
ICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBi
ZXlvbmRBcnJheUJvdW5kcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChiZXlvbmRBcnJheUJvdW5kcyk7CiAKICAgICAgICAgICAgIC8vIENoZWNr
IGlmIHdlJ3JlIHdyaXRpbmcgdG8gYSBob2xlOyBpZiBzbyBpbmNyZW1lbnQgbV9udW1WYWx1ZXNJ
blZlY3Rvci4KLSAgICAgICAgICAgIGlmICghbWF5U3RvcmVUb0hvbGUoYXJyYXlNb2RlKSkgewor
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHVuY291bnRhYmxlIGJlY2F1c2UgaWYgd2UgdGFrZSB0aGlzIGV4aXQsIHRo
ZW4gdGhlIGJhc2VsaW5lIEpJVAogICAgICAgICAgICAgICAgIC8vIHdpbGwgaW1tZWRpYXRlbHkg
Y291bnQgdGhlIGhvbGUgc3RvcmUuIFNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGV4aXQKICAgICAg
ICAgICAgICAgICAvLyBwcm9maWxpbmcuCkBAIC0yOTA2LDcgKzI5MDQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSkpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90SG9s
ZVZhbHVlID0gbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJheU1vZGUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc1Nsb3dQdXQoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIHNvcnQgb2Ygc3RyYW5nZS4gSWYgd2Ugd2FudGVkIHRvIG9w
dGltaXplIHRoaXMgY29kZSBwYXRoLCB3ZSB3b3VsZCBpbnZlcnQKICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhlIGFib3ZlIGJyYW5jaC4gQnV0IGl0J3Mgc2ltcGx5IG5vdCB3b3J0aCBpdCBzaW5j
ZSB0aGlzIG9ubHkgaGFwcGVucyBpZiB3ZSdyZQogICAgICAgICAgICAgICAgICAgICAvLyBhbHJl
YWR5IGhhdmluZyBhIGJhZCB0aW1lLgpAQCAtMzA3OSw3ICszMDc3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBB
cnJheVB1c2g6IHsKLSAgICAgICAgQVNTRVJUKG1vZGVJc0pTQXJyYXkobm9kZS5hcnJheU1vZGUo
KSkpOworICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CiAgICAg
ICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMigpKTsK
QEAgLTMwOTcsOSArMzA5NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMygp
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgICAg
IHN3aXRjaCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdp
dGhDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0
T2ZCb3VuZHM6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewor
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpOwogICAgICAgICAg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCkpOwpA
QCAtMzExNiw4ICszMTEzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5V2l0aEFycmF5U3RvcmFnZU91dE9mQm91bmRzOiB7CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9y
YWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxl
IGJpemFycmUgbGVuZ3Rocy4KQEAgLTMxNDksNyArMzE0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXlQ
b3A6IHsKLSAgICAgICAgQVNTRVJUKG1vZGVJc0pTQXJyYXkobm9kZS5hcnJheU1vZGUoKSkpOwor
ICAgICAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc0pTQXJyYXkoKSk7CiAKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTMxNjEsOSAr
MzE1Nyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
TGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAobm9kZS5hcnJheU1vZGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250
aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhDb250aWd1b3VzT3V0T2ZCb3Vu
ZHM6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCB1bmRlZmluZWRDYXNlID0KQEAgLTMxOTIsOCArMzE4
Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlXaXRoQXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhBcnJh
eVN0b3JhZ2VPdXRPZkJvdW5kczogeworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgIAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgdW5kZWZpbmVkQ2FzZSA9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw5ICszMTcsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjbGVhckdlbmVyYXRpb25JbmZvCiAgICAgbV9mcHJzID0gUmVnaXN0
ZXJCYW5rPEZQUkluZm8+KCk7CiB9CiAKLWNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yKiBTcGVj
dWxhdGl2ZUpJVDo6dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKQor
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIFNwZWN1bGF0aXZlSklUOjp0eXBlZEFycmF5RGVz
Y3JpcHRvcihBcnJheU1vZGUgYXJyYXlNb2RlKQogewotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7
CisgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgogICAgICAgICByZXR1cm4gJm1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpOwogICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CkBAIC0zNDMsNTggKzM0Myw1NyBA
QCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciogU3BlY3VsYXRpdmVKCiAgICAgfQogfQogCi1K
SVRDb21waWxlcjo6SnVtcExpc3QgU3BlY3VsYXRpdmVKSVQ6Omp1bXBTbG93Rm9yVW53YW50ZWRB
cnJheU1vZGUoR1BSUmVnIHRlbXBHUFIsIEFycmF5OjpNb2RlIGFycmF5TW9kZSkKK0pJVENvbXBp
bGVyOjpKdW1wTGlzdCBTcGVjdWxhdGl2ZUpJVDo6anVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9k
ZShHUFJSZWcgdGVtcEdQUiwgQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3QgcmVzdWx0OwogICAgIAotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAg
Y2FzZSBOT05fQVJSQVlfQ09OVElHVU9VU19NT0RFUzogeworICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKGFy
cmF5TW9kZS5pc0pTQXJyYXkoKSkgeworICAgICAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHRlbXBHUFIpOworICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1t
MzIoSXNBcnJheSB8IENvbnRpZ3VvdXNTaGFwZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFz
ayksIHRlbXBHUFIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKAogICAgICAgICAgICAgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIo
Q29udGlndW91c1NoYXBlKSkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBBUlJB
WV9XSVRIX0NPTlRJR1VPVVNfTU9ERVM6IHsKLSAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHRlbXBHUFIpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNBcnJheSB8
IENvbnRpZ3VvdXNTaGFwZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgTk9O
X0FSUkFZX0FSUkFZX1NUT1JBR0VfTU9ERVM6IHsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICBpZiAo
YXJyYXlNb2RlLmlzSlNBcnJheSgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2xv
d1B1dCgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Olplcm8sIHRlbXBHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNB
cnJheSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgdGVtcEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUg
LSBBcnJheVN0b3JhZ2VTaGFwZSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihJc0FycmF5IHwgSW5k
ZXhpbmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoCisg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wR1BSLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhp
bmdTaGFwZU1hc2spLCB0ZW1wR1BSKTsKLSAgICAgICAgaWYgKGlzU2xvd1B1dEFjY2VzcyhhcnJh
eU1vZGUpKSB7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNTbG93UHV0KCkpIHsKICAgICAgICAg
ICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSksIHRlbXBHUFIp
OwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMigKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB0ZW1wR1BS
LAogICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNo
YXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFnZVNoYXBl
KSkpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQXJyYXk6OkFycmF5V2l0aEFycmF5U3RvcmFnZToKLSAgICBjYXNlIEFycmF5
OjpBcnJheVdpdGhBcnJheVN0b3JhZ2VUb0hvbGU6Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlXaXRo
QXJyYXlTdG9yYWdlT3V0T2ZCb3VuZHM6IHsKLSAgICAgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZElt
bTMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzayksIHRlbXBHUFIpOwogICAgICAgICByZXN1
bHQuYXBwZW5kKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEFycmF5OjpBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlOiB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoCi0gICAgICAgICAgICBtX2ppdC5icmFu
Y2hUZXN0MzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHRlbXBHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSXNBcnJheSkpKTsKLSAgICAgICAgbV9qaXQu
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgdGVtcEdQUik7Ci0gICAgICAg
IG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSksIHRlbXBHUFIpOwot
ICAgICAgICByZXN1bHQuYXBwZW5kKAotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCB0ZW1wR1BSLAotICAgICAgICAgICAg
ICAgIFRydXN0ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VT
aGFwZSkpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIENS
QVNIKCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDA1LDI4ICs0MDQsMjggQEAgSklUQ29tcGlsZXI6
Okp1bXBMaXN0IFNwZWN1bGF0aXZlSklUOjpqdQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FycmF5KE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1vZGVJc1NwZWNpZmljKG5vZGUuYXJy
YXlNb2RlKCkpKTsKKyAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5pc1NwZWNpZmljKCkpOwor
ICAgIEFTU0VSVCghbm9kZS5hcnJheU1vZGUoKS5kb2VzQ29udmVyc2lvbigpKTsKICAgICAKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAKICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciogcmVzdWx0ID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUoKSk7
CiAgICAgCi0gICAgaWYgKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKSB7CisgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCku
YWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSkgewogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CiAgICAgY29uc3QgQ2xhc3NJbmZvKiBleHBlY3RlZENsYXNzSW5mbyA9IDA7CiAgICAgCi0gICAg
c3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgp
LnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAgICAgZXhwZWN0ZWRDbGFz
c0luZm8gPSAmSlNTdHJpbmc6OnNfaW5mbzsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBOT05f
QVJSQVlfQ09OVElHVU9VU19NT0RFUzoKLSAgICBjYXNlIEFSUkFZX1dJVEhfQ09OVElHVU9VU19N
T0RFUzoKLSAgICBjYXNlIE5PTl9BUlJBWV9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgIGNhc2Ug
QVJSQVlfV0lUSF9BUlJBWV9TVE9SQUdFX01PREVTOiB7CisgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICBtX2ppdC5sb2FkUHRy
KApAQCAtNDczLDI5ICs0NzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FycmF5KE5v
ZGUmIG5vCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUsIEdQUlJl
ZyBiYXNlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcpCiB7Ci0gICAgQXJyYXk6Ok1vZGUgZGVzaXJl
ZEFycmF5TW9kZTsKLSAgICAKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkpIHsKLSAgICBj
YXNlIEFycmF5OjpUb0NvbnRpZ3VvdXM6Ci0gICAgICAgIGRlc2lyZWRBcnJheU1vZGUgPSBBcnJh
eTo6Q29udGlndW91czsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6VG9BcnJheVN0
b3JhZ2U6Ci0gICAgICAgIGRlc2lyZWRBcnJheU1vZGUgPSBBcnJheTo6QXJyYXlTdG9yYWdlOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFycmF5OjpUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6Ci0g
ICAgICAgIGRlc2lyZWRBcnJheU1vZGUgPSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheTo6QXJyYXlUb0FycmF5U3RvcmFnZToKLSAgICAg
ICAgZGVzaXJlZEFycmF5TW9kZSA9IEFycmF5OjpBcnJheVdpdGhBcnJheVN0b3JhZ2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXlUb0FycmF5U3RvcmFnZToK
LSAgICAgICAgZGVzaXJlZEFycmF5TW9kZSA9IEFycmF5OjpQb3NzaWJseUFycmF5V2l0aEFycmF5
U3RvcmFnZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgZGVzaXJlZEFycmF5TW9kZSA9IEFycmF5OjpGb3JjZUV4aXQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUoKS5kb2VzQ29udmVyc2lvbigp
KTsKICAgICAKICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwpAQCAtNTEwLDcgKzQ4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICAgICAgCiAgICAgLy8gV2UgY2FuIHNraXAgYWxsIHRo
YXQgY29tZXMgbmV4dCBpZiB3ZSBhbHJlYWR5IGhhdmUgYXJyYXkgc3RvcmFnZS4KICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzID0KLSAgICAgICAganVtcFNsb3dGb3JVbndh
bnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBkZXNpcmVkQXJyYXlNb2RlKTsKKyAgICAgICAganVtcFNs
b3dGb3JVbndhbnRlZEFycmF5TW9kZSh0ZW1wR1BSLCBub2RlLmFycmF5TW9kZSgpKTsKICAgICAg
ICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgdGVtcEdQUik7CkBAIC01MjEs
NyArNDk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogICAg
IAogICAgIC8vIElmIHdlJ3JlIGFsbGVnZWRseSBjcmVhdGluZyBjb250aWd1b3VzIHN0b3JhZ2Ug
YW5kIHRoZSBpbmRleCBpcyBib2d1cywgdGhlbgogICAgIC8vIGp1c3QgZG9uJ3QuCi0gICAgaWYg
KG5vZGUuYXJyYXlNb2RlKCkgPT0gQXJyYXk6OlRvQ29udGlndW91cyAmJiBwcm9wZXJ0eVJlZyAh
PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgaWYgKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpDb250aWd1b3VzICYmIHByb3BlcnR5UmVnICE9IEludmFsaWRHUFJSZWcpIHsKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKQEAgLTUzOSwxMSArNTE2
LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmFycmF5aWZ5KE5vZGUmIG5vZGUKICAgICAgICAg
CiAgICAgLy8gTm93IGNhbGwgb3V0IHRvIGNyZWF0ZSB0aGUgYXJyYXkgc3RvcmFnZS4KICAgICBz
aWxlbnRTcGlsbEFsbFJlZ2lzdGVycyh0ZW1wR1BSKTsKLSAgICBzd2l0Y2ggKG5vZGUuYXJyYXlN
b2RlKCkpIHsKLSAgICBjYXNlIEFMTF9FRkZFQ1RGVUxfQ09OVElHVU9VU19NT0RFUzoKKyAgICBz
d2l0Y2ggKG5vZGUuYXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czoKICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1b3VzLCB0
ZW1wR1BSLCBiYXNlUmVnKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBTExfRUZGRUNURlVM
X0FSUkFZX1NUT1JBR0VfTU9ERVM6CisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlLCB0ZW1wR1BSLCBiYXNlUmVnKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTU2Niw3ICs1NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjphcnJheWlmeShOb2RlJiBub2RlCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZUdQUiwgU3RydWN0dXJlOjppbmRleGluZ1R5cGVPZmZzZXQoKSksIHN0cnVjdHVy
ZUdQUik7CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgTm9Ob2RlLAotICAgICAgICBqdW1w
U2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHN0cnVjdHVyZUdQUiwgZGVzaXJlZEFycmF5TW9kZSkp
OworICAgICAgICBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKHN0cnVjdHVyZUdQUiwgbm9k
ZS5hcnJheU1vZGUoKSkpOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgIHN0b3Jh
Z2VSZXN1bHQodGVtcEdQUiwgbV9jb21waWxlSW5kZXgpOwpAQCAtNTc0LDExICs1NTIsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6YXJyYXlpZnkoTm9kZSYgbm9kZQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjphcnJheWlmeShOb2RlJiBub2RlKQogewotICAgIEFTU0VSVChtb2RlSXNTcGVjaWZp
Yyhub2RlLmFycmF5TW9kZSgpKSk7CisgICAgQVNTRVJUKG5vZGUuYXJyYXlNb2RlKCkuaXNTcGVj
aWZpYygpKTsKICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgIAotICAgIGlmIChtb2RlQWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLCBub2RlLmFycmF5TW9kZSgpKSkgeworICAgIGlmIChub2RlLmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSkp
IHsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCB0ZW1wLmdwcigpKTsKQEAgLTE4NDcsNyArMTgyNSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CiAKLSAgICBBU1NFUlQobW9kZUFscmVhZHlDaGVja2VkKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OlN0cmluZykpOworICAgIEFTU0VSVChBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZykuYWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpKSk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIg
b3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCiAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
KSk7CkBAIC0yMjU2LDcgKzIyMzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPbkluCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0LmdwcigpOwogCi0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZCht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICBB
U1NFUlQobm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkpKTsKIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCkBAIC0yNDA2LDcgKzIzODQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogCi0gICAgQVNTRVJUKG1vZGVBbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSksIG5vZGUuYXJyYXlNb2RlKCkpKTsKKyAgICBBU1NFUlQobm9kZS5hcnJheU1vZGUo
KS5hbHJlYWR5Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKTsKIAogICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5mcHIoKTsKQEAgLTI0NDMsNyArMjQyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckYKICAgICAKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3Ao
dGhpcywgdmFsdWVVc2UpOwogICAgIAotICAgIEFTU0VSVF9VTlVTRUQoYmFzZVVzZSwgbW9kZUFs
cmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShiYXNlVXNlKSwgbm9kZS5hcnJheU1vZGUoKSkp
OworICAgIEFTU0VSVF9VTlVTRUQoYmFzZVVzZSwgbm9kZS5hcnJheU1vZGUoKS5hbHJlYWR5Q2hl
Y2tlZChtX3N0YXRlLmZvck5vZGUoYmFzZVVzZSkpKTsKICAgICAKICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwogICAgIApAQCAtMzIyNiw3ICszMjA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIAogICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNj
cmlwdG9yKiBkZXNjcmlwdG9yID0gdHlwZWRBcnJheURlc2NyaXB0b3Iobm9kZS5hcnJheU1vZGUo
KSk7CiAgICAgCi0gICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpKSB7CisgICAgc3dpdGNoIChu
b2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKICAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIApAQCAtMzI2Niw3ICsz
MjQ0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25BcgogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAKLSAgICBBU1NFUlQobW9kZUFs
cmVhZHlDaGVja2VkKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKSwgQXJyYXk6OkFyZ3Vt
ZW50cykpOworICAgIEFTU0VSVChBcnJheU1vZGUoQXJyYXk6OkFyZ3VtZW50cykuYWxyZWFkeUNo
ZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpKSk7CiAgICAgCiAgICAgLy8gVHdv
IHJlYWxseSBsYW1lIGNoZWNrcy4KICAgICBzcGVjdWxhdGlvbkNoZWNrKApAQCAtMzMyMyw3ICsz
MzAxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFyZ3VtZW50cwogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEFTU0VSVChtb2Rl
QWxyZWFkeUNoZWNrZWQobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLCBBcnJheTo6QXJn
dW1lbnRzKSk7CisgICAgQVNTRVJUKEFycmF5TW9kZShBcnJheTo6QXJndW1lbnRzKS5hbHJlYWR5
Q2hlY2tlZChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkpKTsKICAgICAKICAgICBzcGVj
dWxhdGlvbkNoZWNrKAogICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVNvdXJjZSgpLCBOb05v
ZGUsCkBAIC0zMzQxLDggKzMzMTksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiB7CiAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3IqIGRlc2NyaXB0b3Ig
PSB0eXBlZEFycmF5RGVzY3JpcHRvcihub2RlLmFycmF5TW9kZSgpKTsKIAotICAgIHN3aXRjaCAo
bm9kZS5hcnJheU1vZGUoKSkgewotICAgIGNhc2UgQVJSQVlfV0lUSF9DT05USUdVT1VTX01PREVT
OiB7CisgICAgc3dpdGNoIChub2RlLmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBu
b2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBzdG9yYWdl
KTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMzM1Miw4
ICszMzMwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdFJlZywgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBBUlJBWV9XSVRIX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0g
ICAgY2FzZSBBUlJBWV9FRkZFQ1RGVUxfTU9ERVM6IHsKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3JhZ2UpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0zNTM4LDcgKzM1MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwg
bV9jb21waWxlSW5kZXgpOwogfQogCi1HUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJl
Z2lzdGVyRm9yUHV0QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5OjpNb2RlIGFy
cmF5TW9kZSkKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRC
eVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAg
ICBpZiAoIXB1dEJ5VmFsV2lsbE5lZWRFeHRyYVJlZ2lzdGVyKGFycmF5TW9kZSkpCiAgICAgICAg
IHJldHVybiBJbnZhbGlkR1BSUmVnOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTMyNzQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcw
LDI4ICsyMjcwLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShOb2RlJik7CiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZShOb2RlJik7CiAgICAgCi0gICAgYm9vbCBwdXRCeVZhbFdpbGxOZWVkRXh0cmFSZWdpc3RlcihB
cnJheTo6TW9kZSBhcnJheU1vZGUpCisgICAgYm9vbCBwdXRCeVZhbFdpbGxOZWVkRXh0cmFSZWdp
c3RlcihBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUpIHsKLSAgICAgICAgLy8gRm9yIEFycmF5U3RvcmFnZSwgd2UgbmVlZCBhbiBleHRyYSByZWcg
Zm9yIHN0b3JlcyB0byBob2xlcyBleGNlcHQgaWYKLSAgICAgICAgLy8gd2UncmUgaW4gU2xvd1B1
dCBtb2RlLgotICAgICAgICBjYXNlIEFSUkFZX1NUT1JBR0VfVE9fSE9MRV9NT0RFUzoKLSAgICAg
ICAgY2FzZSBPVVRfT0ZfQk9VTkRTX0FSUkFZX1NUT1JBR0VfTU9ERVM6Ci0gICAgICAgIGNhc2Ug
QUxMX0VGRkVDVEZVTF9BUlJBWV9TVE9SQUdFX01PREVTOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gRm9yIENvbnRpZ3VvdXMsIHdlIG5lZWQgYW4g
ZXh0cmEgcmVnIGZvciBhbnkgYWNjZXNzIHRoYXQgbWF5IHN0b3JlCi0gICAgICAgIC8vIHRvIHRo
ZSB0YWlsLgotICAgICAgICBjYXNlIENPTlRJR1VPVVNfVE9fVEFJTF9NT0RFUzoKLSAgICAgICAg
Y2FzZSBPVVRfT0ZfQk9VTkRTX0NPTlRJR1VPVVNfTU9ERVM6Ci0gICAgICAgIGNhc2UgQUxMX0VG
RkVDVEZVTF9DT05USUdVT1VTX01PREVTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQorICAgICAgICByZXR1cm4gYXJyYXlNb2RlLm1heVN0b3JlVG9Ib2xlKCk7CiAgICAg
fQotICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYs
IEFycmF5OjpNb2RlKTsKKyAgICBHUFJSZWcgdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChH
UFJUZW1wb3JhcnkmLCBBcnJheU1vZGUpOwogICAgIEdQUlJlZyB0ZW1wb3JhcnlSZWdpc3RlckZv
clB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBOb2RlJiBub2RlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwodGVtcG9yYXJ5LCBub2Rl
LmFycmF5TW9kZSgpKTsKQEAgLTI0MzAsOSArMjQxMyw5IEBAIHB1YmxpYzoKICAgICBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50KiBmb3J3YXJkU3BlY3VsYXRpb25XYXRjaHBvaW50KEV4aXRLaW5k
ID0gVW5jb3VudGFibGVXYXRjaHBvaW50KTsKICAgICBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
KiBzcGVjdWxhdGlvbldhdGNocG9pbnRXaXRoQ29uZGl0aW9uYWxEaXJlY3Rpb24oRXhpdEtpbmQs
IGJvb2wgaXNGb3J3YXJkKTsKICAgICAKLSAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciog
dHlwZWRBcnJheURlc2NyaXB0b3IoQXJyYXk6Ok1vZGUpOworICAgIGNvbnN0IFR5cGVkQXJyYXlE
ZXNjcmlwdG9yKiB0eXBlZEFycmF5RGVzY3JpcHRvcihBcnJheU1vZGUpOwogICAgIAotICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wU2xvd0ZvclVud2FudGVkQXJyYXlNb2RlKEdQUlJlZyB0
ZW1wV2l0aEluZGV4aW5nVHlwZVJlZywgQXJyYXk6Ok1vZGUgYXJyYXlNb2RlKTsKKyAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QganVtcFNsb3dGb3JVbndhbnRlZEFycmF5TW9kZShHUFJSZWcgdGVt
cFdpdGhJbmRleGluZ1R5cGVSZWcsIEFycmF5TW9kZSk7CiAgICAgdm9pZCBjaGVja0FycmF5KE5v
ZGUmKTsKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUmLCBHUFJSZWcgYmFzZVJlZywgR1BSUmVnIHBy
b3BlcnR5UmVnKTsKICAgICB2b2lkIGFycmF5aWZ5KE5vZGUmKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>