<?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>109389</bug_id>
          
          <creation_ts>2013-02-10 14:07:58 -0800</creation_ts>
          <short_desc>DFG DCE might eliminate checks unsoundly</short_desc>
          <delta_ts>2013-03-05 21:38:02 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109371</dependson>
    
    <dependson>110840</dependson>
    
    <dependson>110948</dependson>
    
    <dependson>111102</dependson>
    
    <dependson>111119</dependson>
    
    <dependson>111205</dependson>
    
    <dependson>111209</dependson>
          <blocked>111506</blocked>
    
    <blocked>111520</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>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>829357</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-10 14:07:58 -0800</bug_when>
    <thetext>We sort of guard against this in common cases by preventing DCE entirely for some nodes (like ArithAdd and friends) but the bottom line is that DCE is just broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829360</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-10 14:54:32 -0800</bug_when>
    <thetext>Note that https://bugs.webkit.org/show_bug.cgi?id=109371 is a great step towards fixing this.  After that bug is fixed, we will be able to easily DCE while preserving checks by turning the relevant node into a Phantom that still has the same Edges.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844376</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 12:43:51 -0800</bug_when>
    <thetext>*** Bug 109388 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844509</commentid>
    <comment_count>3</comment_count>
      <attachid>190815</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 14:58:18 -0800</bug_when>
    <thetext>Created attachment 190815
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844636</commentid>
    <comment_count>4</comment_count>
      <attachid>190848</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-28 17:08:17 -0800</bug_when>
    <thetext>Created attachment 190848
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845402</commentid>
    <comment_count>5</comment_count>
      <attachid>191009</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 12:28:48 -0800</bug_when>
    <thetext>Created attachment 191009
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845445</commentid>
    <comment_count>6</comment_count>
      <attachid>191020</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 13:09:38 -0800</bug_when>
    <thetext>Created attachment 191020
it compiles

on 64-bit Mac at least</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845471</commentid>
    <comment_count>7</comment_count>
      <attachid>191029</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 13:42:57 -0800</bug_when>
    <thetext>Created attachment 191029
it&apos;s starting to do things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845589</commentid>
    <comment_count>8</comment_count>
      <attachid>191061</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 16:09:36 -0800</bug_when>
    <thetext>Created attachment 191061
it&apos;s starting to run bigger things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845629</commentid>
    <comment_count>9</comment_count>
      <attachid>191071</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 16:49:56 -0800</bug_when>
    <thetext>Created attachment 191071
runs the main benchmarks

But it still needs some performance love.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845691</commentid>
    <comment_count>10</comment_count>
      <attachid>191085</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-01 18:22:22 -0800</bug_when>
    <thetext>Created attachment 191085
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847351</commentid>
    <comment_count>11</comment_count>
      <attachid>191416</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-04 23:59:18 -0800</bug_when>
    <thetext>Created attachment 191416
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847391</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 00:42:29 -0800</bug_when>
    <thetext>Attachment 191416 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFAPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDCEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDCEPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInsertionSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:2034:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:105:  The parameter name &quot;valueParams&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:1981:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 3 in 33 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>848009</commentid>
    <comment_count>13</comment_count>
      <attachid>191551</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-05 13:34:14 -0800</bug_when>
    <thetext>Created attachment 191551
the patch

Rabased and fixed two style goofs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848011</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 13:36:25 -0800</bug_when>
    <thetext>Attachment 191551 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractState.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlock.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBasicBlockInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFAPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCFGSimplificationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCPSRethreadingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCommon.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDCEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDCEPhase.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGInsertionSet.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGStructureCheckHoistingPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGValidate.cpp&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGBasicBlock.h:105:  The parameter name &quot;valueParams&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 33 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>848346</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-05 18:29:37 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/144862</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190815</attachid>
            <date>2013-02-28 14:58:18 -0800</date>
            <delta_ts>2013-02-28 17:08:17 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>20359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVj
dG9yPE5vZGUqLCA4PiB7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9O
T0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29t
bWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1z
IHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7
CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9k
ZShHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0
NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUs
IHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMs
IHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlu
bGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRy
ZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRl
UHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBl
bmROb2RlKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFk
ZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsg
XAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxM
b2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigp
OwotICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CiAgICAgICAgIAogICAgICAgICBt
X2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1
ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgRENFUGhhc2UoR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZGVhZCBjb2RlIGVsaW1pbmF0aW9u
IikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8v
IEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7
ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
c1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9
IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAgICAgICAgICAgICBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAg
ICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNldFJlZkNvdW50KDApOworICAgICAgICB9
CisgICAgCisgICAgICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJl
IG11c3QtZ2VuZXJhdGUsIGFuZCBub2RlcyB0aGF0IGFyZQorICAgICAgICAvLyByZWFjaGFibGUg
ZnJvbSB0eXBlIGNoZWNrcy4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8gMSBhbmQgcHV0IHRoZW0g
b24gdGhlCisgICAgICAgIC8vIHdvcmtsaXN0LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7
IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJF
TihtX2dyYXBoLCBub2RlLCBmaW5kVHlwZUNoZWNrUm9vdCk7CisgICAgICAgICAgICAgICAgaWYg
KCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkKKyAg
ICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgCisgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAg
IG1fd29ya2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3Mg
aXQncyByZWYnZWQuCisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBub2RlLCBjb3VudEVkZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJs
b2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihu
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSB9Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmRUeXBlQ2hlY2tSb290KE5vZGUqLCBFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICBpZiAoZWRnZS5pc1Byb3ZlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gVW50eXBlZFVzZSk7Cisg
ICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgbV93b3JrbGlzdC5h
cHBlbmQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvdW50RWRnZShOb2Rl
KiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRy
ZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBB
ZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUt
PmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVkZ2UubmVlZHNDaGVjaygpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRn
ZUZyb21CYWcoaS0tKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBWZWN0b3I8Tm9kZSos
IDEyOD4gbV93b3JrbGlzdDsKK307CisKK2Jvb2wgcGVyZm9ybURDRShHcmFwaCYgZ3JhcGgpCit7
CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBEQ0UgUGhhc2UiKTsKKyAg
ICByZXR1cm4gcnVuUGhhc2U8RENFUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0RDRVBoYXNlX2gKKyNkZWZpbmUgREZHRENFUGhhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOwor
CisvLyBHbG9iYWwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLiBFbGltaW5hdGVzIGFueSBub2RlIHRo
YXQgaXMgbm90IE5vZGVNdXN0R2VuZXJhdGUsCisvLyBub3QgdXNlZCBieSBhbnkgb3RoZXIgbGl2
ZSBub2RlLCBhbmQgbm90IHN1YmplY3QgdG8gYW55IHR5cGUgY2hlY2suCisKK2Jvb2wgcGVyZm9y
bURDRShHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0RDRVBoYXNlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTQ0MzczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw3IEBACiAjaW5jbHVkZSAiREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIK
KyNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNp
bmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5oIgpAQCAtMTQ3LDExICsxNDgsMTMgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21w
aWxlTW9kZSBjb21waWxlTQogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAg
ICB9CiAgICAgCisgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQorICAgICAgICBkYXRh
TG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9u
cy5cbiIsIGNudCk7CisKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJn
ZWQ7CiAgICAgcGVyZm9ybUNTRShkZmcpOwogICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcp
OyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJlIGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRo
cmVhZHMgdGhlIGdyYXBoLgotICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0
ZXJhdGlvbnMuXG4iLCBjbnQpOworICAgIHBlcmZvcm1EQ0UoZGZnKTsKICAgICBwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogCiAgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9y
RmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwLDY3ICszOTAsNiBAQCB2b2lk
IEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrCiAgICAgc3VjY2Vzc29yLT5tX3By
ZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6OmNvbGxlY3RH
YXJiYWdlKCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEdhcmJh
Z2UgQ29sbGVjdGlvbiIpOwotICAgIAotICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8g
MCBmb3IgYWxsIG5vZGVzLgotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICgh
YmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCi0gICAgICAgICAgICBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQotICAgICAg
ICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5zZXRSZWZDb3VudCgwKTsKLSAgICB9Ci0gICAg
Ci0gICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5l
cmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8KLSAgICAvLyAxIGFuZCBwdXQgdGhlbSBvbiB0
aGUgd29ya2xpc3QuCi0gICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwotICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBp
bmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdl
bmVyYXRlKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5vZGUtPnNl
dFJlZkNvdW50KDEpOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIE5vZGUqIG5vZGUgPSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBz
aG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAgICAg
IGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAg
Y2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAg
ICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fdmFyQXJn
Q2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5u
b2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS0+cG9zdGZpeFJlZigpKQotICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQoY2hpbGROb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5j
aGlsZDEoKSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+cG9zdGZpeFJlZigp
KQotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDIoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMo
KS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxp
dHkoKQogewogICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCwxNiAr
MjEwLDEwIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05P
REUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21t
YSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9k
ZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxh
dGVQb3N0IE5vZGUqIGFkZE5vZGUoU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1fYWxs
b2NhdG9yKSBOb2RlKHZhbHVlQXJncyk7IFwKICAgICAgICAgbm9kZS0+cHJlZGljdCh0eXBlKTsg
XAotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAg
ICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZOb2RlTW9kZSA9PSBSZWZOb2Rl
KSBcCi0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAocmVmQ2hpbGRyZW5N
b2RlID09IFJlZkNoaWxkcmVuKSBcCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsgXAog
ICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVf
RlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKQEAgLTIyNywxMiArMjIxLDYgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIC8vIENhbGwgdGhpcyBpZiB5b3Un
dmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgK
LSAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwg
dmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQotICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNlIHJl
ZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCi0gICAg
Ly8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5LgotICAgIHZvaWQg
Y29sbGVjdEdhcmJhZ2UoKTsKLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gR2V0TG9jYWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
c2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE0NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDkgQEAg
cHVibGljOgogICAgIH0KIAogI2RlZmluZSBERkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRl
UHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFy
YW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9z
dCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxk
cmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMg
dGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBTcGVjdWxhdGVkVHlw
ZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAg
cmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVm
Tm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAorICAgICAgICBy
ZXR1cm4gaW5zZXJ0KGluZGV4LCBtX2dyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlQXJncykpOyBcCiAgICAgfQogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElP
TihERkdfREVGSU5FX0lOU0VSVF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfSU5TRVJUX05PREUK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDQzNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTEsNyArOTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQogICAgICAgICAsIGNoaWxkcmVuKGNoaWxkcmVuKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgwKQor
ICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMDIsNyArMTAy
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAg
ICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZh
dWx0RmxhZ3Mob3ApOwpAQCAtMTE0LDcgKzExNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisg
ICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQog
ICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xMjcsNyArMTI3LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAg
ICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxk
MykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQot
ICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1
bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CkBAIC0xNDEsNyArMTQxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4o
Y29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwg
Zmlyc3RDaGlsZCwgbnVtQ2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwg
bV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAg
LCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAgICwg
bV9wcmVkaWN0aW9uKFNwZWNOb25lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMTQ0MzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQW55IHR3byBub2RlcyB0aGF0IGFyZSBw
YXJ0IG9mIHRoZSBzYW1lIFBoaSBncmFwaCB3aWxsIHNoYXJlIHRoZSBzYW1lICovXAogICAgIC8q
IFZhcmlhYmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9c
CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFNldExvY2Fs
LCAwKSBcCisgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90
RXhpdCkgXAogICAgIG1hY3JvKFNldExvY2FsLCBOb2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFj
cm8oTW92SGludCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0ZvcndhcmQpIFwKICAgICBt
YWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFu
dFRvT1NSKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Njgs
NiArMTk2OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgY29tcGlsZU1v
dkhpbnQobm9kZSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNl
IFNldExvY2FsOiB7CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRv
IHdoZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjb21waWxlTW92SGlu
dChtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIElubGlu
ZVN0YXJ0OiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190848</attachid>
            <date>2013-02-28 17:08:17 -0800</date>
            <delta_ts>2013-03-01 12:28:48 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47536</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVj
dG9yPE5vZGUqLCA4PiB7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9O
T0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29t
bWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1z
IHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7
CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9k
ZShHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwog
ICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RF
KQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0
NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUs
IHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMs
IHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlu
bGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRy
ZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRl
UHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBl
bmROb2RlKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFk
ZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsg
XAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0NDM3MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTgsNzcgKzY5OCw1NiBAQCBwcml2YXRlOgogICAgIE5vZGUqIGFkZFRv
R3JhcGgoTm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5v
ZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFk
ZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdlKGNoaWxkMSksIEVk
Z2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3Vy
cmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQz
KSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVz
dEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRn
ZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7Cisg
ICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hp
bGQyLCBjaGlsZDMpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3Ap
ICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFw
aChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxk
MiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBF
ZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNw
ZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShjaGlsZDEpLCBFZGdl
KGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIGlmIChvcCA9PSBQaGkpCiAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlm
IChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3Jh
cGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5m
bzIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDAp
CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAg
ICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAg
IG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVkZ2UoY2hpbGQxKSwgRWRn
ZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCisgICAgICAgICAgICBFZGdlKGNoaWxkMSks
IEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7
CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAo
ZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBo
LnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAg
IAogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8xLCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwKLSAgICAgICAgICAgIE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAgIFNwZWNOb25lLCBOb2RlOjpWYXJBcmcs
IG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCiAgICAgICAgICAgICBtX2dy
YXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBh
c3NlZFZhckFyZ3MpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRW
YXJBcmdzID0gMDsKICAgICAgICAgCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9k
ZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBOb2RlKiBpbnNlcnRQaGlOb2Rl
KE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIE5vZGUqIHJl
c3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgUGhpLCBjdXJyZW50Q29kZU9yaWdpbigp
LCBpbmZvKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25l
LCBQaGksIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8pOwogICAgICAgICBibG9jay0+cGhpcy5h
cHBlbmQocmVzdWx0KTsKLQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
OCArMTQwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29u
QmxvY2soYmxvY2tJbmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBKdW1wLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeUNvZGVPcmlnaW4sIE9wSW5mbyh0YWtl
bkJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
U3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTcxLDggKzE3
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNo
LT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgSnVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5j
b2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5jb2RlT3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0QmxvY2tJbmRl
eCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAg
aW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbGl2
ZW5lc3NOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sCisgICAg
ICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLCAKICAg
ICAgICAgICAgIE9wSW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5C
bG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAg
IHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOwotICAgICAgICBtX2dyYXBoLmNvbGxl
Y3RHYXJiYWdlKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVk
Q1BTOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyNCw3ICsxMjMsNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIEFMV0FZU19JTkxJTkUgTm9kZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayog
YmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUpCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUo
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwg
T3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9k
ZShTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAg
YmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50
KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTA0LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAg
ICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhl
IGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7CkBAIC0xMjYsNyArMTI0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJy
YXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlD
aGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+
cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9t
KCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xODYsMjUgKzE4MywyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlm
IChuZWVkc1dhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUu
Zm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVj
dHVyZVNldChzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVy
ZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVP
cmlnaW4sIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEVk
Z2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNo
aWxkLT5yZWYoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9m
ZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdl
OwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
RWRnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlP
ZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdl
KTsKQEAgLTI1MiwxMiArMjQ2LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG5l
ZWRzV2F0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JO
b2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwg
Y2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdp
biwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5k
KEtub3duQ2VsbFVzZSk7CkBAIC0yODcsMTcgKzI4MCwxNiBAQCBwcml2YXRlOgogCiAgICAgICAg
ICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRo
ZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCisg
ICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFj
ZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0
dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4s
IGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5l
d1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKQEAgLTMwNSwxNyAr
Mjk3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVP
ZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRF
ZGdlLAogICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29k
ZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIAogICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0zNjAsOCArMzUwLDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2UocGhpKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbUxv
Y2FsLCAgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUpLCBFZGdlKHBoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAg
ICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMzc3LDcg
KzM2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZ3JhcGguY29u
dmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7
CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9y
aWdpbiwgY2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKICAgICAgICAgfQpAQCAtNDA2LDE4ICszOTYsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFk
ZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVk
IGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgTm9kZSogd2Vha0Nv
bnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUo
Y2VsbCksCi0gICAgICAgICAgICBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZvKGNl
bGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2Vs
bCksIFdlYWtKU0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElz
U3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAg
Y29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQs
IENlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBP
cEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUo
KSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKQEAgLTQ1NCw4
ICs0NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4pOworICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBGb3JjZU9T
UkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIERDRVBo
YXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBEQ0VQaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxpbWluYXRpb24iKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gRmlyc3QgcmVz
ZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCisgICAgICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNp
emUoKTsgaW5kZXhJbkJsb2NrLS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpbmRleElu
QmxvY2spLT5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5k
ZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIGJs
b2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7CisgICAgICAgIH0KKyAgICAKKyAg
ICAgICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5l
cmF0ZSwgYW5kIG5vZGVzIHRoYXQgYXJlCisgICAgICAgIC8vIHJlYWNoYWJsZSBmcm9tIHR5cGUg
Y2hlY2tzLiBTZXQgdGhlaXIgcmVmIGNvdW50cyB0byAxIGFuZCBwdXQgdGhlbSBvbiB0aGUKKyAg
ICAgICAgLy8gd29ya2xpc3QuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJs
b2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOworICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgs
IG5vZGUsIGZpbmRUeXBlQ2hlY2tSb290KTsKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5m
bGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAKKyAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IG1fd29ya2xpc3QubGFzdCgpOworICAgICAgICAgICAgbV93b3JrbGlz
dC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidl
ZC4KKyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNv
dW50RWRnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUo
KTsgaW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgZmluZFR5cGVDaGVja1Jvb3QoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNlKTsKKyAgICAgICAgaWYg
KCFlZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdl
Lm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY291bnRFZGdlKE5vZGUqLCBFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxp
c3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoZWRnZS5uZWVkc0NoZWNrKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhp
LS0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX3dv
cmtsaXN0OworfTsKKworYm9vbCBwZXJmb3JtRENFKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIERDRSBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxEQ0VQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRENFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRENF
UGhhc2VfaAorI2RlZmluZSBERkdEQ0VQaGFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEdsb2Jh
bCBkZWFkIGNvZGUgZWxpbWluYXRpb24uIEVsaW1pbmF0ZXMgYW55IG5vZGUgdGhhdCBpcyBub3Qg
Tm9kZU11c3RHZW5lcmF0ZSwKKy8vIG5vdCB1c2VkIGJ5IGFueSBvdGhlciBsaXZlIG5vZGUsIGFu
ZCBub3Qgc3ViamVjdCB0byBhbnkgdHlwZSBjaGVjay4KKworYm9vbCBwZXJmb3JtRENFKEdyYXBo
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHRENFUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NF
UGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5oIgogI2luY2x1ZGUgIkRG
R0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgi
CkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNv
bXBpbGVNCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgIH0KICAgICAK
KyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCisgICAgICAgIGRhdGFMb2dGKCJERkcg
b3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwgY250
KTsKKwogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKICAgICBw
ZXJmb3JtQ1NFKGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7IC8vIFRoaXMg
c2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5jZSBDU0UgcmFyZWx5IGRldGhyZWFkcyB0aGUg
Z3JhcGguCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQotICAgICAgICBkYXRhTG9n
RigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5c
biIsIGNudCk7CisgICAgcGVyZm9ybURDRShkZmcpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICAgICBHcmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlk
YXRlID0gRHVtcEdyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcg
b24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhlbSBmcm9tCiAgICAgICAg
ICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgogICAgICAgICAgICAgICAgIE5vZGUq
IG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJs
ZSwgKm5vZGUpOworICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJs
ZSwgKm5vZGUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
KERvdWJsZUFzSW50MzIpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxp
emUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CkBA
IC01MTksOCArNTE5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAg
ICAgICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2UgPSBsb2dpY2FsTm90LT5jaGlsZDEo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+aGFzQm9vbGVhblJlc3Vs
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2Up
OwotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVk
Z2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBC
bG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJbmRleCgpOwpAQCAtNTU3
LDggKzU1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIGhhdmUg
YWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQgaW5zZXJ0IGEgZm9yY2VkIGV4aXQganVzdCB0bwog
ICAgICAgICAgICAgICAgICAgICAvLyBiZSBzYWZlLgogICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4
aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBu
b2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKQEAgLTYzOSw4
ICs2MzYsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgICAgIGlmIChh
cnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3Ry
dWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChh
cnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPmNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlCkBAIC02NTEsNyArNjQ4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VS
VChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CiAgICAgICAgICAgICBub2RlLT5j
bGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CiAgICAgICAg
ICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8S25vd25DZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUpOwogICAgICAgICAgICAg
bm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwg
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UsIG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpOwpAQCAtODU5LDIxICs4NTUsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVPcmln
aW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJyYXlp
ZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0
cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBDZWxsVXNl
KSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5LCBjb2RlT3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEFycmF5
aWZ5LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFz
V29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRnZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNr
U3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIEVkZ2UoYXJy
YXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrQXJyYXksIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hl
Y2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtODgzLDE3ICs4NzksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlm
IChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKSB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKLSAg
ICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDogRG9udFJlZkNoaWxk
cmVuLAotICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZO
b2RlLAotICAgICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4s
IEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBLbm93
bkNlbGxVc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKLSAgICAgICAg
ICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0gICAg
ICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAg
ICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CisgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
RWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYmxlc3NB
cnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGlsZCkK
QEAgLTkwMyw4ICs4OTQsNyBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9T
UkV4aXQsCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmln
aW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTk5
Myw5ICs5ODMsNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgQVNTRVJUKG5ld0VkZ2Ut
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLnJl
ZihuZXdFZGdlKTsKLSAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdlKTsKLSAgICAgICAgCiAg
ICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKQEAgLTEwMTUsNyArMTAwMiw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBV
c2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKKyAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjRG91YmxlLCAKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNw
ZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAogICAgICAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgTnVtYmVy
VXNlKSk7CiAgICAgICAgIApAQCAtMTA0MCw5ICsxMDI3LDggQEAgcHJpdmF0ZToKICAgICAgICAg
dmFsdWUgPSBqc051bWJlcihKU0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAg
ICBBU1NFUlQodmFsdWUuaXNJbnQzMigpKTsKICAgICAgICAgZWRnZS5zZXROb2RlKG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNo
aWxkcmVuLCBSZWZOb2RlLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsCi0gICAgICAgICAgICBtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0
YW50KHZhbHVlKSkpKTsKLSAgICAgICAgbV9ncmFwaC5kZXJlZihvbGROb2RlKTsKKyAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENv
bnN0YW50KHZhbHVlKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50
c0lmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0NDM3MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDYsMTYgKzM0Niw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAg
ICB9CiB9CiAKLXZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQotewotICAgIERGR19O
T0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgcmVmKTsKLX0KLQotdm9pZCBHcmFwaDo6ZGVy
ZWZDaGlsZHJlbihOb2RlKiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhp
cywgb3AsIGRlcmVmKTsKLX0KLQogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQogewogICAgIGlmICht
X2Zvcm0gPT0gTG9hZFN0b3JlKQpAQCAtMzkwLDY3ICszODAsNiBAQCB2b2lkIEdyYXBoOjpoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrCiAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5h
cHBlbmQoYmxvY2tJbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKLXsK
LSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEdhcmJhZ2UgQ29sbGVjdGlv
biIpOwotICAgIAotICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5v
ZGVzLgotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
YmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBi
bG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCi0gICAgICAgICAgICBibG9jay0+YXQoaW5k
ZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5k
ZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQotICAgICAgICAgICAgYmxvY2st
PnBoaXNbcGhpSW5kZXhdLT5zZXRSZWZDb3VudCgwKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm93
IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5lcmF0ZS4gU2V0IHRo
ZWlyIHJlZiBjb3VudHMgdG8KLSAgICAvLyAxIGFuZCBwdXQgdGhlbSBvbiB0aGUgd29ya2xpc3Qu
Ci0gICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwotICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0
KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2st
LTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsK
LSAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEp
OwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJl
IG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hp
bGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAg
ICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBO
b2RlKiBjaGlsZE5vZGUgPSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5ub2RlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2Rl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDEoKSkgewot
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDIoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKS0+cG9zdGZpeFJl
ZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxk
MygpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCiB2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewogICAg
IFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDgzICs5MiwzNCBAQCBwdWJs
aWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVl
cyk7CiAgICAgfkdyYXBoKCk7CiAgICAgCi0gICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVm
ZXJlbmNlZC4KLSAgICBOb2RlKiByZWYoTm9kZSogbm9kZSkKKyAgICB2b2lkIGNoYW5nZUNoaWxk
KEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUpCiAgICAgewotICAgICAgICAvLyBJZiB0aGUgdmFs
dWUgKGJlZm9yZSBpbmNyZW1lbnRpbmcpIHdhcyBhdCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVl
ZCB0byByZWYgaXRzIGNoaWxkcmVuLgotICAgICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkK
LSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGUpOwotICAgICAgICByZXR1cm4gbm9kZTsKLSAg
ICB9Ci0gICAgRWRnZSByZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmVmKGVkZ2Uubm9k
ZSgpKTsKLSAgICAgICAgcmV0dXJuIGVkZ2U7Ci0gICAgfQotICAgIEVkZ2UgcmVmKE5vZGUqLCBF
ZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gcmVmKGVkZ2UpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCi0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAgZHVtcCgpOwotI2Vu
ZGlmCi0gICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAg
ZGVyZWZDaGlsZHJlbihub2RlKTsKLSAgICB9Ci0gICAgdm9pZCBkZXJlZihFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIHZvaWQgZGVyZWYo
Tm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGRlcmVmKGVkZ2UpOwotICAgIH0KLSAg
ICAKLSAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11
c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2
aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOwotICAgIHZvaWQgZGVyZWZD
aGlsZHJlbihOb2RlKik7Ci0KLSAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUq
IG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChjaGFu
Z2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKLSAgICAgICAgICAgIGRlcmVmKGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgfQogICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdlIG5ld0VkZ2Us
IGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwg
RWRnZSBuZXdFZGdlKQogICAgIHsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikgewotICAgICAgICAg
ICAgcmVmKG5ld0VkZ2UpOwotICAgICAgICAgICAgZGVyZWYoZWRnZSk7Ci0gICAgICAgIH0KICAg
ICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGFyZUFuZFN3
YXAoRWRnZSYgZWRnZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VS
ZWYpCisgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBO
b2RlKiBuZXdOb2RlKQogICAgIHsKICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5ld05vZGUs
IGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5ld05vZGUpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwg
RWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVk
Z2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlKQogICAgIHsKICAgICAgICAgaWYg
KGVkZ2UgIT0gb2xkRWRnZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdlRWRn
ZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VFZGdlKGVkZ2UsIG5l
d0VkZ2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBu
b2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmICghbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQoaW5kZXgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLT5j
aGlsZHJlbi5jaGlsZChpbmRleCkpOwogICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZChp
bmRleCwgRWRnZSgpKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUq
IG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CkBAIC0xNzcsMTggKzEyOCwx
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGUqIG5v
ZGUpCiAgICAgewotICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKTsKICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsg
Y2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGls
ZElkeCsrKQotICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uo
bm9kZS0+Y2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJz
dGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDMoKSwgc2hvdWxkR2Vu
ZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hp
bGQzKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHZvaWQgcGVyZm9ybVN1
YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQpCiAgICAgewogICAgICAgICAvLyBDaGVjayBp
ZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgogICAgICAgICBpZiAoIWNoaWxkKQpA
QCAtMjA0LDIyICsxNTQsMTMgQEAgcHVibGljOgogICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0
ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAog
ICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCiAgICAgICAgIEFTU0VSVCghY2hpbGQtPnJl
cGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICBy
ZWYoY2hpbGQpOwogICAgIH0KICAgICAKICNkZWZpbmUgREZHX0RFRklORV9BRERfTk9ERSh0ZW1w
bGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1
ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZO
b2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1h
IHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3Qg
Tm9kZSogYWRkTm9kZShTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQ
YXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3Ip
IE5vZGUodmFsdWVBcmdzKTsgXAogICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCi0gICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgICAgICAgICAg
bm9kZS0+cmVmKCk7IFwKLSAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAg
ICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0g
UmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGUpOyBcCiAgICAgICAg
IHJldHVybiBub2RlOyBcCiAgICAgfQogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElP
TihERkdfREVGSU5FX0FERF9OT0RFKQpAQCAtMjI3LDEyICsxNjgsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCi0gICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSd2ZSBtb2Rp
ZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0aAotICAgIC8v
IGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2NhbCB2YXJpYWJs
ZSByZWZlcmVuY2VzIGNhbiBmb3JtCi0gICAgLy8gY3ljbGVzLCBhbmQgaGVuY2UgcmVmZXJlbmNl
IGNvdW50aW5nIGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUKLSAgICAvLyByZWZl
cmVuY2UgY291bnRzIGFjY29yZGluZyB0byByZWFjaGFiaWxpdHkuCi0gICAgdm9pZCBjb2xsZWN0
R2FyYmFnZSgpOwotICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwg
dW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBHZXRMb2NhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRp
b25TZXQuaAkocmV2aXNpb24gMTQ0MzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsOSBAQCBwdWJsaWM6
CiAgICAgfQogCiAjZGVmaW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUsIHRl
bXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZh
bHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUq
IGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2Rl
LCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXAotICAgICAgICByZXR1cm4g
aW5zZXJ0KGluZGV4LCBtX2dyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9k
ZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncykpOyBcCisgICAgICAgIHJldHVybiBp
bnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKSk7IFwKICAgICB9CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19E
RUZJTkVfSU5TRVJUX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9JTlNFUlRfTk9ERQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0NDM3MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5
MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgY2hpbGRyZW4oY2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAg
ICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7
CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAs
IGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQog
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAg
ICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBt
X3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFn
cyhvcCk7CkBAIC0xMTQsNyArMTE0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhl
ZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAg
LCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCiAgICAgICAg
ICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNo
aWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVk
PihpbW0yLm1fdmFsdWUpKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTE0
MSw3ICsxNDEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3Jp
Z2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLCBmaXJzdENo
aWxkLCBudW1DaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNv
dW50KDEpCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJ
bmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oU3BlY05vbmUpCkBAIC05NzMsMTIgKzk3Myw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgcmV0dXJuIG1fcmVmQ291bnQ7CiAgICAgfQogCi0gICAgTm9kZSogcmVmKCkKLSAgICB7Ci0g
ICAgICAgIG1fcmVmQ291bnQrKzsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCiAgICAg
dW5zaWduZWQgcG9zdGZpeFJlZigpCiAgICAgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudCsr
OwpAQCAtOTk0LDE4ICs5ODgsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fcmVmQ291bnQg
PSByZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZigpCi0gICAgewotICAgICAg
ICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIC0tbV9yZWZDb3VudDsKLSAgICB9Ci0gICAg
Ci0gICAgdW5zaWduZWQgcG9zdGZpeERlcmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3Jl
ZkNvdW50KTsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKLSAgICB9Ci0gICAgCiAgICAg
RWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2RlSGFz
VmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTQ0MzczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgLyogQW55IHR3byBub2RlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBz
YW1lIFBoaSBncmFwaCB3aWxsIHNoYXJlIHRoZSBzYW1lICovXAogICAgIC8qIFZhcmlhYmxlQWNj
ZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9cCiAgICAgbWFjcm8o
R2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCisgICAg
bWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAg
IG1hY3JvKFNldExvY2FsLCBOb2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oTW92SGludCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0ZvcndhcmQpIFwKICAgICBtYWNybyhQaGFudG9t
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwK
ICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE0NDM3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjgsNiArMTk2OCwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7
CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIG5vUmVz
dWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9k
ZSB3aWxsIGJlIHN0b3JlZCBhbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDQzNzMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTY3OCw3ICsxNjc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnRO
b2RlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIElubGluZVN0YXJ0OiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191009</attachid>
            <date>2013-03-01 12:28:48 -0800</date>
            <delta_ts>2013-03-01 13:09:38 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64460</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0NzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludDogeworICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQg
aXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNldExvY2FsCisgICAgICAgIC8vIHdh
cyBkZWFkLgorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRz
IGhhcyBiZWVuIHNldC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTQ0NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDcgKzQ2OCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3QgZ2V0IHJpZCBvZiB0aGlzIG5v
ZGUsIGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50LgogICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJl
Zihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1Bo
YW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVk
Z2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDcgKzQ4Nyw2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2Rl
LT5jaGlsZHJlbi5jaGlsZDIoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
Y2hpbGQyKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CkBAIC01MDQsMTAgKzUwMiw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7
CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJn
dW1lbnRzTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVmKCk7IC8vIFRoaXMg
aXMgYSBtdXN0LWdlbmVyYXRlIG5vZGUuCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25z
aWRlcmF0aW9uIG9mIHRoaXMgb3Agbm9ldyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50c0xlbmd0
aC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzEsOCArNTI3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdpbGwg
cmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgY29kZU9y
aWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwpAQCAtNTgxLDEwICs1NzYsMTAgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tG
b3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgpKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9t
LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
cmVuKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwpAQCAtNTk4LDcgKzU5Myw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjI2LDggKzYyMCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9y
aWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwpAQCAtNzg1LDcgKzc3OCw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdl
LT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVhZEFy
Z3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CiAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc5Myw3ICs3ODUsNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBHZXRM
b2NhbHMgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29uZCB1
c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRoZSBmaXJzdC4KICAgICAgICAgICAgIGlmIChtX2NyZWF0
ZXNBcmd1bWVudHMuY29udGFpbnMoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsK
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyAr
MTAyLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICB9CiAg
ICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVu
ZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlw
ZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFy
YW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgU3BlY3VsYXRlZFR5cGUg
dmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRF
X0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9BUFBF
TkRfTk9ERQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTQ0NDc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5
ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUgREZH
X0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1z
LCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFw
cGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBS
ZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBTcGVj
dWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwK
LSAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJl
Zk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAgICBO
b2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFy
Z3MpOyBcCiAgICAgICAgIGFwcGVuZChyZXN1bHQpOyBcCiAgICAgICAgIHJldHVybiByZXN1bHQ7
IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ0NDc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw3NyArNjk4
LDU2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9kZSog
Y2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJl
bnRDb2RlT3JpZ2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykp
OworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdlKGNo
aWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgQVNTRVJUKG9wICE9
IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAg
ICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBt
X2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIEVkZ2UgY2hpbGQxLCBFZGdlIGNo
aWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwg
Y3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAgIEFT
U0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7
Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAg
ICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5m
bywgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAg
ICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAg
b3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIp
LCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsK
ICAgICAgICAgaWYgKG9wID09IFBoaSkKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5waGlz
LmFwcGVuZChyZXN1bHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZSogY2hpbGQxID0gMCwgTm9k
ZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJl
c3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGluZm8xLCBpbmZvMiwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7
CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBp
bmZvMiwKKyAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxk
MykpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11
c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMikK
ICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAg
ICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAg
Tm9kZTo6VmFyQXJnLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAorICAg
ICAgICAgICAgU3BlY05vbmUsIE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGluZm8xLCBpbmZvMiwKICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXpl
KCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAgIEFT
U0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7
CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAKLSAg
ICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAg
ICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAogICAgIE5vZGUqIGluc2VydFBoaU5vZGUoT3BJbmZvIGluZm8sIEJhc2ljQmxvY2sq
IGJsb2NrKQogICAgIHsKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAot
ICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAg
ICAgICAgICBQaGksIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8pOworICAgICAgICBOb2RlKiBy
ZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBoaSwgY3VycmVudENvZGVPcmlnaW4o
KSwgaW5mbyk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwotCiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0
NDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBub3RUYWtl
bkJsb2NrSW5kZXgsIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kYXJ5Q29kZU9yaWdpbiwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlD
b2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFrZW5C
bG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzEsOCArMTcxLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgs
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBKdW1wLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gtPmNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXRC
bG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNw
ZWNOb25lLCBKdW1wLCBicmFuY2gtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5n
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzIsNyArMjcy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAg
ICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
IFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25l
LCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sIAogICAgICAgICAgICAgT3BJbmZvKGxpdmVuZXNz
Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGlj
OgogICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOwogICAgICAgICBwcm9wYWdh
dGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9w
ZXJhbmQ+KCk7Ci0gICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKICAgICAgICAgCiAg
ICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMTI0LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBO
b2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYg
Y29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKICAgICB7Ci0gICAgICAg
IE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGksIGNvZGVPcmln
aW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0
KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAs
NyArMTAxMCw2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwgbV9j
dXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgfQpAQCAtMTAyNiw3ICsxMDI1LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAg
ICAKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICBt
X2N1cnJlbnROb2RlLT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2Rl
LgpAQCAtMTE1OSwxMCArMTE1Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIC8vIElmIHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwg
dGhlbiB0dXJuIHRoZSBHZXRMb2NhbFVubGlua2VkCiAgICAgICAgICAgICAvLyBpbnRvIGEgR2V0
TG9jYWwuCi0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2Fs
VW5saW5rZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0
TG9jYWxVbmxpbmtlZCkKICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRU
b0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZihwaGkpOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjE2LDcgKzEyMTIsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwotICAgICAgICAgICAgbV9ncmFwaC5yZWYo
ZGF0YU5vZGUpOwogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ0NDc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5
MSwyMSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5pCiAgICAgfQog
fQogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUmVmQ291bnRTdGF0ZSBz
dGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBFdmVyeXRoaW5nSXNMaXZl
OgorICAgICAgICBvdXQucHJpbnQoIkV2ZXJ5dGhpbmdJc0xpdmUiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFeGFjdFJlZkNvdW50OgorICAgICAgICBvdXQucHJpbnQoIkV4YWN0UmVmQ291
bnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvb2ZTdGF0dXMgc3RhdHVzKQogewogICAgIHN3
aXRjaCAoc3RhdHVzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJ
KHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw2ICsyMTcsMTUgQEAgZW51bSBVbmlmaWNhdGlvblN0
YXRlIHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKKy8vIERlc2NyaWJlcyBob3cgcmVmZXJl
bmNlIGNvdW50cyBpbiB0aGUgZ3JhcGggYmVoYXZlLgorZW51bSBSZWZDb3VudFN0YXRlIHsKKyAg
ICAvLyBFdmVyeXRoaW5nIGhhcyByZWZDb3VudCgpID09IDEuCisgICAgRXZlcnl0aGluZ0lzTGl2
ZSwKKworICAgIC8vIFNldCBhZnRlciBEQ0UgaGFzIHJ1bi4KKyAgICBFeGFjdFJlZkNvdW50Cit9
OworCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCiBlbnVtIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uIH07CkBAIC0y
NTAsNiArMjU5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkRGRzo6T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSk7CiB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R3JhcGhGb3JtKTsKIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpVbmlmaWNhdGlvblN0YXRlKTsKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpSZWZDb3VudFN0YXRlKTsKIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9vZlN0YXR1cyk7CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSku
bV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTA0LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQo
KTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3Vu
dCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJs
b2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAg
ICAgICAgZWxpbWluYXRlZCA9IHRydWU7CkBAIC0xMjYsNyArMTI0LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFy
cmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMjUgKzE4MywyMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdp
biwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwg
Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVk
Z2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlT
dG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwg
UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNoaWxkRWRnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUo
KSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTI1MiwxMiArMjQ2LDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBP
cEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2Rl
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxk
RWRnZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQp
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAg
UGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNo
aWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkBAIC0yODcsMTcgKzI4MCwxNiBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZz
ZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hpbGQg
d2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3Qg
dGhlIGRvdWJsZSB1c2UuCisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1
cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxk
RWRnZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2Uo
KSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVy
ZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3Rh
dHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9
PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0
ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKQEAgLTMwNSwxNyArMjk3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0
aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5z
aXRpb25EYXRhKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZEVkZ2Up
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBs
ZVRyYW5zaXRpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUs
IGNvZGVPcmlnaW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25E
YXRhKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBA
IC0zNjAsOCArMzUwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSks
IEVkZ2UocGhpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBoaSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWls
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMzc3LDcgKzM2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2Rl
T3JpZ2luLCBjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDA2LDE4ICszOTYsMTcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAg
ICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksCi0gICAgICAgICAgICBXZWFrSlNDb25zdGFudCwgY29k
ZU9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3Vs
YXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8o
Y2VsbCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
Ci0gICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwg
RWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25z
dGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAg
IH0KICAgICAKQEAgLTQ1NCw4ICs0NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRENF
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIERDRVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBEQ0VQ
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxp
bWluYXRpb24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAg
ICAgICAgLy8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykK
KyAgICAgICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgp
OyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNl
dFJlZkNvdW50KDApOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBmaW5kIHRoZSBy
b290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUsIGFuZCBub2RlcyB0aGF0IGFy
ZQorICAgICAgICAvLyByZWFjaGFibGUgZnJvbSB0eXBlIGNoZWNrcy4gU2V0IHRoZWlyIHJlZiBj
b3VudHMgdG8gMSBhbmQgcHV0IHRoZW0gb24gdGhlCisgICAgICAgIC8vIHdvcmtsaXN0LgorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTsp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwg
ZmluZFR5cGVDaGVja1Jvb3QpOworICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkg
JiBOb2RlTXVzdEdlbmVyYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
CisgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fd29ya2xpc3QucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAv
LyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisg
ICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVk
Z2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0lu
ZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBi
bG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0
T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
CisgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4o
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fcmVm
Q291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5kVHlwZUNoZWNrUm9vdChOb2RlKiwg
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IFVudHlwZWRVc2Up
OworICAgICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgIG1fd29ya2xp
c3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb3VudEVkZ2Uo
Tm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmIChlZGdlLT5wb3N0Zml4UmVmKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9k
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNo
aWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBu
b2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLm5lZWRzQ2hlY2soKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92
ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVmVjdG9yPE5v
ZGUqLCAxMjg+IG1fd29ya2xpc3Q7Cit9OworCitib29sIHBlcmZvcm1EQ0UoR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRENFIFBoYXNlIik7
CisgICAgcmV0dXJuIHJ1blBoYXNlPERDRVBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdEQ0VQaGFzZV9oCisjZGVmaW5lIERGR0RDRVBoYXNlX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdD
b21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworLy8gR2xvYmFsIGRlYWQgY29kZSBlbGltaW5hdGlvbi4gRWxpbWluYXRlcyBhbnkgbm9k
ZSB0aGF0IGlzIG5vdCBOb2RlTXVzdEdlbmVyYXRlLAorLy8gbm90IHVzZWQgYnkgYW55IG90aGVy
IGxpdmUgbm9kZSwgYW5kIG5vdCBzdWJqZWN0IHRvIGFueSB0eXBlIGNoZWNrLgorCitib29sIHBl
cmZvcm1EQ0UoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEQ0VQaGFzZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0NDQ3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIKICNp
bmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuaCIKQEAgLTE0NywxMSArMTQ4LDEzIEBAIGlubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7
CiAgICAgfQogICAgIAorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAgICAg
ZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0ZXJh
dGlvbnMuXG4iLCBjbnQpOworCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50Q29u
dmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmco
ZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5vLW9wIHNpbmNlIENTRSByYXJlbHkg
ZGV0aHJlYWRzIHRoZSBncmFwaC4KLSAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCi0g
ICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAl
dSBpdGVyYXRpb25zLlxuIiwgY250KTsKKyAgICBwZXJmb3JtRENFKGRmZyk7CiAgICAgcGVyZm9y
bVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogICAgIEdyYXBoRHVtcE1vZGUgbW9k
ZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Nyw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQg
dG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0aGVt
IGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCiAgICAgICAg
ICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZO
b2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjRG91YmxlLCAqbm9kZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJlclVzZSksIEVkZ2Uo
KSwgRWRnZSgpKTsKQEAgLTUxOSw4ICs1MTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxvZ2lj
YWxOb3QtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdlLT5o
YXNCb29sZWFuUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgucmVm
KG5ld0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGxv
Z2ljYWxOb3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9ja0lu
ZGV4KCk7CkBAIC01NTcsOCArNTU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
Ly8gd291bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBieSBub3csIGJ1dCBpbnNlcnQgYSBmb3JjZWQg
ZXhpdCBqdXN0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHNhZmUuCiAgICAgICAgICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBG
b3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZ
UEVTOgpAQCAtNjM5LDggKzYzNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+
aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgbm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTY1MSw3ICs2NDgsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAg
ICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dv
cmxkKTsKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7
CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoYXJyYXlNb2RlKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2Rl
LT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFn
ZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CkBAIC03MzEsNiArNzI3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBlOgorICAgICAgICBj
YXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtODU5LDIxICs4NTYsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1
Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdl
KGFycmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFy
cmF5aWZ5LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
U3BlY05vbmUsIEFycmF5aWZ5LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRnZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0
dXJlKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrQXJyYXksIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtODgzLDE3ICs4ODAsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIGlmIChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKSB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywKLSAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVu
IDogRG9udFJlZkNoaWxkcmVuLAotICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVm
Tm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJm
bHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBF
ZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
cmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywKLSAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVm
Q2hpbGRyZW4sCi0gICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVm
Tm9kZSwKLSAgICAgICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBj
b2RlT3JpZ2luLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oYXJyYXlN
b2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgYmxlc3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2Um
IHN0b3JhZ2VDaGlsZCkKQEAgLTkwMyw4ICs4OTUsNyBAQCBwcml2YXRlOgogICAgICAgICBzd2l0
Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6IHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7
CisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQs
IG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTk5Myw5ICs5ODQsNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
QVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7CiAgICAgICAgIAotICAg
ICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKLSAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRFZGdl
KTsKLSAgICAgICAgCiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKQEAgLTEw
MTUsNyArMTAwMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9k
ZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBO
b2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwKKyAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjRG91YmxlLCAKICAgICAgICAgICAgIGRpcmVjdGlv
biA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRv
RG91YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdl
Lm5vZGUoKSwgTnVtYmVyVXNlKSk7CiAgICAgICAgIApAQCAtMTA0MCw5ICsxMDI4LDggQEAgcHJp
dmF0ZToKICAgICAgICAgdmFsdWUgPSBqc051bWJlcihKU0M6OnRvSW50MzIodmFsdWUuYXNOdW1i
ZXIoKSkpOwogICAgICAgICBBU1NFUlQodmFsdWUuaXNJbnQzMigpKTsKICAgICAgICAgZWRnZS5z
ZXROb2RlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsCi0g
ICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8oY29kZUJsb2NrKCkt
PmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkpKTsKLSAgICAgICAgbV9ncmFwaC5kZXJlZihvbGRO
b2RlKTsKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQs
IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oY29kZUJsb2Nr
KCktPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB0
cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KE5vZGUqIG5vZGUsIEFkZFNwZWN1bGF0aW9uTW9k
ZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE0NDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEMKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKICAg
ICAsIG1fZm9ybShMb2FkU3RvcmUpCiAgICAgLCBtX3VuaWZpY2F0aW9uU3RhdGUoTG9jYWxseVVu
aWZpZWQpCisgICAgLCBtX3JlZkNvdW50U3RhdGUoRXZlcnl0aGluZ0lzTGl2ZSkKIHsKICAgICBB
U1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KQEAgLTMxMiw3ICszMTMsNyBAQCB2b2lkIEdyYXBo
OjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0mCiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpCiB7CiAgICAgZGF0YUxvZygiREZHIGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwgIjpcbiIpOwotICAgIGRhdGFMb2coIiAg
Rml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRTdGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAi
OyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlmaWNhdGlvblN0YXRlLCAiXG4iKTsKKyAgICBk
YXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIs
IG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsg
UmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50U3RhdGUsICJcbiIpOwogICAgIAogICAgIE5v
ZGUqIGxhc3ROb2RlID0gMDsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNp
emUoKTsgKytiKSB7CkBAIC0zNDYsMTYgKzM0Nyw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9w
KQotewotICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgcmVmKTsKLX0KLQot
dm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2RlKiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVmKTsKLX0KLQogdm9pZCBHcmFwaDo6ZGV0aHJlYWQo
KQogewogICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0b3JlKQpAQCAtMzkwLDY3ICszODEsNiBAQCB2
b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrCiAgICAgc3VjY2Vzc29yLT5t
X3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRleCk7CiB9CiAKLXZvaWQgR3JhcGg6OmNvbGxl
Y3RHYXJiYWdlKCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEdh
cmJhZ2UgQ29sbGVjdGlvbiIpOwotICAgIAotICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMg
dG8gMCBmb3IgYWxsIG5vZGVzLgotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCi0gICAgICAgICAg
ICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQotICAg
ICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5zZXRSZWZDb3VudCgwKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1n
ZW5lcmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8KLSAgICAvLyAxIGFuZCBwdXQgdGhlbSBv
biB0aGUgd29ya2xpc3QuCi0gICAgVmVjdG9yPE5vZGUqLCAxMjg+IHdvcmtsaXN0OwotICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUo
KTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
YmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgp
OyBpbmRleEluQmxvY2stLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG5vZGUt
PnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSB3b3JrbGlzdC5sYXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAg
ICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAg
ICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwot
ICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1fdmFy
QXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUgPSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS0+cG9zdGZpeFJlZigpKQot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5h
cHBlbmQoY2hpbGROb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKSkgewotICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+cG9zdGZpeFJl
ZigpKQotICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFub2RlLT5jaGlsZDIoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDMoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiB2b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFi
aWxpdHkoKQogewogICAgIFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNDQ0NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDgz
ICs5MiwzNCBAQCBwdWJsaWM6CiAgICAgR3JhcGgoSlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwg
dW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYg
bXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgfkdyYXBoKCk7CiAgICAgCi0gICAgLy8gTWFyayBhIG5v
ZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBOb2RlKiByZWYoTm9kZSogbm9kZSkKKyAgICB2
b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUpCiAgICAgewotICAgICAg
ICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNyZW1lbnRpbmcpIHdhcyBhdCByZWZDb3VudCB6
ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRzIGNoaWxkcmVuLgotICAgICAgICBpZiAoIW5vZGUt
PnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGUpOwotICAgICAgICBy
ZXR1cm4gbm9kZTsKLSAgICB9Ci0gICAgRWRnZSByZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAg
ICAgcmVmKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgcmV0dXJuIGVkZ2U7Ci0gICAgfQotICAgIEVk
Z2UgcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gcmVmKGVkZ2Up
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRlcmVmKE5vZGUqIG5vZGUpCi0gICAgewotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgaWYgKCFub2RlLT5yZWZDb3VudCgpKQotICAgICAgICAg
ICAgZHVtcCgpOwotI2VuZGlmCi0gICAgICAgIGlmIChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAx
KQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihub2RlKTsKLSAgICB9Ci0gICAgdm9pZCBkZXJl
ZihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgfQot
ICAgIHZvaWQgZGVyZWYoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGRlcmVmKGVk
Z2UpOwotICAgIH0KLSAgICAKLSAgICAvLyBXaGVuIGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJv
bSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkgcmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMg
Y2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAgIHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOwot
ICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlKik7Ci0KLSAgICB2b2lkIGNoYW5nZUNoaWxkKEVk
Z2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdOb2RlKTsKLSAgICAg
ICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgfQogICAgICAgICBlZGdlLnNldE5v
ZGUobmV3Tm9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdl
LCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmID0gdHJ1ZSkKKyAgICB2b2lkIGNoYW5nZUVk
Z2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlKQogICAgIHsKLSAgICAgICAgaWYgKGNoYW5nZVJl
ZikgewotICAgICAgICAgICAgcmVmKG5ld0VkZ2UpOwotICAgICAgICAgICAgZGVyZWYoZWRnZSk7
Ci0gICAgICAgIH0KICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9k
ZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBO
b2RlKiBvbGROb2RlLCBOb2RlKiBuZXdOb2RlKQogICAgIHsKICAgICAgICAgaWYgKGVkZ2Uubm9k
ZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUNoaWxk
KGVkZ2UsIG5ld05vZGUsIGNoYW5nZVJlZik7CisgICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5l
d05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2Us
IEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNv
bXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlKQogICAg
IHsKICAgICAgICAgaWYgKGVkZ2UgIT0gb2xkRWRnZSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFu
Z2VFZGdlKGVkZ2UsIG5ld0VkZ2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyQW5kRGVy
ZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpOwogICAgICAgICBub2RlLT5jaGls
ZHJlbi5zZXRDaGlsZChpbmRleCwgRWRnZSgpKTsKICAgICB9CiAgICAgdm9pZCBjbGVhckFuZERl
cmVmQ2hpbGQxKE5vZGUqIG5vZGUpIHsgY2xlYXJBbmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CkBA
IC0xNzcsMTggKzEyOCwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3Rp
dHV0aW9uKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBib29sIHNob3VsZEdlbmVyYXRlID0g
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
SGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUt
PmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1D
aGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7Cisg
ICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0pOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0
aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQxKCksIHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpLCBzaG91bGRHZW5l
cmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGls
ZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZv
ckVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQg
cGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAg
IHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UoRWRnZSYgY2hpbGQpCiAgICAgewogICAg
ICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgogICAgICAg
ICBpZiAoIWNoaWxkKQpAQCAtMjA0LDIyICsxNTQsMTMgQEAgcHVibGljOgogICAgICAgICAvLyBU
aGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1lbnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNl
bWVudCBkb2VzIG5vdAogICAgICAgICAvLyBoYXZlIGEgcmVwbGFjZW1lbnQuCiAgICAgICAgIEFT
U0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYp
Ci0gICAgICAgICAgICByZWYoY2hpbGQpOwogICAgIH0KICAgICAKICNkZWZpbmUgREZHX0RFRklO
RV9BRERfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBh
cmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlw
ZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hp
bGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2
YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFt
cyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKICAgICAgICAgTm9kZSogbm9kZSA9IG5l
dyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdzKTsgXAogICAgICAgICBub2RlLT5wcmVkaWN0
KHR5cGUpOyBcCi0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKLSAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09
IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZD
aGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwKLSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5v
ZGUpOyBcCiAgICAgICAgIHJldHVybiBub2RlOyBcCiAgICAgfQogICAgIERGR19WQVJJQURJQ19U
RU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FERF9OT0RFKQpAQCAtMjI3LDEyICsxNjgsNiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCi0gICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRl
YWwgd2l0aAotICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBsb2NhbCB2YXJpYWJsZSByZWZlcmVuY2VzIGNhbiBmb3JtCi0gICAgLy8gY3ljbGVzLCBhbmQg
aGVuY2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0
aGUKLSAgICAvLyByZWZlcmVuY2UgY291bnRzIGFjY29yZGluZyB0byByZWFjaGFiaWxpdHkuCi0g
ICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwotICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3Rh
bnQoTm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewogICAgICAgICBp
ZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKQEAgLTY2OSwxOSArNjA0LDE5IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrY2hp
bGRJZHgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2Fw
KG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRUaGluZywgbmV3VGhpbmcpOwogICAgICAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywg
bmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCksIG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRo
aW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsK
ICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc1NSw2ICs2OTAsNyBAQCBwdWJsaWM6CiAgICAg
T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2ZpeHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3Jt
IG1fZm9ybTsKICAgICBVbmlmaWNhdGlvblN0YXRlIG1fdW5pZmljYXRpb25TdGF0ZTsKKyAgICBS
ZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBo
YW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE0NDQ3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDkgKzcyLDkgQEAgcHVibGljOgogICAgIH0KIAogI2RlZmluZSBERkdfREVG
SU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwg
UmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUs
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6
ZV90IGluZGV4LCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJh
bXMpIFwKICAgICB7IFwKLSAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5hZGRO
b2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2
YWx1ZUFyZ3MpKTsgXAorICAgICAgICByZXR1cm4gaW5zZXJ0KGluZGV4LCBtX2dyYXBoLmFkZE5v
ZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJncykpOyBcCiAgICAgfQogICAgIERGR19W
QVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0lOU0VSVF9OT0RFKQogI3VuZGVm
IERGR19ERUZJTkVfSU5TRVJUX05PREUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxNDQ0NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKGNoaWxkcmVu
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0g
ICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAg
LCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRG
bGFncyhvcCk7CkBAIC0xMDIsNyArMTAyLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpG
aXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3Rl
cihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAg
ICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAg
IHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMTE0LDcgKzExNCw3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAg
ICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMp
CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAg
ICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAs
IG1fb3BJbmZvKGltbS5tX3ZhbHVlKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICB7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhl
ZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAg
LCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAg
ICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAg
LCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCkBAIC0xNDEsNyArMTQxLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihB
ZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwgZmlyc3RDaGlsZCwgbnVtQ2hpbGRyZW4pCiAgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBt
X3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZv
KGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGlt
bTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQpAQCAtOTczLDEy
ICs5NzMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50OwogICAg
IH0KIAotICAgIE5vZGUqIHJlZigpCi0gICAgewotICAgICAgICBtX3JlZkNvdW50Kys7Ci0gICAg
ICAgIHJldHVybiB0aGlzOwotICAgIH0KLQogICAgIHVuc2lnbmVkIHBvc3RmaXhSZWYoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQrKzsKQEAgLTk5NCwxOCArOTg4LDYgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgZGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOwotICAg
ICAgICAtLW1fcmVmQ291bnQ7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHBvc3RmaXhEZXJl
ZigpCi0gICAgewotICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIHJldHVybiBt
X3JlZkNvdW50LS07Ci0gICAgfQotICAgIAogICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAgewogICAg
ICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFi
bGVBY2Nlc3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBt
YWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVF
eGl0c0ZvcndhcmQpIFwKKyAgICBtYWNybyhNb3ZIaW50LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUV4aXRzRm9yd2FyZCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoaSwgTm9kZURv
ZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTQ0NDc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTk2OCw2ICsxOTY4LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92SGlu
dDogeworICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgc3BlY3VsYXRlKG5v
ZGUsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgLy8gU2V0TG9jYWwg
ZG91YmxlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgYSBub2RlIHdpbGwgYmUgc3RvcmVkIGFuZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDE0NDQ3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc4LDcgKzE2NzgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAg
ICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIGNhc2UgSW5saW5lU3RhcnQ6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDQ0NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEw
ICsxNDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRk
KG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAg
ICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxl
QWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0
ZSA9PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwg
bXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJl
ZkNvdW50cy5nZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxk
cmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFw
aC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191020</attachid>
            <date>2013-03-01 13:09:38 -0800</date>
            <delta_ts>2013-03-01 13:42:57 -0800</delta_ts>
            <desc>it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71657</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDEyIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludDogeworICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiBBIE1vdkhpbnQg
aXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNldExvY2FsCisgICAgICAgIC8vIHdh
cyBkZWFkLgorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRz
IGhhcyBiZWVuIHNldC4KQEAgLTE2MjgsMTggKzE2MzQsNiBAQCBpbmxpbmUgYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgLy8gSWYgdGhlIEdldExvY2FsIGlz
IGRlYWQsIHRoZW4gd2UgdHJhbnNmZXIgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAgICAgICAgICAv
LyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIGFmdGVyIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzODkKLSAgICAgICAgICAgIGlmICghbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2Zl
cnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgotICAgICAgICAgICAgICAgIHNvdXJjZSA9
IGluVmFyaWFibGU7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNmZXJpbmcgIik7Ci0gICAg
ICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAgICAgICAgICAg
ICBkYXRhTG9nRigiIGZyb20gaGVhZCB0byB0YWlsIChkZWFkIEdldExvY2FsIGNhc2UpLlxuIik7
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3Vs
YXRpb25zLgogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCw3
ICs0NjgsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdl
dCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4
OCw3ICs0ODcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0
aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCk7CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOwpAQCAtNTA0LDEw
ICs1MDIsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1p
emUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJl
Zihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNo
aWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1
bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PnJlZigpOyAvLyBUaGlzIGlzIGEgbXVzdC1nZW5lcmF0ZSBub2RlLgogICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7
IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0
TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDgg
KzUyNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5
IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9ubHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9ib2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVu
dHMuCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICBDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQsIGNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBjb2RlT3JpZ2luKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRv
Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKQEAgLTU4MSwxMCAr
NTc2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJD
YXB0dXJlKGluZGV4KSkpOwogCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1
bWVudHNOb3RDcmVhdGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbik7CiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZHJlbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTU5OCw3ICs1OTMsNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE5vcCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgwKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTYyNiw4ICs2
MjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVu
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50
b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3Vt
ZW50cyk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVzZXQoKTsKQEAgLTc4NSw3
ICs3NzgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVu
dHMuY29udGFpbnMoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAg
ICAgaWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2VkQXJndW1lbnRzUmVn
aXN0ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRn
ZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC03OTMsNyArNzg1LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsgLy8gQXJpc2VzIGlm
IHdlIENTRSB0d28gR2V0TG9jYWxzIHRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgYW5kIHRoZW4g
Q1NFIHRoZSBzZWNvbmQgdXNlIG9mIHRoZSBHZXRMb2NhbCB0byB0aGUgZmlyc3QuCiAgICAgICAg
ICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYoZWRnZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJv
bUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAxNDQ0ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogVmVjdG9yPE5vZGUq
LCA4PiB7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBs
YXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVl
UGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRl
UG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgUmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9k
ZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CisgICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYs
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOwogICAgIERGR19W
QVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FQUEVORF9OT0RFKQogI3VuZGVm
IERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDE0NDQ4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRl
UG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJn
cykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2Rl
KiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgUmVmQ2hpbGRyZW5Nb2RlIHJl
ZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdy
YXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFy
YW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUocmVm
Q2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlQXJn
cyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFy
YW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBlbmQocmVzdWx0KTsgXAogICAgICAg
ICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTgsNzcgKzY5OCw1NiBAQCBwcml2YXRlOgogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9k
ZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxk
MyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0g
ICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAg
ICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQy
KSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVP
cmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAg
ICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJl
c3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRl
KQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBFZGdl
IGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2UgY2hpbGQzID0gRWRnZSgpKQogICAg
IHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAgICAgICAgICAg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwg
Y3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CisgICAgICAgICAg
ICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGls
ZDMpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11
c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlw
ZSBvcCwgT3BJbmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5v
ZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFk
ZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBFZGdlKGNoaWxk
MSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBv
cCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiks
IEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIGlmIChvcCA9PSBQaGkpCiAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0
RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hp
bGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSog
YWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIsIE5vZGUq
IGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewog
ICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIp
LCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvMSwgaW5mbzIsCisgICAgICAgICAgICBFZGdlKGNoaWxkMSksIEVkZ2UoY2hp
bGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZs
YWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxk
cmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIE5v
ZGUqIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8x
LCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFk
ZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKLSAgICAgICAgICAgIE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGlu
Zm8xLCBpbmZvMiwKKyAgICAgICAgICAgIFNwZWNOb25lLCBOb2RlOjpWYXJBcmcsIG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCiAgICAgICAgICAgICBtX2dyYXBoLm1fdmFy
QXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFy
Z3MpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0g
MDsKICAgICAgICAgCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5l
cmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBOb2RlKiBpbnNlcnRQaGlOb2RlKE9wSW5mbyBp
bmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAgICAgIE5vZGUqIHJlc3VsdCA9IG1f
Z3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLAotICAgICAgICAgICAgUGhpLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvKTsK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGksIGN1
cnJlbnRDb2RlT3JpZ2luKCksIGluZm8pOwogICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVz
dWx0KTsKLQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw2ICs0NSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFdmVyeXRoaW5nSXNMaXZlKTsK
KyAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICBtX2NvdW50ID0gMDsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsOCArMTQwLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFr
ZW5CbG9ja0luZGV4LCBib3VuZGFyeUNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBKdW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3VuZGFyeUNvZGVPcmlnaW4sIE9wSW5mbyh0YWtlbkJsb2NrSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5
Q29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2Vu
QmxvY2tJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYnJhbmNoLT5yZWZDb3VudCgpID09IDEpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoLT5jb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0
QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBT
cGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFu
Z2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI3
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbGl2ZW5lc3NOb2RlLT5zaG91bGRHZW5lcmF0
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAg
ICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLCAKICAgICAgICAgICAgIE9wSW5mbyhsaXZlbmVz
c05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1Jl
dGhyZWFkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1Ymxp
YzoKICAgICAgICAgY2Fub25pY2FsaXplTG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFn
YXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRP
cGVyYW5kPigpOwotICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CiAgICAgICAgIAog
ICAgICAgICBtX2dyYXBoLm1fZm9ybSA9IFRocmVhZGVkQ1BTOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTEyNCw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEFMV0FZU19JTkxJTkUg
Tm9kZSogYWRkUGhpU2lsZW50bHkoQmFzaWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVPcmlnaW4m
IGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCiAgICAgewotICAgICAg
ICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoRG9udFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIFBoaSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhpLCBjb2RlT3Jp
Z2luLCBPcEluZm8odmFyaWFibGUpKTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3Vs
dCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4
LDcgKzEwMDgsNiBAQCBwcml2YXRlOgogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1f
Y3VycmVudE5vZGUtPmluZGV4KCksICIgLT4gQCIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0g
ICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgIH0KQEAgLTEwMjQsNyArMTAyMyw2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAg
ICAgCiAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAg
bV9jdXJyZW50Tm9kZS0+c2V0UmVmQ291bnQoMSk7CiAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZh
bnRQaGFudG9tQ2hpbGRyZW4obV9jdXJyZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBB
dCB0aGlzIHBvaW50IHdlIHdpbGwgZWxpbWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9k
ZS4KQEAgLTExNTQsMTAgKzExNTIsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBJZiB3ZSByZXBsYWNlIGEgR2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQs
IHRoZW4gdHVybiB0aGUgR2V0TG9jYWxVbmxpbmtlZAogICAgICAgICAgICAgLy8gaW50byBhIEdl
dExvY2FsLgotICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2Nh
bFVubGlua2VkKSB7CisgICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdl
dExvY2FsVW5saW5rZWQpCiAgICAgICAgICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0
VG9HZXRMb2NhbCh2YXJpYWJsZUFjY2Vzc0RhdGEsIHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC5yZWYocGhpKTsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIxMCw3ICsxMjA2LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEFTU0VSVChkYXRhTm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAg
bV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgbm9kZS0+Y2hp
bGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRhdGFOb2RlKTsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVm
KGRhdGFOb2RlKTsKICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiAr
OTEsMjEgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaQogICAgIH0K
IH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFJlZkNvdW50U3RhdGUg
c3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgRXZlcnl0aGluZ0lzTGl2
ZToKKyAgICAgICAgb3V0LnByaW50KCJFdmVyeXRoaW5nSXNMaXZlIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXhhY3RSZWZDb3VudDoKKyAgICAgICAgb3V0LnByaW50KCJFeGFjdFJlZkNv
dW50Iik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFByb29mU3RhdHVzIHN0YXR1cykKIHsKICAgICBz
d2l0Y2ggKHN0YXR1cykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21t
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5o
CShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1v
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDE1IEBAIGVudW0gVW5pZmljYXRpb25T
dGF0ZSB7CiAgICAgR2xvYmFsbHlVbmlmaWVkCiB9OwogCisvLyBEZXNjcmliZXMgaG93IHJlZmVy
ZW5jZSBjb3VudHMgaW4gdGhlIGdyYXBoIGJlaGF2ZS4KK2VudW0gUmVmQ291bnRTdGF0ZSB7Cisg
ICAgLy8gRXZlcnl0aGluZyBoYXMgcmVmQ291bnQoKSA9PSAxLgorICAgIEV2ZXJ5dGhpbmdJc0xp
dmUsCisKKyAgICAvLyBTZXQgYWZ0ZXIgRENFIGhhcyBydW4uCisgICAgRXhhY3RSZWZDb3VudAor
fTsKKwogZW51bSBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfTsKIAogZW51bSBTcGVjdWxhdGlvbkRp
cmVjdGlvbiB7IEZvcndhcmRTcGVjdWxhdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiB9OwpAQCAt
MjUwLDYgKzI1OSw3IEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpERkc6Ok9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUpOwogdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkdyYXBoRm9ybSk7CiB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6VW5pZmljYXRpb25TdGF0ZSk7Cit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UmVmQ291bnRTdGF0ZSk7CiB2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6UHJvb2ZTdGF0dXMpOwog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikp
Lm1fdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEwNCw3ICsxMDMsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0
KCk7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KSkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291
bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5C
bG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwpAQCAtMTI2LDcgKzEyNCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjYXNlIEFycmF5aWZ5OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5h
cnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg2LDI1ICsxODMsMjIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmln
aW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwg
Y2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRF
ZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5
U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXpl
KCksIHByb3BlcnR5U3RvcmFnZSk7CkBAIC0yNTIsMTIgKzI0NiwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5p
c1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwg
T3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29k
ZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGls
ZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxk
KS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2Up
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
aGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwpAQCAtMjg3LDE3ICsyODAsMTYgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zm
c2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxk
IHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJvcGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0
IHRoZSBkb3VibGUgdXNlLgorICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0
dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGls
ZEVkZ2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNl
KCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1Y3R1
cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0
YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkg
PT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0
dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNp
dHkoKSk7CkBAIC0zMDUsMTcgKzI5NywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFu
c2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0
ZXJmbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdl
KSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1w
bGVUcmFuc2l0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJl
LCBjb2RlT3JpZ2luLCAKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApA
QCAtMzYwLDggKzM1MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFs
dWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUp
LCBFZGdlKHBoaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFBoYW50b21Mb2NhbCwgIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShwaGkpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAg
ICAgICAgICAKQEAgLTM3Nyw3ICszNjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29k
ZU9yaWdpbiwgY2hpbGRyZW4pOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQwNiwxOCArMzk2LDE3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBj
b2RlT3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CiAg
ICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLAotICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhjZWxsKSk7CisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZv
KGNlbGwpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
LAotICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSks
IEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4s
CisgICAgICAgICAgICAgICAgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29u
c3RhbnQsIENlbGxVc2UpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2Rl
T3JpZ2luLAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1
cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAg
ICB9CiAgICAgCkBAIC00NTQsOCArNDQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RD
RVBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgRENF
UGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZGVhZCBjb2RlIGVs
aW1pbmF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTsp
CisgICAgICAgICAgICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDAp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUo
KTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5z
ZXRSZWZDb3VudCgwKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBOb3cgZmluZCB0aGUg
cm9vdHM6IHRoZSBub2RlcyB0aGF0IGFyZSBtdXN0LWdlbmVyYXRlLCBhbmQgbm9kZXMgdGhhdCBh
cmUKKyAgICAgICAgLy8gcmVhY2hhYmxlIGZyb20gdHlwZSBjaGVja3MuIFNldCB0aGVpciByZWYg
Y291bnRzIHRvIDEgYW5kIHB1dCB0aGVtIG9uIHRoZQorICAgICAgICAvLyB3b3JrbGlzdC4KKyAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OworICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUs
IGZpbmRUeXBlQ2hlY2tSb290KTsKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygp
ICYgTm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAgICAg
ICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IAorICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBO
b2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICBtX3dvcmtsaXN0LnJl
bW92ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsg
Ly8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgor
ICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRF
ZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tz
W2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0g
YmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OworICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVu
KG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3Jl
ZkNvdW50U3RhdGUgPSBFeGFjdFJlZkNvdW50OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmluZFR5cGVDaGVja1Jvb3QoTm9kZSos
IEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBVbnR5cGVkVXNl
KTsKKyAgICAgICAgaWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICBtX3dvcmts
aXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY291bnRFZGdl
KE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5v
ZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21D
aGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBlZGdlID0g
bm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZWRnZS5uZWVkc0NoZWNrKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1v
dmVFZGdlRnJvbUJhZyhpLS0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFZlY3RvcjxO
b2RlKiwgMTI4PiBtX3dvcmtsaXN0OworfTsKKworYm9vbCBwZXJmb3JtRENFKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIERDRSBQaGFzZSIp
OworICAgIHJldHVybiBydW5QaGFzZTxEQ0VQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHRENFUGhhc2VfaAorI2RlZmluZSBERkdEQ0VQaGFzZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIEdsb2JhbCBkZWFkIGNvZGUgZWxpbWluYXRpb24uIEVsaW1pbmF0ZXMgYW55IG5v
ZGUgdGhhdCBpcyBub3QgTm9kZU11c3RHZW5lcmF0ZSwKKy8vIG5vdCB1c2VkIGJ5IGFueSBvdGhl
ciBsaXZlIG5vZGUsIGFuZCBub3Qgc3ViamVjdCB0byBhbnkgdHlwZSBjaGVjay4KKworYm9vbCBw
ZXJmb3JtRENFKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRENFUGhhc2VfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1BoYXNlLmgiCiAj
aW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQaGFzZS5o
IgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmgiCkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBpbmxpbmUgYm9vbCBjb21waWxl
KENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcp
OwogICAgIH0KICAgICAKKyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCisgICAgICAg
IGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAldSBpdGVy
YXRpb25zLlxuIiwgY250KTsKKwogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENv
bnZlcmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5n
KGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5jZSBDU0UgcmFyZWx5
IGRldGhyZWFkcyB0aGUgZ3JhcGguCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQot
ICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJnZWQgaW4g
JXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisgICAgcGVyZm9ybURDRShkZmcpOwogICAgIHBlcmZv
cm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICAgICBHcmFwaER1bXBNb2RlIG1v
ZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBuZWVk
IHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxpbmcgdGhl
bSBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgogICAgICAg
ICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVm
Tm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY0RvdWJsZSwgKm5vZGUpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2UpLCBFZGdl
KCksIEVkZ2UoKSk7CkBAIC01MTgsOCArNTE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2UgPSBsb2dp
Y2FsTm90LT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxkRWRnZS0+
aGFzQm9vbGVhblJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnJl
ZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihs
b2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENo
aWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2VuQmxvY2tJ
bmRleCgpOwpAQCAtNTU2LDggKzU1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHdvdWxkIGhhdmUgYWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQgaW5zZXJ0IGEgZm9yY2Vk
IGV4aXQganVzdCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBiZSBzYWZlLgogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNO
b25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Rm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19U
WVBFUzoKQEAgLTYzOCw4ICs2MzUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwogICAgICAg
ICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUt
Pmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1
cmUsIG5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfSBlbHNlCkBAIC02NTAsMTAgKzY0Nyw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpOwogICAg
ICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJz
V29ybGQpOwogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
KTsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5v
ZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9y
YWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2Ug
PSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UpOwogICAgICAgICAgICAgaWYgKCFzdG9yYWdl
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MzAsNiArNzI2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgICAgICBj
YXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgTGFzdE5vZGVUeXBl
OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtODM3LDcgKzgzNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAg
IH0KICAgICAKLSAgICBOb2RlKiBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXksIE5vZGUqIGluZGV4LCBib29sICgqc3RvcmFn
ZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2Vu
ZXJhdGUgPSB0cnVlKQorICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5TW9kZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSogaW5kZXgsIGJvb2wgKCpz
dG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC04NTgs
MjEgKzg1NSwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBBcnJheWlmeVRvU3RydWN0dXJlLCBjb2RlT3Jp
Z2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBD
ZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1
Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJh
eSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04ODIsMTcgKzg3OSwx
MiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVy
Zmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgICAgIHNob3VsZEdl
bmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0gICAgICAgICAgICAgICAg
c2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAgICAgICAgICAg
U3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxs
VXNlKSk7CisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0
ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBS
ZWZDaGlsZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKLSAgICAgICAgICAgIHNob3VsZEdlbmVyYXRl
ID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgU3BlY05vbmUsIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkp
LCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwKKyAgICAg
ICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxV
c2UpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFz
ZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQpAQCAtOTAyLDggKzg5NCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxk
cmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTgyLDcgKzk3Myw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEVkZ2Ug
b2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwog
ICAgICAgICAKICAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9IEludDMyVXNlKSB7CkBA
IC05OTIsOSArOTgyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChuZXdF
ZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFw
aC5yZWYobmV3RWRnZSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7Ci0gICAgICAg
IAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCkBAIC0xMDE0LDcgKzEwMDEs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRn
ZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCisgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dh
cmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKICAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIE51
bWJlclVzZSkpOwogICAgICAgICAKQEAgLTEwMzksOSArMTAyNiw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKICAg
ICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CiAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAotICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRD
b25zdGFudCh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7CisgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0YW50LCBtX2N1cnJlbnRO
b2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZp
bmRDb25zdGFudCh2YWx1ZSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdHJ1bmNhdGVDb25z
dGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDQ0ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTYsNiArNTYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBDCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX2Zvcm0o
TG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQorICAg
ICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5dGhpbmdJc0xpdmUpCiB7CiAgICAgQVNTRVJUKG1fcHJv
ZmlsZWRCbG9jayk7CiB9CkBAIC0zMTIsNyArMzEzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2Nr
SGVhZGVyKFByaW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ewogICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxv
Y2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKLSAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0
YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRp
b24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7CisgICAgZGF0YUxvZygiICBG
aXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7
IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBz
dGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKICAgICAKICAgICBOb2RlKiBsYXN0Tm9k
ZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikg
ewpAQCAtMzQ2LDE2ICszNDcsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
CiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKLXsKLSAgICBE
RkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7Ci19Ci0KLXZvaWQgR3JhcGg6
OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCi17Ci0gICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4o
KnRoaXMsIG9wLCBkZXJlZik7Ci19Ci0KIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKIHsKICAgICBp
ZiAobV9mb3JtID09IExvYWRTdG9yZSkKQEAgLTM5MCw2NyArMzgxLDYgQEAgdm9pZCBHcmFwaDo6
aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3Nv
cnMuYXBwZW5kKGJsb2NrSW5kZXgpOwogfQogCi12b2lkIEdyYXBoOjpjb2xsZWN0R2FyYmFnZSgp
Ci17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBHYXJiYWdlIENvbGxl
Y3Rpb24iKTsKLSAgICAKLSAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFs
bCBub2Rlcy4KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQotICAgICAgICAgICAgYmxvY2stPmF0
KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHBo
aUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKLSAgICAgICAgICAgIGJs
b2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7Ci0gICAgfQotICAgIAotICAgIC8v
IE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNl
dCB0aGVpciByZWYgY291bnRzIHRvCi0gICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmts
aXN0LgotICAgIFZlY3RvcjxOb2RlKiwgMTI4PiB3b3JrbGlzdDsKLSAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJ
bmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhd
LmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJs
b2NrLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7Ci0gICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRSZWZDb3Vu
dCgxKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBOb2Rl
KiBub2RlID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7
Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5v
dCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgIGNoaWxkSWR4
IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAg
ICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxk
Tm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkp
IHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkKLSAgICAg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBw
ZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCktPnBvc3Rm
aXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5j
aGlsZDMoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsK
ICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw4MyArOTIsMzQgQEAg
cHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2lnbmVkIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVW
YWx1ZXMpOwogICAgIH5HcmFwaCgpOwogICAgIAotICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5n
IHJlZmVyZW5jZWQuCi0gICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCisgICAgdm9pZCBjaGFuZ2VD
aGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQogICAgIHsKLSAgICAgICAgLy8gSWYgdGhl
IHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdl
IG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLT5wb3N0Zml4UmVm
KCkpCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKLSAgICAgICAgcmV0dXJuIG5vZGU7
Ci0gICAgfQotICAgIEVkZ2UgcmVmKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJlZihlZGdl
Lm5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBlZGdlOwotICAgIH0KLSAgICBFZGdlIHJlZihOb2Rl
KiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZihlZGdlKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQotICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAgICAgIGR1bXAoKTsK
LSNlbmRpZgotICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkgPT0gMSkKLSAgICAgICAg
ICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7Ci0gICAgfQotICAgIHZvaWQgZGVyZWYoRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICB2b2lkIGRl
cmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBkZXJlZihlZGdlKTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0byAxLCBp
dCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxkcmVuLCBh
bmQgdmljZSB2ZXJzYS4KLSAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKLSAgICB2b2lkIGRl
cmVmQ2hpbGRyZW4oTm9kZSopOwotCi0gICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBO
b2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCi0gICAgewotICAgICAgICBpZiAo
Y2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3Tm9kZSk7Ci0gICAgICAgICAgICBkZXJl
ZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIH0KICAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdF
ZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VFZGdlKEVkZ2UmIGVk
Z2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAg
ICAgICAgIHJlZihuZXdFZGdlKTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2UpOwotICAgICAgICB9
CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVB
bmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hh
bmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZSogb2xkTm9k
ZSwgTm9kZSogbmV3Tm9kZSkKICAgICB7CiAgICAgICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGRO
b2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdO
b2RlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVk
Z2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJlQW5kU3dh
cChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7CiAgICAgICAg
IGlmIChlZGdlICE9IG9sZEVkZ2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5n
ZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKKyAgICAgICAgY2hhbmdlRWRnZShlZGdl
LCBuZXdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQoTm9k
ZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
cmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hp
bGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShO
b2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQpAQCAtMTc3LDE4ICsx
MjgsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2Rl
KiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCk7CiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3Mp
IHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxk
KCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsg
Y2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZSht
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAg
ICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JF
ZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3Jt
U3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAg
ICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3Vs
ZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUt
PmNoaWxkMygpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZvcm1TdWJz
dGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZikKKyAgICB2b2lkIHBlcmZv
cm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkKQogICAgIHsKICAgICAgICAgLy8gQ2hl
Y2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KICAgICAgICAgaWYgKCFjaGls
ZCkKQEAgLTIwNCwyMiArMTU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlcmUgaXMgZGVm
aW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBu
b3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgogICAgICAgICBBU1NFUlQoIWNoaWxk
LT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRkUmVmKQotICAgICAgICAg
ICAgcmVmKGNoaWxkKTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05PREUo
dGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwg
dmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVt
cGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwg
UmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXND
b21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQ
b3N0IE5vZGUqIGFkZE5vZGUoU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZh
bHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1fYWxsb2Nh
dG9yKSBOb2RlKHZhbHVlQXJncyk7IFwKICAgICAgICAgbm9kZS0+cHJlZGljdCh0eXBlKTsgXAot
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAg
ICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZOb2RlTW9kZSA9PSBSZWZOb2RlKSBc
Ci0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAocmVmQ2hpbGRyZW5Nb2Rl
ID09IFJlZkNoaWxkcmVuKSBcCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsgXAogICAg
ICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVO
Q1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKQEAgLTIyNywxMiArMTY4LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIC8vIENhbGwgdGhpcyBpZiB5b3UndmUg
bW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgKLSAg
ICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwgdmFy
aWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQotICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNlIHJlZmVy
ZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCi0gICAgLy8g
cmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5LgotICAgIHZvaWQgY29s
bGVjdEdhcmJhZ2UoKTsKLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpCkBAIC02NjksMTkgKzYwNCwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBu
b2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxk
SWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGls
ZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUt
PmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcpOwogICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhp
bmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAo
bm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkBAIC03NTUsNiArNjkwLDcgQEAgcHVibGljOgogICAgIE9wdGltaXphdGlv
bkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zvcm07CiAg
ICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7CisgICAgUmVmQ291bnRTdGF0
ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNkZWZpbmUgREZHX0RFRklORV9JTlNFUlRf
Tk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0Nv
bW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFt
cyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNoaWxkcmVu
TW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwg
U3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAg
eyBcCi0gICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGls
ZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7
IFwKKyAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVN
UExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9JTlNFUlRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5F
X0lOU0VSVF9OT0RFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGlsZHJlbikKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1f
cmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0
aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpA
QCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxk
MSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZD
b3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CiAgICAgICAg
IHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVu
KEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9y
ZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29wSW5mbyhp
bW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAt
MTI3LDcgKzEyNyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVP
cmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwg
Y2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1
YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3Vu
dCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5m
bzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9wcmVkaWN0
aW9uKFNwZWNOb25lKQpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNoaWxkcmVuKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgw
KQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVkPihpbW0yLm1fdmFsdWUp
KQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTk3MywxMiArOTczLDYgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBO
b2RlKiByZWYoKQotICAgIHsKLSAgICAgICAgbV9yZWZDb3VudCsrOwotICAgICAgICByZXR1cm4g
dGhpczsKLSAgICB9Ci0KICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3JlZkNvdW50Kys7CkBAIC05OTQsMTggKzk4OCw2IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgbV9yZWZDb3VudCA9IHJlZkNvdW50OwogICAgIH0KICAgICAKLSAgICB2b2lkIGRl
cmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAgICAgLS1tX3Jl
ZkNvdW50OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBwb3N0Zml4RGVyZWYoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOwotICAgICAgICByZXR1cm4gbV9yZWZDb3VudC0t
OwotICAgIH0KLSAgICAKICAgICBFZGdlJiBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIFZhcmlhYmxlQWNjZXNzRGF0
YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9cCiAgICAgbWFjcm8oR2V0TG9j
YWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFNldExvY2FsLCBOb2RlRXhpdHNGb3J3YXJk
KSBcCisgICAgbWFjcm8oTW92SGludCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zvcndh
cmQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
Tm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8
IE5vZGVSZWxldmFudFRvT1NSKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhmbGFncyAmIH5O
b2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZl
bHkgdGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3Vn
aCBhIGxvb3AsCisgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBs
ZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKKyAg
ICAgICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWln
aHQgYmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQorICAgICAgICAgICAgLy8g
cG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMs
IGJ1dCByaWdodCBub3cgSSBkb24ndCB0aGluaworICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlk
ZW5jZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdl
RmxhZ3MoKGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KSB8IE5vZGVVc2VkQXNOdW1iZXIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjE0LDEy
ICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
IGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5w
cmVkaWN0aW9uKCkpOwogCi0gICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhh
dCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxv
b3AsCi0gICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5n
IHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKLSAgICAgICAg
ICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUg
d29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQotICAgICAgICAgICAgLy8gcG9pbnQg
YW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCBy
aWdodCBub3cgSSBkb24ndCB0aGluawotICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0
aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAg
IGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRh
LT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5v
ZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03MzcsNyArNzM4
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIEFy
cmF5aWZ5OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
SWRlbnRpdHk6IHsKKyAgICAgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgY2FzZSBNb3ZIaW50
OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQg
dGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVk
IGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIENSQVNI
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjgsNiArMTk2
OCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6IHsKKyAgICAgICAgY29tcGlsZU1vdkhpbnQo
bm9kZSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIFNldExv
Y2FsOiB7CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJl
IGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1
cnJlbnROb2RlKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIElubGluZVN0YXJ0
OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMSArMjg4LDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0g
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2sgKyAxLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGlj
dGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9w
SW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrICsgMSwgdmFyaWFibGUtPnByZWRpY3Rpb24oKSwgR2V0TG9jYWwsIGNvZGVPcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUp
KTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
ZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0
cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3Bl
Y05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
KSksCiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGdldExvY2FsLCBDZWxsVXNlKSk7CiAK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKQEAgLTMyMCwxNCArMzIwLDE0IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUpLCBjaGlsZDEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4s
IE9wSW5mbyh2YXJpYWJsZSksIGNoaWxkMSk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVXNl
IGEgRm9yd2FyZENoZWNrU3RydWN0dXJlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQg
dG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24g
cmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENo
ZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVkZ2Uo
Y2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXIt
PnZhbHVlLm1fc3RydWN0dXJlKSksCisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxk
MS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5vZGVz
SW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJ
bmRleChpKSkKICAgICAgICAgICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5v
ZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAgICAgICBW
X0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNv
dW50KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50
KCkgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJl
ZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBt
X2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRn
ZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFlZGdlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191029</attachid>
            <date>2013-03-01 13:42:57 -0800</date>
            <delta_ts>2013-03-01 16:09:36 -0800</delta_ts>
            <desc>it&apos;s starting to do things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73237</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDE3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEg
TW92SGludCBpcyBlZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKKyAgICAg
ICAgLy8gd2FzIGRlYWQuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBNb3ZIaW50OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0
LgpAQCAtMTYyOCwxOCArMTYzOSw2IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdl
U3RhdGVBdFQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6Ci0gICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgaXMgZGVhZCwgdGhlbiB3
ZSB0cmFuc2ZlciBmcm9tIGhlYWQgdG8gdGFpbC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
YW4gZ2V0IHJpZCBvZiB0aGlzIGNhc2UgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwOTM4OQotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUg
ZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAgICAgICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsK
LSNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKLSAgICAgICAgICAgICAgICBz
b3VyY2UuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIg
ZnJvbSBoZWFkIHRvIHRhaWwgKGRlYWQgR2V0TG9jYWwgY2FzZSkuXG4iKTsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhlIGJs
b2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlvbnMuCiAgICAg
ICAgICAgICBzb3VyY2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY4LDcgKzQ2OCw2IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3QgZ2V0IHJpZCBvZiB0aGlz
IG5vZGUsIGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50LgogICAgICAgICAgICAg
ICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQx
KEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDcgKzQ4Nyw2IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5j
aGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBu
b2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQyKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CkBAIC01MDQsMTAgKzUwMiw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdl
KCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15
QXJndW1lbnRzTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVmKCk7IC8vIFRo
aXMgaXMgYSBtdXN0LWdlbmVyYXRlIG5vZGUuCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVj
b25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm9ldyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50c0xl
bmd0aC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzEsOCArNTI3LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0aGlzIHdp
bGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgY29k
ZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwpAQCAtNTgxLDEwICs1NzYsMTAgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxv
Y2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUoaW5kZXgp
KSk7CiAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJl
Zk5vZGUsIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0
ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFu
dG9tLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo
aWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOwpAQCAtNTk4LDcgKzU5Myw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjI2LDggKzYyMCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29k
ZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsKICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwpAQCAtNzg1LDcgKzc3OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhl
ZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBpZiAoIWlzRGVh
ZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CiAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc5Myw3ICs3ODUsNiBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeyAvLyBBcmlzZXMgaWYgd2UgQ1NFIHR3byBH
ZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBhbmQgdGhlbiBDU0UgdGhlIHNlY29u
ZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRoZSBmaXJzdC4KICAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdl
KTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8Tm9kZSosIDg+IHsKICAgICB9
CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUodGVtcGxhdGVQcmUsIHRlbXBs
YXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVl
QXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFw
cGVuZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlLCBTcGVjdWxhdGVk
VHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAgICB0ZW1wbGF0ZVByZSB0eXBl
UGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgU3BlY3VsYXRlZFR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAgREZHX1ZBUklBRElDX1RFTVBM
QVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAjdW5kZWYgREZHX0RFRklORV9B
UFBFTkRfTk9ERQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNkZWZpbmUg
REZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFy
YW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVt
cGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6
OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2Rl
LCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0
ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBT
cGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7
IFwKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUs
IHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAorICAgICAg
ICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1
ZUFyZ3MpOyBcCiAgICAgICAgIGFwcGVuZChyZXN1bHQpOyBcCiAgICAgICAgIHJldHVybiByZXN1
bHQ7IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5OCw3NyAr
Njk4LDU2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgTm9k
ZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1
cnJlbnRDb2RlT3JpZ2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxk
MykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdl
KGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgQVNTRVJUKG9w
ICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAg
ICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAg
ICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIEVkZ2UgY2hpbGQxLCBFZGdl
IGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkpCiAgICAgewogICAgICAgICBO
b2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBv
cCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CiAgICAgICAg
IEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQot
ICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8g
aW5mbywgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0g
MCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAg
ICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAg
ICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGls
ZDIpLCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50Q29k
ZU9yaWdpbigpLCBpbmZvLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMp
KTsKICAgICAgICAgaWYgKG9wID09IFBoaSkKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5w
aGlzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBO
b2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5v
ZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZSogY2hpbGQxID0gMCwg
Tm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUq
IHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8xLCBpbmZvMiwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQz
KSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8x
LCBpbmZvMiwKKyAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNo
aWxkMykpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9k
ZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgTm9kZSogYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZv
MikKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAg
ICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAg
ICAgTm9kZTo6VmFyQXJnLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAor
ICAgICAgICAgICAgU3BlY05vbmUsIE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8xLCBpbmZvMiwKICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5z
aXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncyk7CiAgICAgICAg
IEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3Vs
dCk7CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAg
ICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAogICAgIE5vZGUqIGluc2VydFBoaU5vZGUoT3BJbmZvIGluZm8sIEJhc2ljQmxv
Y2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2Rl
KAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0g
ICAgICAgICAgICBQaGksIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8pOworICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBoaSwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbyk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwotCiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEw
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQo
bV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5t
X3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKKyAgICAgICAgQVNTRVJUKG1f
Z3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV2ZXJ5dGhpbmdJc0xpdmUpOworICAgICAgICAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIG1fY291bnQg
PSAwOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgamV0dGlzb25CbG9jayhibG9ja0luZGV4LCBub3RUYWtlbkJsb2NrSW5kZXgs
IGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsIEp1bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5Q29k
ZU9yaWdpbiwgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYm91bmRhcnlDb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFrZW5CbG9ja0luZGV4KSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5l
ckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNzEsOCArMTcxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBKdW1wLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2gtPmNvZGVPcmlnaW4sIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1w
LCBicmFuY2gtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNzIsNyArMjcyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKCFsaXZlbmVzc05vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9n
cmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2Nh
bCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBQaGFudG9tTG9j
YWwsIGNvZGVPcmlnaW4sIAogICAgICAgICAgICAgT3BJbmZvKGxpdmVuZXNzTm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0
NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgICAgICBj
YW5vbmljYWxpemVMb2NhbHNJbkJsb2NrcygpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2Fs
T3BlcmFuZD4oKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7Ci0g
ICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJhZ2UoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3Jh
cGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDcg
KzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQUxXQVlTX0lOTElORSBOb2RlKiBhZGRQaGlT
aWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywgY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKICAgICB7Ci0gICAgICAgIE5vZGUqIHJlc3Vs
dCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsKKyAgICAgICAgTm9kZSogcmVz
dWx0ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2
YXJpYWJsZSkpOwogICAgICAgICBibG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBA
IHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAg
ICAgICAgICAgZGF0YUxvZygiICAgRWxpbWluYXRpbmcgZWRnZSBAIiwgbV9jdXJyZW50Tm9kZS0+
aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5kZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1f
Z3JhcGguZGVyZWYoZWRnZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdl
RnJvbUJhZyhpLS0pOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQpA
QCAtMTAyNCw3ICsxMDIzLDYgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICAKICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICBtX2N1cnJlbnROb2Rl
LT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGls
ZHJlbihtX2N1cnJlbnROb2RlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQg
d2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhpcyBub2RlLgpAQCAtMTE1NCwx
MCArMTE1Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHdl
IHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEgR2V0TG9jYWxVbmxpbmtlZCwgdGhlbiB0dXJuIHRo
ZSBHZXRMb2NhbFVubGlua2VkCiAgICAgICAgICAgICAvLyBpbnRvIGEgR2V0TG9jYWwuCi0gICAg
ICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsK
KyAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtl
ZCkKICAgICAgICAgICAgICAgICByZWxldmFudExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZh
cmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkp
OwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xMjEwLDcgKzEyMDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
QVNTRVJUKGRhdGFOb2RlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNsZWFy
QW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEo
KSA9IEVkZ2UoZGF0YU5vZGUpOwotICAgICAgICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGUpOwog
ICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSwyMSBAQCB2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVW5pCiAgICAgfQogfQogCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUmVmQ291bnRTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBFdmVyeXRoaW5nSXNMaXZlOgorICAgICAgICBv
dXQucHJpbnQoIkV2ZXJ5dGhpbmdJc0xpdmUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBF
eGFjdFJlZkNvdW50OgorICAgICAgICBvdXQucHJpbnQoIkV4YWN0UmVmQ291bnQiKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgUHJvb2ZTdGF0dXMgc3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVz
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0
NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxNyw2ICsyMTcsMTUgQEAgZW51bSBVbmlmaWNhdGlvblN0YXRlIHsKICAgICBH
bG9iYWxseVVuaWZpZWQKIH07CiAKKy8vIERlc2NyaWJlcyBob3cgcmVmZXJlbmNlIGNvdW50cyBp
biB0aGUgZ3JhcGggYmVoYXZlLgorZW51bSBSZWZDb3VudFN0YXRlIHsKKyAgICAvLyBFdmVyeXRo
aW5nIGhhcyByZWZDb3VudCgpID09IDEuCisgICAgRXZlcnl0aGluZ0lzTGl2ZSwKKworICAgIC8v
IFNldCBhZnRlciBEQ0UgaGFzIHJ1bi4KKyAgICBFeGFjdFJlZkNvdW50Cit9OworCiBlbnVtIE9w
ZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCiBlbnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9y
d2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uIH07CkBAIC0yNTAsNiArMjU5LDcg
QEAgbmFtZXNwYWNlIFdURiB7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkRGRzo6T3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSk7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkRGRzo6R3JhcGhGb3JtKTsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6REZHOjpVbmlmaWNhdGlvblN0YXRlKTsKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpSZWZDb3VudFN0YXRlKTsKIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpQcm9vZlN0YXR1cyk7CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OCw3ICs4OCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJl
ZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTA0LDcgKzEwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwog
ICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0
Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWlu
YXRlZCA9IHRydWU7CkBAIC0xMjYsNyArMTI0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNh
c2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmFs
cmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9Q
aGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xODYsMjUgKzE4MywyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9m
KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0
cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUg
JiB+U3BlY0NlbGwpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20s
IGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uu
c2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGNoaWxkLT5yZWYoKTsKICAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3Rh
dHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hp
bGRFZGdlOwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNoaWxkRWRnZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
R2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlT
dG9yYWdlKTsKQEAgLTI1MiwxMiArMjQ2LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
aWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3Ry
dWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0
dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5T
cGVjQ2VsbCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29k
ZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRV
c2VLaW5kKEtub3duQ2VsbFVzZSk7CkBAIC0yODcsMTcgKzI4MCwxNiBAQCBwcml2YXRlOgogCiAg
ICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2Vk
IGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28gcmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1
c2UuCisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkp
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxl
UmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVP
cmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
UmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlv
bkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKQEAgLTMw
NSwxNyArMjk3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJ
bmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxk
cmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBjb2Rl
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwg
Y2hpbGRFZGdlLAogICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZs
eSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24o
KSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4s
IAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRF
ZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0zNjAsOCArMzUw
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2UocGhpKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhh
bnRvbUxvY2FsLCAgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUpLCBFZGdlKHBoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAt
Mzc3LDcgKzM2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZ3Jh
cGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGls
ZHJlbik7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwg
Y29kZU9yaWdpbiwgY2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDA2LDE4ICszOTYsMTcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKICAgICAgICAgTm9kZSog
d2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgc3BlY3VsYXRpb25Gcm9t
VmFsdWUoY2VsbCksCi0gICAgICAgICAgICBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJ
bmZvKGNlbGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFs
dWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29u
c3RhbnQsIENlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdp
biwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1
Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgIH0KICAgICAKQEAg
LTQ1NCw4ICs0NDMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
ZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBG
b3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIK
KyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IERDRVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBEQ0VQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxpbWluYXRpb24iKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gRmly
c3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAgICAgICAg
ICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykKKyAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNldFJlZkNvdW50KDAp
OworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBmaW5kIHRoZSByb290czoKKyAgICAg
ICAgLy8gLSBOb2RlcyB0aGF0IGFyZSBtdXN0LWdlbmVyYXRlLgorICAgICAgICAvLyAtIE5vZGVz
IHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHR5cGUgY2hlY2tzLgorICAgICAgICAvLyAtIE5vZGVz
IHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIFNldExvY2Fscy4KKyAgICAgICAgLy8gU2V0IHRoZWly
IHJlZiBjb3VudHMgdG8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgorICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAg
ICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgZmluZFR5
cGVDaGVja1Jvb3QpOworICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgICAgIG1fd29y
a2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICBtX3dvcmtsaXN0LnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8g
SXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgorICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291bnRFZGdl
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRl
eCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxv
Y2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDEoKS5pc1Byb3ZlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAg
ICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVm
Q291bnQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5kVHlwZUNoZWNrUm9vdChOb2Rl
KiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKGVkZ2UuaXNQcm92ZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IFVudHlwZWRV
c2UpOworICAgICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgIG1fd29y
a2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb3VudEVk
Z2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmIChlZGdlLT5wb3N0Zml4UmVm
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uu
bm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRv
bUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBFZGdlIGVkZ2Ug
PSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRnZSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLm5lZWRzQ2hlY2soKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
bW92ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVmVjdG9y
PE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7Cit9OworCitib29sIHBlcmZvcm1EQ0UoR3JhcGgmIGdy
YXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgRENFIFBoYXNl
Iik7CisgICAgcmV0dXJuIHJ1blBoYXNlPERDRVBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdEQ0VQaGFzZV9oCisjZGVmaW5lIERGR0RDRVBoYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gR2xvYmFsIGRlYWQgY29kZSBlbGltaW5hdGlvbi4gRWxpbWluYXRlcyBhbnkg
bm9kZSB0aGF0IGlzIG5vdCBOb2RlTXVzdEdlbmVyYXRlLAorLy8gbm90IHVzZWQgYnkgYW55IG90
aGVyIGxpdmUgbm9kZSwgYW5kIG5vdCBzdWJqZWN0IHRvIGFueSB0eXBlIGNoZWNrLgorCitib29s
IHBlcmZvcm1EQ0UoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEQ0VQaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0NDQ4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuaCIKQEAgLTE0NywxMSArMTQ4LDEzIEBAIGlubGluZSBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgfQogICAgIAorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0
ZXJhdGlvbnMuXG4iLCBjbnQpOworCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50
Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5vLW9wIHNpbmNlIENTRSByYXJl
bHkgZGV0aHJlYWRzIHRoZSBncmFwaC4KLSAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkp
Ci0gICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBp
biAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKKyAgICBwZXJmb3JtRENFKGRmZyk7CiAgICAgcGVy
Zm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogICAgIEdyYXBoRHVtcE1vZGUg
bW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0
aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCiAgICAg
ICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjRG91YmxlLCAqbm9kZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CiAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJlclVzZSksIEVk
Z2UoKSwgRWRnZSgpKTsKQEAgLTUxOCw4ICs1MTgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxv
Z2ljYWxOb3QtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdl
LT5oYXNCb29sZWFuUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKG5ld0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KGxvZ2ljYWxOb3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0
Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9j
a0luZGV4KCk7CkBAIC01NTYsOCArNTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgLy8gd291bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBieSBub3csIGJ1dCBpbnNlcnQgYSBmb3Jj
ZWQgZXhpdCBqdXN0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHNhZmUuCiAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25l
LCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5H
X1RZUEVTOgpAQCAtNjM4LDggKzYzNSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmls
ZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwgbm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTY1MCwxMCArNjQ3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CiAg
ICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCk7CiAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOwogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwg
bm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0
b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZSogc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSk7CiAgICAgICAgICAgICBpZiAoIXN0b3Jh
Z2UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTczMCw2ICs3MjYs
OCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5
cGU6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIApAQCAtODM3LDcgKzgzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBjaGVj
a0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSog
YXJyYXksIE5vZGUqIGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUm
KSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGUq
IGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlKiBhcnJheSwgTm9kZSogaW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5
TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUu
aXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBAIC04NTgsMjEgKzg1NiwyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVy
ZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNO
b25lLCBBcnJheWlmeVRvU3RydWN0dXJlLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAg
ICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJy
YXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlp
ZnksIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUp
IHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUp
KSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tB
cnJheSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC04ODIsMTcgKzg4MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgaWYgKGFycmF5TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJl
dHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLAotICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBE
b250UmVmQ2hpbGRyZW4sCi0gICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2Rl
IDogRG9udFJlZk5vZGUsCi0gICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwg
Y29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2Uo
YXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2Nr
LAotICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGls
ZHJlbiwKLSAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2Rl
LAotICAgICAgICAgICAgU3BlY05vbmUsIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVP
cmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxV
c2UpKTsKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0SW5kZXhlZFBy
b3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3Rv
cmFnZUNoaWxkKQpAQCAtOTAyLDggKzg5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDogewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9k
ZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtOTgyLDcgKzk3NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAg
IEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAKICAgICAgICAgaWYgKG5l
d0VkZ2UudXNlS2luZCgpICE9IEludDMyVXNlKSB7CkBAIC05OTIsOSArOTgzLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpOwogICAgICAgICAKLSAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7Ci0gICAgICAg
IG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7Ci0gICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRn
ZTsKICAgICB9CiAgICAgCkBAIC0xMDE0LDcgKzEwMDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
aW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVt
YmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0
aW9uKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5v
ZGUsIFNwZWNEb3VibGUsCisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwg
CiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9E
b3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJsZSwKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKQEAg
LTEwMzksOSArMTAyNyw4IEBAIHByaXZhdGU6CiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlND
Ojp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50
MzIoKSk7CiAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3Bl
Y0ludDMyLCBKU0NvbnN0YW50LAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdp
biwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7Ci0gICAg
ICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
U3BlY0ludDMyLCBKU0NvbnN0YW50LCBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLAorICAgICAg
ICAgICAgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CiAg
ICAgfQogICAgIAogICAgIHZvaWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBu
b2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBHcmFw
aDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX2ZpeHBvaW50U3Rh
dGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlm
aWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVkKQorICAgICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5
dGhpbmdJc0xpdmUpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkBAIC0zMTIs
NyArMzEzLDcgQEAgdm9pZCBHcmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogdm9p
ZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAgIGRhdGFMb2coIkRGRyBmb3Ig
IiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6
XG4iKTsKLSAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUs
ICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRp
b25TdGF0ZSwgIlxuIik7CisgICAgZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhw
b2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBt
X3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRl
LCAiXG4iKTsKICAgICAKICAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3Qg
YiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewpAQCAtMzQ2LDE2ICszNDcsNiBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi12b2lkIEdyYXBo
OjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigq
dGhpcywgb3AsIHJlZik7Ci19Ci0KLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3Ap
Ci17Ci0gICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBkZXJlZik7Ci19Ci0K
IHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKIHsKICAgICBpZiAobV9mb3JtID09IExvYWRTdG9yZSkK
QEAgLTM5MCw2NyArMzgxLDYgQEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxC
bG9jawogICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwog
fQogCi12b2lkIEdyYXBoOjpjb2xsZWN0R2FyYmFnZSgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oIkRGRyBHYXJiYWdlIENvbGxlY3Rpb24iKTsKLSAgICAKLSAgICAvLyBG
aXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJ
bkJsb2NrLS07KQotICAgICAgICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNv
dW50KDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6
ZSgpOyBwaGlJbmRleC0tOykKLSAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0
UmVmQ291bnQoMCk7Ci0gICAgfQotICAgIAotICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhl
IG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCi0g
ICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlKiwg
MTI4PiB3b3JrbGlzdDsKLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJs
b2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBpZiAoIShu
b2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgIHdvcmts
aXN0LmFwcGVuZChub2RlKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgp
OwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5s
ZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJB
cmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOwotICAgICAgICAgICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsg
bm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92
YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChjaGls
ZE5vZGUtPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9k
ZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBl
bmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KSkgewotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkK
LSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUo
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwg
MTY+IHdvcmtsaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw4MyArOTIsMzQgQEAgcHVibGljOgogICAgIEdyYXBoKEpTR2xv
YmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5HcmFwaCgpOwog
ICAgIAotICAgIC8vIE1hcmsgYSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgTm9kZSog
cmVmKE5vZGUqIG5vZGUpCisgICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBu
ZXdOb2RlKQogICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50
aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJl
bi4KLSAgICAgICAgaWYgKCFub2RlLT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICByZWZDaGls
ZHJlbihub2RlKTsKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotICAgIEVkZ2UgcmVmKEVk
Z2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIHJldHVy
biBlZGdlOwotICAgIH0KLSAgICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlZihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZXJlZihOb2Rl
KiBub2RlKQotICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGlmICghbm9kZS0+
cmVmQ291bnQoKSkKLSAgICAgICAgICAgIGR1bXAoKTsKLSNlbmRpZgotICAgICAgICBpZiAobm9k
ZS0+cG9zdGZpeERlcmVmKCkgPT0gMSkKLSAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7
Ci0gICAgfQotICAgIHZvaWQgZGVyZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgZGVyZWYo
ZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICB2b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBkZXJlZihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2hlbiBhIG5v
ZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vy
c2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KLSAgICB2b2lk
IHJlZkNoaWxkcmVuKE5vZGUqKTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwotCi0g
ICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5n
ZVJlZiA9IHRydWUpCi0gICAgewotICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAg
ICByZWYobmV3Tm9kZSk7Ci0gICAgICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAg
IH0KICAgICAgICAgZWRnZS5zZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRy
dWUpCisgICAgdm9pZCBjaGFuZ2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7
Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdFZGdlKTsKLSAg
ICAgICAgICAgIGRlcmVmKGVkZ2UpOwotICAgICAgICB9CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdl
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUq
IG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFy
ZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSkKICAgICB7
CiAgICAgICAgIGlmIChlZGdlLm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOworICAgICAg
ICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2RlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21w
YXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBj
aGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVk
Z2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7CiAgICAgICAgIGlmIChlZGdlICE9IG9sZEVkZ2UpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hh
bmdlUmVmKTsKKyAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgp
CiAgICAgewogICAgICAgICBpZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgZGVyZWYobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgp
KTsKICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAg
fQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVy
ZWZDaGlsZChub2RlLCAwKTsgfQpAQCAtMTc3LDE4ICsxMjgsMTcgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
Ym9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIGlm
IChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmly
c3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAg
ICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4
XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25G
b3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91
bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2Rl
LT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNo
aWxkLCBib29sIGFkZFJlZikKKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVk
Z2UmIGNoaWxkKQogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFj
dHVhbGx5IHVudXNlZC4KICAgICAgICAgaWYgKCFjaGlsZCkKQEAgLTIwNCwyMiArMTU0LDEzIEBA
IHB1YmxpYzoKICAgICAgICAgLy8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBB
c3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJl
cGxhY2VtZW50LgogICAgICAgICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoYWRkUmVmKQotICAgICAgICAgICAgcmVmKGNoaWxkKTsKICAgICB9CiAg
ICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9z
dCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykg
XAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUo
UmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUs
IFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoU3BlY3Vs
YXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1fYWxsb2NhdG9yKSBOb2RlKHZhbHVlQXJncyk7IFwK
ICAgICAgICAgbm9kZS0+cHJlZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAg
ICAgIGlmIChyZWZOb2RlTW9kZSA9PSBSZWZOb2RlKSBcCi0gICAgICAgICAgICBub2RlLT5yZWYo
KTsgXAotICAgICAgICBpZiAocmVmQ2hpbGRyZW5Nb2RlID09IFJlZkNoaWxkcmVuKSBcCi0gICAg
ICAgICAgICByZWZDaGlsZHJlbihub2RlKTsgXAogICAgICAgICByZXR1cm4gbm9kZTsgXAogICAg
IH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9E
RSkKQEAgLTIyNywxMiArMTY4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwog
ICAgIAotICAgIC8vIENhbGwgdGhpcyBpZiB5b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBj
b3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdpdGgKLSAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRo
aXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9jYWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9y
bQotICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5v
dWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCi0gICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRp
bmcgdG8gcmVhY2hhYmlsaXR5LgotICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKLSAgICAKICAg
ICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVt
YmVyKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCkBAIC02Njks
MTkgKzYwNCwxOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5v
ZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9
IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2Rl
LT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
IW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGlu
Zywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21w
YXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5n
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hp
bGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAg
ICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcs
IG5ld1RoaW5nKTsKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJl
bi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRU
aGluZywgbmV3VGhpbmcpOwogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCks
IG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03NTUsNiAr
NjkwLDcgQEAgcHVibGljOgogICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2lu
dFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zvcm07CiAgICAgVW5pZmljYXRpb25TdGF0ZSBtX3Vu
aWZpY2F0aW9uU3RhdGU7CisgICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAx
Nj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29y
SW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
c2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAg
ICB9CiAKICNkZWZpbmUgREZHX0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxh
dGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVB
cmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5z
ZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJl
Zk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9z
dCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIHJldHVybiBpbnNl
cnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0
eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwKKyAgICAgICAgcmV0dXJuIGluc2Vy
dChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3Mp
KTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklO
RV9JTlNFUlRfTk9ERSkKICN1bmRlZiBERkdfREVGSU5FX0lOU0VSVF9OT0RFCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAg
ICAgLCBjaGlsZHJlbihjaGlsZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBt
X3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAg
ICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mob3ApOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hp
bGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAg
LCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJl
ZGljdGlvbihTcGVjTm9uZSkKICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9w
KTsKQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBj
aGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFs
aWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1f
cmVmQ291bnQoMSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKICAgICAgICAgLCBt
X3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgewpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRy
ZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAg
ICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBt
X3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZv
KGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGlt
bTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQpAQCAtMTQxLDcg
KzE0MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQs
IG51bUNoaWxkcmVuKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQo
MSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8y
KHNhZmVDYXN0PHVuc2lnbmVkPihpbW0yLm1fdmFsdWUpKQogICAgICAgICAsIG1fcHJlZGljdGlv
bihTcGVjTm9uZSkKQEAgLTM5MSw2ICszOTEsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHN3
aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIFNldExv
Y2FsOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNr
OgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAg
Y2FzZSBGbHVzaDoKQEAgLTk1Miw2ICs5NTQsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAg
ICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAgICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgogICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjoKQEAgLTk3MywxMiArOTc3LDYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBOb2RlKiByZWYoKQotICAg
IHsKLSAgICAgICAgbV9yZWZDb3VudCsrOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
ICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JlZkNv
dW50Kys7CkBAIC05OTQsMTggKzk5Miw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9yZWZD
b3VudCA9IHJlZkNvdW50OwogICAgIH0KICAgICAKLSAgICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAgICAgLS1tX3JlZkNvdW50OwotICAgIH0K
LSAgICAKLSAgICB1bnNpZ25lZCBwb3N0Zml4RGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fcmVmQ291bnQpOwotICAgICAgICByZXR1cm4gbV9yZWZDb3VudC0tOwotICAgIH0KLSAgICAK
ICAgICBFZGdlJiBjaGlsZDEoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5v
ZGVIYXNWYXJBcmdzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIC8qIFZhcmlhYmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2ls
bCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRK
UykgXAogICAgIG1hY3JvKFNldExvY2FsLCBOb2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8o
TW92SGludEFuZENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAor
ICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoYW50b20s
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOb3AsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlbGV2YW50VG9PU1IpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHBy
ZWRpY3Rpb24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJl
ZGljdGlvbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAg
ICAgICAgICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGll
cyB0aGF0IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKKyAgICAgICAgICAgIC8v
IGFuZCBzbyB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9i
c2VydmluZyIgbnVtYmVycyBldmVuIGlmIGFsbAorICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhl
IHZhbHVlIGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlz
aXQgdGhpcyBhdCBzb21lCisgICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sg
aWYgdGhlIGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRo
aW5rCisgICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBi
ZW5lZmljaWFsIGZvciBiZW5jaG1hcmtzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncygoZmxhZ3MgJiB+Tm9kZVVzZWRB
c0ludExvY2FsbHkpIHwgTm9kZVVzZWRBc051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMTQsMTIgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAg
ICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0
IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKLSAgICAgICAgICAgIC8vIGFuZCBz
byB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2Vydmlu
ZyIgbnVtYmVycyBldmVuIGlmIGFsbAotICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVl
IGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhp
cyBhdCBzb21lCi0gICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhl
IGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCi0g
ICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmlj
aWFsIGZvciBiZW5jaG1hcmtzLgotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVt
YmVyKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
dmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFncygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTczNyw3ICs3MzgsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAgY2FzZSBJZGVudGl0eTogeworICAgICAgICBjYXNl
IElkZW50aXR5OgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFu
ZENoZWNrOiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2li
bGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGlu
c2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAg
IENSQVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Njgs
NiArMTk2OCwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICBj
b21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBNb3ZIaW50OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgU2V0TG9jYWw6IHsK
ICAgICAgICAgLy8gU2V0TG9jYWwgZG91YmxlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgYSBub2Rl
IHdpbGwgYmUgc3RvcmVkIGFuZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTY3LDcgKzE1NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2Rl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiB7Ci0g
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFNldExvY2FsIHx8IG5vZGUtPm9wKCkgPT0gTW92SGludCB8fCBub2RlLT5vcCgpID09IE1v
dkhpbnRBbmRDaGVjayk7CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7CiAKQEAgLTE2NzgsNiArMTY3OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KEJhc2ljQmxvY2smCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhp
bnQobV9jdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg4LDExICsyODgsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZ2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIERvbnRS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICBHZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwg
RWRnZShub2RlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCB2
YXJpYWJsZS0+cHJlZGljdGlvbigpLCBHZXRMb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOwogICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jayArIDEsIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1
Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UoZ2V0TG9jYWwsIENlbGxVc2UpKTsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgp
KSA9PSBub2RlKQpAQCAtMzIwLDE0ICszMjAsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBFZGdlIGNoaWxkMSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyh2YXJpYWJsZSksIGNoaWxkMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBTZXRMb2NhbCwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxl
KSwgY2hpbGQxKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyBVc2UgYSBGb3J3YXJkQ2hlY2tT
dHJ1Y3R1cmUgdG8gaW5kaWNhdGUgdGhhdCB3ZSBzaG91bGQgZXhpdCB0byB0aGUKICAgICAgICAg
ICAgICAgICAgICAgLy8gbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbiByYXRoZXIgdGhhbiByZWV4
ZWN1dGluZyB0aGUgY3VycmVudCBvbmUuCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwgRWRnZShjaGlsZDEubm9kZSgpLCBD
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBGb3J3YXJkQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTAg
KzE0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQo
bm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAg
ICAgICAgICAgICAgICBwaGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyB8fCAhbm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCkpCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRl
ID09IEV4YWN0UmVmQ291bnQpCiAgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBt
eVJlZkNvdW50cy5nZXQobm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG15UmVm
Q291bnRzLmdldChub2RlKSA/IG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA6IHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbm9kZS0+cmVmQ291bnQoKSwgMSk7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRy
ZW4obm9kZSk7ICsraikgewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBo
LmNoaWxkKG5vZGUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191061</attachid>
            <date>2013-03-01 16:09:36 -0800</date>
            <delta_ts>2013-03-01 16:49:56 -0800</delta_ts>
            <desc>it&apos;s starting to run bigger things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEg
TW92SGludCBpcyBlZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKKyAgICAg
ICAgLy8gd2FzIGRlYWQuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KQEAgLTE2MjgsMTggKzE2NDAsNiBAQCBpbmxpbmUgYm9v
bCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgLy8gSWYgdGhlIEdl
dExvY2FsIGlzIGRlYWQsIHRoZW4gd2UgdHJhbnNmZXIgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIGFmdGVyIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzODkKLSAgICAgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBibG9j
ayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgotICAgICAgICAgICAgICAg
IHNvdXJjZSA9IGluVmFyaWFibGU7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNmZXJpbmcg
Iik7Ci0gICAgICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiIGZyb20gaGVhZCB0byB0YWlsIChkZWFkIEdldExvY2FsIGNh
c2UpLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9u
YWwgc3BlY3VsYXRpb25zLgogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCw2ICsxNDAsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5hZGQodmFyaWFibGVBY2Nlc3NEYXRhLCBBcmd1bWVudHNBbGlhc2luZ0RhdGEoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFyaWFibGVz
IGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mCisgICAgICAg
IC8vIGxpdmVuZXNzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxv
Y2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIG1faXNMaXZlLmFkZChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCB2YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJl
CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3RoIGFj
Y2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9mIENy
ZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVudHMK
QEAgLTE5OCw2ICsyMTgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmICFzb3VyY2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRvdGFsbHkgZGVhZCwgdGhl
biBpZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNMaXZlLmNvbnRh
aW5zKHZhcmlhYmxlQWNjZXNzRGF0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1
bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKQEAgLTQ2OCw3ICs0OTIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZl
cmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs1MTEsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hp
bGQyKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50QnlWYWwpOwpAQCAtNTA0LDEwICs1MjYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBUaGlzIGlzIGEgbXVzdC1nZW5l
cmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0
aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDggKzU1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9u
bHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9i
b2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNO
b3RDcmVhdGVkLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDEpKTsKQEAgLTU4MSwxMCArNjAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbik7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTU5
OCw3ICs2MTcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKE5vcCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmRE
ZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgw
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTYyNiw4ICs2NDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNo
aWxkcmVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4ucmVzZXQoKTsKQEAgLTY1MSw2ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQXJndW1lbnRzQWxpYXNpbmdEYXRhLAogICAgICAgICAg
ICAgRGVmYXVsdEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBO
dWxsYWJsZUhhc2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFz
aW5nOworICAgIEhhc2hTZXQ8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbV9pc0xpdmU7CiAKICAgICB2
b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7CkBAIC03ODUsNyAr
ODAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRz
LmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
IGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihl
ZGdlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzkzLDcgKzgxMCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3
ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENT
RSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgogICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21C
YWcoZWRnZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTQ0NDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwg
OD4gewogICAgIH0KICAgICAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0
ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBh
cmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUs
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIHRlbXBs
YXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUoR3JhcGgmLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDkgKzM0LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBv
c3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3Mp
IFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSog
QmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZD
aGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFy
YW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFw
aCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cykgXAogICAgIHsgXAotICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNo
aWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3Mp
OyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk4LDc3ICs2OTgsNTYgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMg
PSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiks
IEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAg
ICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1
bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkK
LSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgRWRnZSBj
aGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1
cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAg
U3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0
R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUg
b3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShjaGlsZDEp
LCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBF
ZGdlKGNoaWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZs
YWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxk
cmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFk
ZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2RlKiBj
aGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAgICAgICAgICAgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwg
RWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLAorICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxk
MiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFn
cyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJl
bihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBOb2Rl
KiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwg
T3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsCisgICAgICAgICAgICBTcGVjTm9uZSwgTm9kZTo6VmFyQXJnLCBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAogICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7
CiAgICAgICAgIAotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJh
dGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgTm9kZSogaW5zZXJ0UGhpTm9kZShPcEluZm8gaW5m
bywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dy
YXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwKLSAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbyk7Cisg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhpLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvKTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3Vs
dCk7Ci0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CisgICAg
ICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7CisgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOworICAgICAg
ICBBU1NFUlQobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXZlcnl0aGluZ0lzTGl2ZSk7Cisg
ICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAg
ICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQ0
NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5kZXgsIG5vdFRha2Vu
QmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym91bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFrZW5CbG9ja0luZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBib3VuZGFyeUNv
ZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0YWtlbkJs
b2NrSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTE3MSw4ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9j
ay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC0+Y29kZU9yaWdpbiwgT3BJbmZvKHRhcmdldEJs
b2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgU3Bl
Y05vbmUsIEp1bXAsIGJyYW5jaC0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI3Miw3ICsyNzIs
NyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAg
ICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
UGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgbV9ncmFwaCwgU3BlY05vbmUs
IFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwgCiAgICAgICAgICAgICBPcEluZm8obGl2ZW5lc3NO
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRo
cmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6
CiAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CiAgICAgICAgIHByb3BhZ2F0
ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAgICBwcm9wYWdhdGVQaGlzPEFyZ3VtZW50T3Bl
cmFuZD4oKTsKLSAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOwogICAgICAgICAKICAg
ICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0xMjQsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBBTFdBWVNfSU5MSU5FIE5v
ZGUqIGFkZFBoaVNpbGVudGx5KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBj
b2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQogICAgIHsKLSAgICAgICAg
Tm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOworICAgICAg
ICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBoaSwgY29kZU9yaWdp
biwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwOCw3
ICsxMDA4LDYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICBFbGltaW5hdGluZyBlZGdlIEAiLCBtX2N1
cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+IEAiLCBlZGdlLT5pbmRleCgpKTsKICNlbmRpZgotICAg
ICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICB9CkBAIC0xMDI0LDcgKzEwMjMsNiBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAg
IAogICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgIG1f
Y3VycmVudE5vZGUtPnNldFJlZkNvdW50KDEpOwogICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50
UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGlzIG5vZGUu
CkBAIC0xMTU0LDEwICsxMTUyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRMb2NhbFVubGlua2VkLCB0
aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQKICAgICAgICAgICAgIC8vIGludG8gYSBHZXRM
b2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxV
bmxpbmtlZCkgeworICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRM
b2NhbFVubGlua2VkKQogICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxPcC0+Y29udmVydFRv
R2V0TG9jYWwodmFyaWFibGVBY2Nlc3NEYXRhLCBwaGkpOwotICAgICAgICAgICAgICAgIG1fZ3Jh
cGgucmVmKHBoaSk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTAsNyArMTIwNiw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBBU1NFUlQoZGF0YU5vZGUtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgIG1f
Z3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7Ci0gICAgICAgICAgICBtX2dyYXBoLnJlZihk
YXRhTm9kZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAgICAgICAgICAgICBt
X2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDYgKzkx
LDIxIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVbmkKICAgICB9CiB9
CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBSZWZDb3VudFN0YXRlIHN0
YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEV2ZXJ5dGhpbmdJc0xpdmU6
CisgICAgICAgIG91dC5wcmludCgiRXZlcnl0aGluZ0lzTGl2ZSIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV4YWN0UmVmQ291bnQ6CisgICAgICAgIG91dC5wcmludCgiRXhhY3RSZWZDb3Vu
dCIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9vZlN0YXR1cyBzdGF0dXMpCiB7CiAgICAgc3dp
dGNoIChzdGF0dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAko
cmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNywxNSBAQCBlbnVtIFVuaWZpY2F0aW9uU3Rh
dGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorLy8gRGVzY3JpYmVzIGhvdyByZWZlcmVu
Y2UgY291bnRzIGluIHRoZSBncmFwaCBiZWhhdmUuCitlbnVtIFJlZkNvdW50U3RhdGUgeworICAg
IC8vIEV2ZXJ5dGhpbmcgaGFzIHJlZkNvdW50KCkgPT0gMS4KKyAgICBFdmVyeXRoaW5nSXNMaXZl
LAorCisgICAgLy8gU2V0IGFmdGVyIERDRSBoYXMgcnVuLgorICAgIEV4YWN0UmVmQ291bnQKK307
CisKIGVudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIH07CiAKIGVudW0gU3BlY3VsYXRpb25EaXJl
Y3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24gfTsKQEAgLTI1
MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6REZHOjpPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlKTsKIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHcmFwaEZvcm0pOwogdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVuaWZpY2F0aW9uU3RhdGUpOwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlJlZkNvdW50U3RhdGUpOwogdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb29mU3RhdHVzKTsKIAog
fSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNvZGVPcmlnaW4pKS5t
X3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBBU1NF
UlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDQsNyArMTAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50
KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShpbmRleEluQmxv
Y2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAg
ICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKQEAgLTEyNiw3ICsxMjQsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJy
YXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4NiwyNSArMTgzLDIyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2lu
LCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBj
b2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNo
aWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAgICAgICAgICAgIGlmIChpc0lubGlu
ZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgp
LCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjUyLDEyICsyNDYsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNT
dWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9w
SW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRF
ZGdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV90eXBlICYgflNwZWNDZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQ
aGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hp
bGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKQEAgLTI4NywxNyArMjgwLDE2IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNl
dCgpKSkgewotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8vIFRoZSBjaGlsZCB3
aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQgdG8gcmVmbGVjdCB0
aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVz
Lm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRF
ZGdlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgp
IHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJl
KCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0
dXMuaXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09
IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRl
cmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkp
OwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCkpOwpAQCAtMzA1LDE3ICsyOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVy
Zmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2ltcGxl
VHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwg
Y29kZU9yaWdpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRh
dGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAg
LTM2MCw4ICszNTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoYW50b20gPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwg
RWRnZShwaGkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBQaGFudG9tTG9jYWwsICBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2UocGhpKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0g
cGhhbnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCkBAIC0zNzcsNyArMzY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVP
cmlnaW4sIGNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC00MDYsMTggKzM5NiwxNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAg
ICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBzcGVj
dWxhdGlvbkZyb21WYWx1ZShjZWxsKSwKLSAgICAgICAgICAgIFdlYWtKU0NvbnN0YW50LCBjb2Rl
T3JpZ2luLCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxh
dGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhj
ZWxsKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwK
LSAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBF
ZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0
YW50LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9y
aWdpbiwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJl
LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAg
fQogICAgIApAQCAtNDU0LDggKzQ0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEQ0VQ
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgRENFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIERDRVBo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImRlYWQgY29kZSBlbGlt
aW5hdGlvbiIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQor
ICAgICAgICAgICAgICAgIGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7
IHBoaUluZGV4LS07KQorICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0
UmVmQ291bnQoMCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IGZpbmQgdGhlIHJv
b3RzOgorICAgICAgICAvLyAtIE5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuCisgICAgICAg
IC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdHlwZSBjaGVja3MuCisgICAgICAg
IC8vIC0gTm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gU2V0TG9jYWxzLgorICAgICAgICAv
LyBTZXQgdGhlaXIgcmVmIGNvdW50cyB0byAxIGFuZCBwdXQgdGhlbSBvbiB0aGUgd29ya2xpc3Qu
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9j
ay0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBu
b2RlLCBmaW5kVHlwZUNoZWNrUm9vdCk7CisgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAg
ICAgICAgbV93b3JrbGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fd29y
a2xpc3QucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVy
YXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyBy
ZWYnZWQuCisgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2Rl
LCBjb3VudEVkZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRo
ZSBwb3NzaWJpbGl0eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1v
dkhpbnQgdGhlIGNoaWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDEoKS0+c2hvdWxkR2VuZXJhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5v
ZGUtPmNoaWxkMSgpLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoWm9tYmllSGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hp
bGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnNldFJlZkNvdW50KDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0
TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAg
ICAgICAgICAvLyBMZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFu
dFBoYW50b21DaGlsZHJlbihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVm
Q291bnQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1f
cmVmQ291bnRTdGF0ZSA9IEV4YWN0UmVmQ291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5kVHlwZUNoZWNrUm9vdChOb2Rl
KiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVk
IiB1bnR5cGVkIHVzZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCisgICAg
ICAgIC8vIHdpbGwganVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgorICAgICAgICBp
ZiAoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAg
ICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvdW50RWRnZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3Qg
Y291bnQgZWRnZXMgdGhhdCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0aGVpciB0eXBlIGNoZWNr
cy4KKyAgICAgICAgaWYgKCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVu
dHlwZWRVc2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGVk
Z2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlz
dC5hcHBlbmQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVsaW1pbmF0ZUly
cmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYg
KCFlZGdlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVkZ2Uu
bmVlZHNDaGVjaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8Tm9kZSosIDEyOD4gbV93b3JrbGlzdDsKK307CisKK2Jvb2wgcGVyZm9y
bURDRShHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBEQ0UgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8RENFUGhhc2U+KGdyYXBoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0RDRVBoYXNlX2gKKyNkZWZpbmUgREZHRENFUGhh
c2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBHbG9iYWwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uLiBF
bGltaW5hdGVzIGFueSBub2RlIHRoYXQgaXMgbm90IE5vZGVNdXN0R2VuZXJhdGUsCisvLyBub3Qg
dXNlZCBieSBhbnkgb3RoZXIgbGl2ZSBub2RlLCBhbmQgbm90IHN1YmplY3QgdG8gYW55IHR5cGUg
Y2hlY2suCisKK2Jvb2wgcGVyZm9ybURDRShHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0RDRVBo
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2
aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUg
IkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtNzUsNiArNzYsMTcgQEAgaW5saW5l
IGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgIGlmICghT3B0aW9uczo6dXNl
REZHSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICBpZiAoY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPj0gMTAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDwgNTApCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPCA3NSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA+
PSA4OCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSA8IDgyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgaWYgKGxv
Z0NvbXBpbGF0aW9uQ2hhbmdlcygpKQogICAgICAgICBkYXRhTG9nKCJERkcgY29tcGlsaW5nICIs
ICpjb2RlQmxvY2ssICIsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAiLCBjb2RlQmxvY2stPmlu
c3RydWN0aW9uQ291bnQoKSwgIlxuIik7CiAgICAgCkBAIC0xNDcsMTEgKzE1OSwxMyBAQCBpbmxp
bmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIHBlcmZvcm1DUFNS
ZXRocmVhZGluZyhkZmcpOwogICAgIH0KICAgICAKKyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFu
Z2VzKCkpCisgICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZl
cmdlZCBpbiAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKKwogICAgIGRmZy5tX2ZpeHBvaW50U3Rh
dGUgPSBGaXhwb2ludENvbnZlcmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CiAgICAgcGVyZm9y
bUNQU1JldGhyZWFkaW5nKGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBz
aW5jZSBDU0UgcmFyZWx5IGRldGhyZWFkcyB0aGUgZ3JhcGguCi0gICAgaWYgKGxvZ0NvbXBpbGF0
aW9uQ2hhbmdlcygpKQotICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2lu
dCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisgICAgcGVyZm9ybURDRShk
ZmcpOwogICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICAgICBH
cmFwaER1bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2Un
cmUgc3RlYWxpbmcgdGhlbSBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRp
dmlzaW9uLgogICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRS
ZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgKm5vZGUpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwogICAgICAgICAg
ICAgICAgIG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25O
dW1iZXJVc2UpLCBFZGdlKCksIEVkZ2UoKSk7CkBAIC01MTgsOCArNTE4LDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBuZXdD
aGlsZEVkZ2UgPSBsb2dpY2FsTm90LT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5ld0NoaWxkRWRnZS0+aGFzQm9vbGVhblJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUt
Pm5vdFRha2VuQmxvY2tJbmRleCgpOwpAQCAtNTU2LDggKzU1NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIHdvdWxkIGhhdmUgYWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQg
aW5zZXJ0IGEgZm9yY2VkIGV4aXQganVzdCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBiZSBz
YWZlLgogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzoKQEAgLTYzOCw4ICs2MzUsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0
aW9uKCkpOwogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAm
JiBhcnJheVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0
dXJlKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3Rl
ZFN0cnVjdHVyZSgpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCkBAIC02NTAsMTAgKzY0Nyw5
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0
R2VuZXJhdGUpOwogICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQ
cm9maXRhYmxlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1v
ZGUpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJh
eShhcnJheU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwg
bGVuZ3RoTmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAg
IE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwg
bm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UpOwogICAgICAgICAg
ICAgaWYgKCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBA
IC03MzAsNiArNzI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0
dXJlOgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNh
c2UgTGFzdE5vZGVUeXBlOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92
SGludEFuZENoZWNrOgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApA
QCAtODM3LDcgKzgzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBjaGVja0FycmF5KEFycmF5TW9kZSBh
cnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXksIE5vZGUqIGluZGV4
LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2Us
IGJvb2wgc2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlN
b2RlIGFycmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSog
aW5kZXgsIGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3Rv
cmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAg
ICAgICAgCkBAIC04NTgsMjEgKzg1NywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBBcnJheWlmeVRvU3Ry
dWN0dXJlLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJl
KSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRl
eEVkZ2UpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCisg
ICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNv
ZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkp
LCBFZGdlKGFycmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1
cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2Vs
bFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5
LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29y
ZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC04ODIsMTcgKzg4MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5
TW9kZS51c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAg
ICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0g
ICAgICAgICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0g
ICAgICAgICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShh
cnJheSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVz
ZSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgc2hv
dWxkR2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKLSAgICAgICAgICAg
IHNob3VsZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgU3Bl
Y05vbmUsIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29k
ZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFy
cmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBibGVzc0FycmF5T3Bl
cmF0aW9uKEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQpAQCAtOTAy
LDggKzg5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwK
LSAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTgyLDcgKzk3
NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5v
ZGUtPmNoaWxkMSgpOwogICAgICAgICAKICAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9
IEludDMyVXNlKSB7CkBAIC05OTIsOSArOTg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIEFTU0VSVChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICAK
LSAgICAgICAgbV9ncmFwaC5yZWYobmV3RWRnZSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xk
RWRnZSk7Ci0gICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCkBA
IC0xMDE0LDcgKzEwMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJs
ZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCisg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgCiAgICAgICAgICAgICBkaXJl
Y3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50
MzJUb0RvdWJsZSwKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uo
ZWRnZS5ub2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKQEAgLTEwMzksOSArMTAyOCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFz
TnVtYmVyKCkpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CiAgICAgICAgIGVk
Z2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50
LAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9j
aygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYo
b2xkTm9kZSk7CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0
YW50LCBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNvZGVC
bG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlv
bk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQp
CiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2Fs
bHlVbmlmaWVkKQorICAgICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5dGhpbmdJc0xpdmUpCiB7CiAg
ICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkBAIC0zMTIsNyArMzEzLDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogewogICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJ
VFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKLSAgICBkYXRhTG9n
KCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9y
bSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7Cisg
ICAgZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3Jt
OiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUs
ICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKICAgICAKICAg
ICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nr
cy5zaXplKCk7ICsrYikgewpAQCAtMzQ2LDE2ICszNDcsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7Ci19
Ci0KLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCi17Ci0gICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBkZXJlZik7Ci19Ci0KIHZvaWQgR3JhcGg6OmRldGhy
ZWFkKCkKIHsKICAgICBpZiAobV9mb3JtID09IExvYWRTdG9yZSkKQEAgLTM5MCw2NyArMzgxLDYg
QEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogICAgIHN1Y2Nlc3Nv
ci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwogfQogCi12b2lkIEdyYXBoOjpj
b2xsZWN0R2FyYmFnZSgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBHYXJiYWdlIENvbGxlY3Rpb24iKTsKLSAgICAKLSAgICAvLyBGaXJzdCByZXNldCB0aGUgY291
bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQotICAgICAg
ICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDApOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykK
LSAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7Ci0gICAg
fQotICAgIAotICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11
c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCi0gICAgLy8gMSBhbmQgcHV0IHRo
ZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlKiwgMTI4PiB3b3JrbGlzdDsKLSAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNp
emUoKTsgaW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9k
ZU11c3RHZW5lcmF0ZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlz
dC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsg
Ly8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgot
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFt
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0ubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKGNoaWxkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
bm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3Rm
aXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ0NDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw4MyArOTIsMzQgQEAgcHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9j
ayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5HcmFwaCgpOwogICAgIAotICAgIC8vIE1hcmsg
YSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCisg
ICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQogICAgIHsKLSAg
ICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291
bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFu
b2RlLT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKLSAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotICAgIEVkZ2UgcmVmKEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIHJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBlZGdlOwotICAgIH0KLSAg
ICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZihl
ZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQotICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKLSAgICAg
ICAgICAgIGR1bXAoKTsKLSNlbmRpZgotICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkg
PT0gMSkKLSAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7Ci0gICAgfQotICAgIHZvaWQg
ZGVyZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwotICAg
IH0KLSAgICB2b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBkZXJl
ZihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2Vz
IGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2Yg
aXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KLSAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUq
KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwotCi0gICAgdm9pZCBjaGFuZ2VDaGls
ZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCi0gICAg
ewotICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3Tm9kZSk7Ci0g
ICAgICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIH0KICAgICAgICAgZWRnZS5z
ZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYg
ZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFu
Z2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChjaGFu
Z2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdFZGdlKTsKLSAgICAgICAgICAgIGRlcmVmKGVk
Z2UpOwotICAgICAgICB9CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5l
d05vZGUsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRn
ZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSkKICAgICB7CiAgICAgICAgIGlmIChlZGdl
Lm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFuZ2VD
aGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdl
LCBuZXdOb2RlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBl
ZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9p
ZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSkK
ICAgICB7CiAgICAgICAgIGlmIChlZGdlICE9IG9sZEVkZ2UpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKKyAgICAgICAg
Y2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhckFu
ZERlcmVmQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVyZWYobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsg
fQpAQCAtMTc3LDE4ICsxMjgsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcGVyZm9ybVN1
YnN0aXR1dGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0
ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUp
OworICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1T
dWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxk
R2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+
Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2
b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZikK
KyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkKQogICAgIHsK
ICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KICAg
ICAgICAgaWYgKCFjaGlsZCkKQEAgLTIwNCwyMiArMTU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVw
bGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgogICAgICAg
ICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRk
UmVmKQotICAgICAgICAgICAgcmVmKGNoaWxkKTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19E
RUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFs
dWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJl
IHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJl
ZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIG5vZGUg
PSBuZXcgKG1fYWxsb2NhdG9yKSBOb2RlKHZhbHVlQXJncyk7IFwKICAgICAgICAgbm9kZS0+cHJl
ZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZOb2RlTW9k
ZSA9PSBSZWZOb2RlKSBcCi0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAo
cmVmQ2hpbGRyZW5Nb2RlID09IFJlZkNoaWxkcmVuKSBcCi0gICAgICAgICAgICByZWZDaGlsZHJl
bihub2RlKTsgXAogICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKQEAgLTIyNywxMiArMTY4
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIC8vIENhbGwg
dGhpcyBpZiB5b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhh
dCBkZWFsIHdpdGgKLSAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2UgbG9jYWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQotICAgIC8vIGN5Y2xlcywg
YW5kIGhlbmNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVz
ZXQgdGhlCi0gICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5
LgotICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0Nv
bnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCkBAIC02NjksMTkgKzYwNCwxOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyAr
K2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBu
ZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhp
bmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBh
cmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcpOwog
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBv
bGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAg
Y29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGlu
Zyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03NTUsNiArNjkwLDcgQEAgcHVibGljOgog
ICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBo
Rm9ybSBtX2Zvcm07CiAgICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7Cisg
ICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9j
a0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNkZWZpbmUgREZH
X0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1z
LCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5k
ZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVN
b2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwK
KyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2Rl
KHNpemVfdCBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGgu
YWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVBcmdzKSk7IFwKKyAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5h
ZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KICAgICBE
RkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9JTlNFUlRfTk9ERSkKICN1
bmRlZiBERkdfREVGSU5FX0lOU0VSVF9OT0RFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGls
ZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZh
dWx0RmxhZ3Mob3ApOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisg
ICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNCw3ICsxMTQs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAg
ICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hp
bGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
Ci0gICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAg
ICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgewpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6
Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAg
ICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAg
ICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRy
ZW4oQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNoaWxkcmVuKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVk
PihpbW0yLm1fdmFsdWUpKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTI3
Miw4ICsyNzIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudCh1
bnNpZ25lZCBjb25zdGFudE51bWJlcikKICAgICB7CiAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50
OwotICAgICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBt
X3JlZkNvdW50LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8gPSBj
b25zdGFudE51bWJlcjsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTI4Miw4ICsyODAs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKFZp
cnR1YWxSZWdpc3RlciBsb2NhbCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBHZXRMb2NhbFVubGlu
a2VkOwotICAgICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAg
ICBtX3JlZkNvdW50LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8g
PSBsb2NhbDsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTM4NiwxMSArMzgyLDI3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2spLmlzQm9vbGVhbigpOwogICAgIH0KICAgICAKKyAgICBib29sIGNv
bnRhaW5zTW92SGludCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBN
b3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBQ
aGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC05
NTIsNiArOTY0LDkgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAg
ICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91Ymxl
OgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKQEAgLTk3MywxMiArOTg4LDYgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBOb2RlKiBy
ZWYoKQotICAgIHsKLSAgICAgICAgbV9yZWZDb3VudCsrOwotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0KICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX3JlZkNvdW50Kys7CkBAIC05OTQsMTggKzEwMDMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZigp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIC0tbV9yZWZDb3Vu
dDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcG9zdGZpeERlcmVmKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKLSAg
ICB9Ci0gICAgCiAgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1f
ZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFu
ZCB0aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAor
ICAgIG1hY3JvKE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zv
cndhcmQpIFwKKyAgICBtYWNybyhNb3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNy
byhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBt
YWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCkBAIC03Niw3
ICs3OSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBIaW50IHRo
YXQgaW5saW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5v
ZGUuIEl0J3Mgb25seSAqL1wKICAgICAvKiB1c2VkIGZvciBjb3B5aW5nIE9TUiBkYXRhIGludG8g
aW5saW5lIGZyYW1lIGRhdGEsIHRvIHN1cHBvcnQgcmVpZmljYXRpb24gb2YgKi9cCiAgICAgLyog
Y2FsbCBmcmFtZXMgb2YgaW5saW5lZCBmdW5jdGlvbnMuICovXAotICAgIG1hY3JvKElubGluZVN0
YXJ0LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oSW5saW5lU3RhcnQsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9y
IGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50
MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhmbGFncyAm
IH5Ob2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0
aXZlbHkgdGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhy
b3VnaCBhIGxvb3AsCisgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxv
dyBsZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwK
KyAgICAgICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQg
bWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQorICAgICAgICAgICAg
Ly8gcG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9v
cHMsIGJ1dCByaWdodCBub3cgSSBkb24ndCB0aGluaworICAgICAgICAgICAgLy8gd2UgaGF2ZSBl
dmlkZW5jZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1l
cmdlRmxhZ3MoKGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KSB8IE5vZGVVc2VkQXNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjE0
LDEyICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpOwogCi0gICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkg
dGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBh
IGxvb3AsCi0gICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFk
aW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKLSAgICAg
ICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQg
YmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQotICAgICAgICAgICAgLy8gcG9p
bnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1
dCByaWdodCBub3cgSSBkb24ndCB0aGluawotICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5j
ZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NE
YXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03MzcsNyAr
NzM4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2Fz
ZSBBcnJheWlmeToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBj
YXNlIElkZW50aXR5OiB7CisgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIGNhc2UgTW92
SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmll
SGludDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxl
IGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNl
cnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBD
UkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDYg
KzE5NjgsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgY29t
cGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAg
ICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGlu
dCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCkBAIC00Nzg4LDcgKzQ4MDEs
NDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgSW5saW5l
U3RhcnQ6CisgICAgY2FzZSBJbmxpbmVTdGFydDogeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAg
ICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9
IG5vZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraSkgeworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQorICAg
ICAgICAgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
YXJndW1lbnRQb3NpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubV9h
cmd1bWVudFBvc2l0aW9uc1thcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBpXTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50UG9zaXRpb24uc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0
YWNrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyU3BlY3VsYXRpb24oYXJndW1l
bnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChpc0NlbGxTcGVjdWxhdGlvbihhcmd1bWVudFBvc2l0aW9uLnByZWRpY3Rpb24oKSkpCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQ
b3NpdGlvbi5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9
IFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFj
ayk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcnkgPSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2
YWx1ZVNvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgcmVjb3Zlcnkg
c2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisg
ICAgICAgICAgICAvLyBzdG9yZWQgaW50byB0aGUgc3RhY2sgYXQgdGhlIHJpZ2h0IHBsYWNlLCBv
ciB0byBhIGNvbnN0YW50LAorICAgICAgICAgICAgLy8gc2luY2UgdGhlIEFyZ3VtZW50cyBjb2Rl
IGlzbid0IHNtYXJ0IGVub3VnaCB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAg
IC8vIFRoZSBleGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJl
YWxseSBuZWVkIHRvIGJlCisgICAgICAgICAgICAvLyBhYmxlIHRvIHJlY292ZXIuCisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZ0YoIlxuUmVjb3Zlcnkg
Zm9yIGFyZ3VtZW50ICVkOiAiLCBpKTsKKyAgICAgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpk
YXRhRmlsZSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHNbaV0gPSByZWNvdmVyeTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAgICAgCiAgICAgY2FzZSBOb3A6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VAogICAgIGlmICghdmFsdWVSZWNvdmVyeSkgewogICAgICAgICAvLyBDaGVjayB0aGF0IGVp
dGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9k
ZSB3YXMgYQogICAgICAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgot
ICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkgeworICAgICAgICBp
ZiAoIW1fY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CiAgICAgICAgICAgICBOb2Rl
KiBzZXRMb2NhbCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KG1faW5kZXhJ
bkJsb2NrIC0gMSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2Nh
bC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2Fs
LCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNTY3LDcgKzE1NjcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
U2V0TG9jYWwpOworICAgIEFTU0VSVChub2RlLT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5v
cCgpICE9IFpvbWJpZUhpbnQpOwogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLT5s
b2NhbCgpOwogCkBAIC0xNjc4LDUwICsxNjc4LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgICAgICAgICBjb21waWxl
TW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAgICAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWU7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0g
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fY3VycmVudE5vZGUtPmFyZ3VtZW50UG9zaXRp
b25TdGFydCgpOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFu
ZChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6
OmFscmVhZHlJbkpTU3RhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBhcmd1bWVudFBvc2l0aW9uID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRQb3NpdGlv
bnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
YWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJn
dW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2libGUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2Ug
PSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNl
KEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2sp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24o
YXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVT
b3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVjb3Zlcnkg
c2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBpbnRvIHRoZSBzdGFjayBhdCB0aGUgcmlnaHQg
cGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRo
ZSBBcmd1bWVudHMgY29kZSBpc24ndCBzbWFydCBlbm91Z2ggdG8gaGFuZGxlIGFueXRoaW5nIGVs
c2UuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBleGNlcHRpb24gaXMgdGhlIHRoaXMgYXJn
dW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGJlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0g
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcblJlY292ZXJ5IGZvciBhcmd1bWVudCAlZDog
IiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgp
KTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
c1tpXSA9IHJlY292ZXJ5OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAgICAgIG1fbGFzdFNldE9w
ZXJhbmQgPSBtX2N1cnJlbnROb2RlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgIG1fc3RyZWFt
LT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+bG9j
YWwoKSwgRGF0YUZvcm1hdERlYWQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkK
ICAgICAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2Rl
Ojpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMSArMjg4
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
R2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgdmFyaWFibGUtPnByZWRpY3Rp
b24oKSwgR2V0TG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAx
LCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2lu
LAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0
KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KGdldExvY2FsLCBDZWxsVXNlKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkKQEAgLTMy
MCwxNCArMzIwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgRWRnZSBjaGlsZDEg
PSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU2V0TG9j
YWwsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUp
LCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIGNoaWxkMSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3RydWN0dXJlIHRvIGluZGlj
YXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIG5l
eHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhlIGN1cnJl
bnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZh
bHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEwICsxNDcsMTAgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwogICAgICAgICAg
ICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAgICAgICAgICAgICAgcGhp
c0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zv
cm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKQorICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9PSBFeGFjdFJlZkNvdW50
KQogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlSZWZDb3VudHMuZ2V0KG5v
ZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSkg
PyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
Vl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyArK2opIHsK
ICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5jaGlsZChub2RlLCBqKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQpAQCAtMTc4LDcgKzE3OCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09IFNldExvY2FsCiAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCi0gICAgICAgICAgICAgICAg
ICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBlZGdlLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3Ao
KSA9PSBab21iaWVIaW50CisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09
IE1vdkhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGlu
dEFuZENoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xODcsNiArMTkwLDkgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5v
ZGUsIGVkZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0
TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFpvbWJp
ZUhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhp
bnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IE1vdkhpbnRB
bmRDaGVjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0
QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZs
dXNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjIwLDYgKzIyNiw5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2tdLCBwcmV2Tm9kZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkgPT0gU2V0TG9jYWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gTW92SGludEFu
ZENoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0g
Wm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgp
ID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUt
Pm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSA9PSBl
ZGdlLm5vZGUoKSkgewpAQCAtMjg3LDYgKzI5NiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2FsJ3MgdGhhdCB3ZSBrbm93
IHRvIGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAorICAgICAgICAgICAgICAgICAgICAvLyBk
b2Vzbid0IHlldCBrbm93IHRvIGJlIGRlYWQuCisgICAgICAgICAgICAgICAgICAgIGlmICghbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUykKICAgICAg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0luZGV4KSwgZ2V0TG9jYWxQ
b3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQpOwogICAgICAgICAgICAg
ICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191071</attachid>
            <date>2013-03-01 16:49:56 -0800</date>
            <delta_ts>2013-03-01 18:22:22 -0800</delta_ts>
            <desc>runs the main benchmarks</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88077</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEg
TW92SGludCBpcyBlZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKKyAgICAg
ICAgLy8gd2FzIGRlYWQuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KQEAgLTE2MjgsMTggKzE2NDAsNiBAQCBpbmxpbmUgYm9v
bCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgLy8gSWYgdGhlIEdl
dExvY2FsIGlzIGRlYWQsIHRoZW4gd2UgdHJhbnNmZXIgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIGFmdGVyIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzODkKLSAgICAgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBibG9j
ayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgotICAgICAgICAgICAgICAg
IHNvdXJjZSA9IGluVmFyaWFibGU7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNmZXJpbmcg
Iik7Ci0gICAgICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiIGZyb20gaGVhZCB0byB0YWlsIChkZWFkIEdldExvY2FsIGNh
c2UpLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9u
YWwgc3BlY3VsYXRpb25zLgogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCw2ICsxNDAsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5hZGQodmFyaWFibGVBY2Nlc3NEYXRhLCBBcmd1bWVudHNBbGlhc2luZ0RhdGEoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFyaWFibGVz
IGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mCisgICAgICAg
IC8vIGxpdmVuZXNzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxv
Y2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIG1faXNMaXZlLmFkZChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCB2YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJl
CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3RoIGFj
Y2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9mIENy
ZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVudHMK
QEAgLTE5OCw2ICsyMTgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmICFzb3VyY2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRvdGFsbHkgZGVhZCwgdGhl
biBpZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNMaXZlLmNvbnRh
aW5zKHZhcmlhYmxlQWNjZXNzRGF0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1
bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKQEAgLTQ2OCw3ICs0OTIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZl
cmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs1MTEsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hp
bGQyKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50QnlWYWwpOwpAQCAtNTA0LDEwICs1MjYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBUaGlzIGlzIGEgbXVzdC1nZW5l
cmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0
aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDggKzU1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9u
bHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9i
b2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNO
b3RDcmVhdGVkLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDEpKTsKQEAgLTU4MSwxMCArNjAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbik7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTU5
OCw3ICs2MTcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKE5vcCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmRE
ZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgw
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTYyNiw4ICs2NDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNo
aWxkcmVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4ucmVzZXQoKTsKQEAgLTY1MSw2ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQXJndW1lbnRzQWxpYXNpbmdEYXRhLAogICAgICAgICAg
ICAgRGVmYXVsdEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBO
dWxsYWJsZUhhc2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFz
aW5nOworICAgIEhhc2hTZXQ8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbV9pc0xpdmU7CiAKICAgICB2
b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7CkBAIC03ODUsNyAr
ODAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRz
LmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
IGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihl
ZGdlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzkzLDcgKzgxMCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3
ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENT
RSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgogICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21C
YWcoZWRnZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTQ0NDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwg
OD4gewogICAgIH0KICAgICAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0
ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBh
cmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUs
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIHRlbXBs
YXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUoR3JhcGgmLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDkgKzM0LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBv
c3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3Mp
IFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSog
QmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZD
aGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFy
YW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFw
aCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cykgXAogICAgIHsgXAotICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNo
aWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3Mp
OyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk4LDc3ICs2OTgsNTYgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMg
PSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiks
IEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAg
ICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1
bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkK
LSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgRWRnZSBj
aGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1
cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAg
U3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0
R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUg
b3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShjaGlsZDEp
LCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBF
ZGdlKGNoaWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZs
YWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxk
cmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFk
ZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2RlKiBj
aGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAgICAgICAgICAgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwg
RWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLAorICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxk
MiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFn
cyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJl
bihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBOb2Rl
KiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwg
T3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsCisgICAgICAgICAgICBTcGVjTm9uZSwgTm9kZTo6VmFyQXJnLCBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAogICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7
CiAgICAgICAgIAotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJh
dGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgTm9kZSogaW5zZXJ0UGhpTm9kZShPcEluZm8gaW5m
bywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dy
YXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwKLSAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbyk7Cisg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhpLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvKTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3Vs
dCk7Ci0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEyNTYsMTcgKzEyMzUs
MTkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNh
bGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNQcm92
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChjYWxsTGlua1N0YXR1cy5j
YW5PcHRpbWl6ZSgpKTsKLSAgICAKICAgICBOb2RlKiB0aGlzQXJndW1lbnQ7CiAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1
bWVudCA9IDA7CiAKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkgeworICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXQsIHRoaXNBcmd1bWVudCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGlt
aXplKCkpOworICAgIAogICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3Rh
dHVzLmZ1bmN0aW9uKCkpCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZv
KGZ1bmN0aW9uKSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKICAgICBlbHNlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZp
ZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXZlcnl0aGlu
Z0lzTGl2ZSk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5k
ZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm91bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFrZW5CbG9ja0luZGV4KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1w
LCBib3VuZGFyeUNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh0YWtlbkJsb2NrSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE3MSw4ICsxNzEsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+cmVmQ291bnQoKSA9
PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC0+Y29kZU9yaWdpbiwgT3BJ
bmZvKHRhcmdldEJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJyYW5jaC0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrSW5kZXgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9
IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTI3Miw3ICsyNzIsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYmxvY2stPmFwcGVu
ZE5vZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgbV9ncmFw
aCwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwgCiAgICAgICAgICAgICBPcElu
Zm8obGl2ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CiAgICAg
ICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAgICBwcm9wYWdhdGVQaGlz
PEFyZ3VtZW50T3BlcmFuZD4oKTsKLSAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMjQsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBBTFdB
WVNfSU5MSU5FIE5vZGUqIGFkZFBoaVNpbGVudGx5KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQogICAg
IHsKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSkpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBo
aSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFw
cGVuZChyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICBFbGltaW5hdGluZyBl
ZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+IEAiLCBlZGdlLT5pbmRleCgpKTsK
ICNlbmRpZgotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsKICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC0xMDI0LDcgKzEwMjMsNiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
Ci0gICAgICAgIG1fY3VycmVudE5vZGUtPnNldFJlZkNvdW50KDEpOwogICAgICAgICBlbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0
byB0aGlzIG5vZGUuCkBAIC0xMTU0LDEwICsxMTUyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRMb2Nh
bFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQKICAgICAgICAgICAgIC8v
IGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkg
PT0gR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+
b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKQogICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxP
cC0+Y29udmVydFRvR2V0TG9jYWwodmFyaWFibGVBY2Nlc3NEYXRhLCBwaGkpOwotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHBoaSk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTAsNyArMTIwNiw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoZGF0YU5vZGUtPmhhc1Jlc3VsdCgpKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7Ci0gICAgICAgICAgICBt
X2dyYXBoLnJlZihkYXRhTm9kZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDIxIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBV
bmkKICAgICB9CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBSZWZD
b3VudFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEV2ZXJ5
dGhpbmdJc0xpdmU6CisgICAgICAgIG91dC5wcmludCgiRXZlcnl0aGluZ0lzTGl2ZSIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEV4YWN0UmVmQ291bnQ6CisgICAgICAgIG91dC5wcmludCgi
RXhhY3RSZWZDb3VudCIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9vZlN0YXR1cyBzdGF0dXMp
CiB7CiAgICAgc3dpdGNoIChzdGF0dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNywxNSBAQCBlbnVtIFVu
aWZpY2F0aW9uU3RhdGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorLy8gRGVzY3JpYmVz
IGhvdyByZWZlcmVuY2UgY291bnRzIGluIHRoZSBncmFwaCBiZWhhdmUuCitlbnVtIFJlZkNvdW50
U3RhdGUgeworICAgIC8vIEV2ZXJ5dGhpbmcgaGFzIHJlZkNvdW50KCkgPT0gMS4KKyAgICBFdmVy
eXRoaW5nSXNMaXZlLAorCisgICAgLy8gU2V0IGFmdGVyIERDRSBoYXMgcnVuLgorICAgIEV4YWN0
UmVmQ291bnQKK307CisKIGVudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIH07CiAKIGVudW0gU3Bl
Y3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRp
b24gfTsKQEAgLTI1MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlKTsK
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHcmFwaEZvcm0pOwog
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVuaWZpY2F0aW9uU3Rh
dGUpOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlJlZkNvdW50
U3RhdGUpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb29m
U3RhdHVzKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24g
MTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDQsNyArMTAzLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0
ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24g
Y2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAg
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKQEAgLTEyNiw3ICsxMjQsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4NiwyNSArMTgzLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0
cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgewogICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmln
aW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNo
aWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjUyLDEyICsyNDYsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0
dXJlKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwg
Y2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKQEAgLTI4NywxNyAr
MjgwLDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFn
ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c3RhdHVzLm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8v
IFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQg
dG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBj
aGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1
cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdl
KG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVP
cmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwpAQCAtMzA1LDE3ICsyOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgR2V0QnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IGNoaWxkRWRnZSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFB1
dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTM0OCw2ICszMzgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFkamFj
ZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBH
ZXRMb2NhbHMgd2l0aG91dCBhIFBoaSBjaGlsZCBhcmUgZ3VhcmFudGVlZCBkZWFkLiBXZSBkb24n
dCBoYXZlIHRvCisgICAgICAgICAgICAgICAgLy8gZG8gYW55dGhpbmcgYWJvdXQgdGhlbS4KKyAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2Zvcm0gIT0gTG9hZFN0b3JlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwpAQCAtMzYwLDggKzM1
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBoaSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBo
YW50b21Mb2NhbCwgIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlKSwgRWRnZShwaGkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTM3Nyw3ICszNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hp
bGRyZW4pOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQwNiwxOCArNDAxLDE3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIE5vZGUq
IHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKGNlbGwpLAotICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9w
SW5mbyhjZWxsKSk7CisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LAotICAgICAgICAg
ICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0Nv
bnN0YW50LCBDZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAg
ICAgICAgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxV
c2UpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmln
aW4sCiAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3Ry
dWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICB9CiAgICAgCkBA
IC00NTQsOCArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Rm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFz
cyBEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6CisgICAgRENFUGhhc2UoR3JhcGgm
IGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZGVhZCBjb2RlIGVsaW1pbmF0aW9uIikK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIEZp
cnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspCisgICAgICAgICAg
ICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDApOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgt
LTspCisgICAgICAgICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhdLT5zZXRSZWZDb3VudCgw
KTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBOb3cgZmluZCB0aGUgcm9vdHM6CisgICAg
ICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5lcmF0ZS4KKyAgICAgICAgLy8gLSBOb2Rl
cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0eXBlIGNoZWNrcy4KKyAgICAgICAgLy8gLSBOb2Rl
cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBTZXRMb2NhbHMuCisgICAgICAgIC8vIFNldCB0aGVp
ciByZWYgY291bnRzIHRvIDEgYW5kIHB1dCB0aGVtIG9uIHRoZSB3b3JrbGlzdC4KKyAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYg
KCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGZpbmRU
eXBlQ2hlY2tSb290KTsKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9k
ZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgICAgICAgICBtX3dv
cmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fd29ya2xpc3QubGFzdCgpOworICAgICAgICAgICAgbV93b3JrbGlzdC5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7IC8v
IEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJlZidlZC4KKyAg
ICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGNvdW50RWRn
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1ti
bG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJs
b2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIHBvc3NpYmls
aXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQgaXRzCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3ZSBzaG91bGQgTW92SGludCB0aGUg
Y2hpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91
bGRHZW5lcmF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hpbGQx
KCktPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhab21i
aWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVk
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVm
Q291bnQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAg
ICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7CisgICAgICAgICAgICAgICAgICAgIC8v
IExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVJcnJlbGV2YW50UGhhbnRvbUNo
aWxkcmVuKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgxKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9yZWZDb3VudFN0
YXRlID0gRXhhY3RSZWZDb3VudDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmRUeXBlQ2hlY2tSb290KE5vZGUqLCBFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICAvLyBXZSBtYXkgaGF2ZSBhbiAidW5wcm92ZWQiIHVudHlwZWQg
dXNlIGZvciBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUuIFRoZSBDRkEKKyAgICAgICAgLy8gd2ls
bCBqdXN0IG5vdCBoYXZlIGdvdHRlbiBhcm91bmQgdG8gaXQuCisgICAgICAgIGlmIChlZGdlLmlz
UHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKCFlZGdlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICBtX3dv
cmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY291bnRF
ZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICAvLyBEb24ndCBjb3VudCBlZGdl
cyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50ZWQgZm9yIHRoZWlyIHR5cGUgY2hlY2tzLgorICAgICAg
ICBpZiAoIShlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoZWRnZS0+cG9zdGZp
eFJlZigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChl
ZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZWxpbWluYXRlSXJyZWxldmFudFBo
YW50b21DaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkgeworICAgICAgICAgICAgRWRnZSBl
ZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAgICAgICAgICBpZiAoIWVkZ2UpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZWRnZS5uZWVkc0NoZWNr
KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFZl
Y3RvcjxOb2RlKiwgMTI4PiBtX3dvcmtsaXN0OworfTsKKworYm9vbCBwZXJmb3JtRENFKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIERDRSBQ
aGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxEQ0VQaGFzZT4oZ3JhcGgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHRENFUGhhc2VfaAorI2RlZmluZSBERkdEQ0VQaGFzZV9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgR3JhcGg7CisKKy8vIEdsb2JhbCBkZWFkIGNvZGUgZWxpbWluYXRpb24uIEVsaW1pbmF0ZXMg
YW55IG5vZGUgdGhhdCBpcyBub3QgTm9kZU11c3RHZW5lcmF0ZSwKKy8vIG5vdCB1c2VkIGJ5IGFu
eSBvdGhlciBsaXZlIG5vZGUsIGFuZCBub3Qgc3ViamVjdCB0byBhbnkgdHlwZSBjaGVjay4KKwor
Ym9vbCBwZXJmb3JtRENFKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRENFUGhhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4dXBQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJlZGlj
dGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBpbmxpbmUgYm9vbCBj
b21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGlu
ZyhkZmcpOwogICAgIH0KICAgICAKKyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkpCisg
ICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBpbiAl
dSBpdGVyYXRpb25zLlxuIiwgY250KTsKKwogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhw
b2ludENvbnZlcmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CiAgICAgcGVyZm9ybUNQU1JldGhy
ZWFkaW5nKGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5jZSBDU0Ug
cmFyZWx5IGRldGhyZWFkcyB0aGUgZ3JhcGguCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cygpKQotICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252ZXJn
ZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisgICAgcGVyZm9ybURDRShkZmcpOwogICAg
IHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICAgICBHcmFwaER1bXBN
b2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3RlYWxp
bmcgdGhlbSBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9uLgog
ICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgKm5vZGUpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwogICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJVc2Up
LCBFZGdlKCksIEVkZ2UoKSk7CkBAIC01MTgsOCArNTE4LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVkZ2Ug
PSBsb2dpY2FsTm90LT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NoaWxk
RWRnZS0+aGFzQm9vbGVhblJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRha2Vu
QmxvY2tJbmRleCgpOwpAQCAtNTU2LDggKzU1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIC8vIHdvdWxkIGhhdmUgYWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQgaW5zZXJ0IGEg
Zm9yY2VkIGV4aXQganVzdCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBiZSBzYWZlLgogICAg
ICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUs
IFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRF
WElOR19UWVBFUzoKQEAgLTYzOCw4ICs2MzUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwog
ICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVBy
b2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIG5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVy
ZSgpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCkBAIC02NTAsMTAgKzY0Nyw5IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUp
OwogICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNs
b2JiZXJzV29ybGQpOwogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxl
PEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJl
Zihub2RlKTsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1v
ZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVl
ZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIE5vZGUqIHN0
b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UpOwogICAgICAgICAgICAgaWYgKCFz
dG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MzAsNiAr
NzI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgTGFzdE5v
ZGVUeXBlOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFuZENo
ZWNrOgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtODM3LDcg
KzgzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2sp
OwogICAgIH0KICAgICAKLSAgICBOb2RlKiBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1vZGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXksIE5vZGUqIGluZGV4LCBib29sICgq
c3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wgc2hv
dWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5
TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSogaW5kZXgsIGJv
b2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAgCkBA
IC04NTgsMjEgKzg1NywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBBcnJheWlmeVRvU3RydWN0dXJlLCBj
b2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJbmZv
KGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2UpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFy
cmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hl
Y2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3Jp
Z2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRn
ZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04ODIsMTcg
Kzg4MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51c2Vz
QnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgICAgIHNo
b3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0gICAgICAgICAg
ICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAgICAg
ICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25v
d25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBH
ZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgc2hvdWxkR2VuZXJh
dGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKLSAgICAgICAgICAgIHNob3VsZEdl
bmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgU3BlY05vbmUsIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUuYXNX
b3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93
bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9uKEVk
Z2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQpAQCAtOTAyLDggKzg5Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAg
ICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTgyLDcgKzk3NSw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAKICAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9IEludDMyVXNl
KSB7CkBAIC05OTIsOSArOTg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VS
VChuZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICAKLSAgICAgICAg
bV9ncmFwaC5yZWYobmV3RWRnZSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7Ci0g
ICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAgICAgCkBAIC0xMDE0LDcg
KzEwMDMsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJsZU5vZGUoRWRn
ZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlvbkRpcmVjdGlv
biBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgTm9kZSog
cmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCisgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgCiAgICAgICAgICAgICBkaXJlY3Rpb24gPT0g
QmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50MzJUb0RvdWJs
ZSwKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2UoZWRnZS5ub2Rl
KCksIE51bWJlclVzZSkpOwogICAgICAgICAKQEAgLTEwMzksOSArMTAyOCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkp
KTsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CiAgICAgICAgIGVkZ2Uuc2V0Tm9k
ZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50LAotICAgICAg
ICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9jaygpLT5hZGRP
ckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xkTm9kZSk7
CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0YW50LCBtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNvZGVCbG9jaygpLT5h
ZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdHJ1bmNh
dGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
NDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBDCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBt
X2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVk
KQorICAgICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5dGhpbmdJc0xpdmUpCiB7CiAgICAgQVNTRVJU
KG1fcHJvZmlsZWRCbG9jayk7CiB9CkBAIC0zMTIsNyArMzEzLDcgQEAgdm9pZCBHcmFwaDo6ZHVt
cEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KQogewogICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9j
b2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKLSAgICBkYXRhTG9nKCIgIEZpeHBv
aW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5p
ZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7CisgICAgZGF0YUxv
ZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAiLCBtX2Zv
cm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICI7IFJlZiBj
b3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKICAgICAKICAgICBOb2RlKiBs
YXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7
ICsrYikgewpAQCAtMzQ2LDE2ICszNDcsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2RlKiBvcCkKLXsK
LSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7Ci19Ci0KLXZvaWQg
R3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCi17Ci0gICAgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4oKnRoaXMsIG9wLCBkZXJlZik7Ci19Ci0KIHZvaWQgR3JhcGg6OmRldGhyZWFkKCkKIHsK
ICAgICBpZiAobV9mb3JtID09IExvYWRTdG9yZSkKQEAgLTM5MCw2NyArMzgxLDYgQEAgdm9pZCBH
cmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogICAgIHN1Y2Nlc3Nvci0+bV9wcmVk
ZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwogfQogCi12b2lkIEdyYXBoOjpjb2xsZWN0R2Fy
YmFnZSgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBHYXJiYWdl
IENvbGxlY3Rpb24iKTsKLSAgICAKLSAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAg
Zm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJs
b2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQotICAgICAgICAgICAgYmxv
Y2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDApOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKLSAgICAgICAg
ICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7Ci0gICAgfQotICAgIAot
ICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJh
dGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCi0gICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhl
IHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlKiwgMTI4PiB3b3JrbGlzdDsKLSAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsr
YmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5k
ZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7Ci0gICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5l
cmF0ZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBub2RlLT5zZXRS
ZWZDb3VudCgxKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgewotICAgICAg
ICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlzdC5yZW1vdmVM
YXN0KCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hv
dWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgotICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgIGNo
aWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAg
ICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0ubm9k
ZSgpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYoKSkKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5k
KGNoaWxkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hp
bGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3RmaXhSZWYoKSkK
LSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkt
PnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChu
b2RlLT5jaGlsZDMoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw4MyArOTIs
MzQgQEAgcHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9jayosIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RI
YW5kbGVWYWx1ZXMpOwogICAgIH5HcmFwaCgpOwogICAgIAotICAgIC8vIE1hcmsgYSBub2RlIGFz
IGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCisgICAgdm9pZCBj
aGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQogICAgIHsKLSAgICAgICAgLy8g
SWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291bnQgemVybyB0
aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFub2RlLT5wb3N0
Zml4UmVmKCkpCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKLSAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgfQotICAgIEVkZ2UgcmVmKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJl
ZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBlZGdlOwotICAgIH0KLSAgICBFZGdlIHJl
ZihOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZihlZGdlKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQotICAgIHsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKLSAgICAgICAgICAgIGR1
bXAoKTsKLSNlbmRpZgotICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkgPT0gMSkKLSAg
ICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7Ci0gICAgfQotICAgIHZvaWQgZGVyZWYoRWRn
ZSBlZGdlKQotICAgIHsKLSAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICB2
b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBkZXJlZihlZGdlKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0
byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxk
cmVuLCBhbmQgdmljZSB2ZXJzYS4KLSAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUqKTsKLSAgICB2
b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwotCi0gICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBl
ZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCi0gICAgewotICAgICAg
ICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3Tm9kZSk7Ci0gICAgICAgICAg
ICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIH0KICAgICAgICAgZWRnZS5zZXROb2RlKG5l
d05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRn
ZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFuZ2VFZGdlKEVk
Z2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpIHsK
LSAgICAgICAgICAgIHJlZihuZXdFZGdlKTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2UpOwotICAg
ICAgICB9CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNv
bXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUsIGJv
b2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgTm9kZSog
b2xkTm9kZSwgTm9kZSogbmV3Tm9kZSkKICAgICB7CiAgICAgICAgIGlmIChlZGdlLm5vZGUoKSAh
PSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFuZ2VDaGlsZChlZGdl
LCBuZXdOb2RlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdlLCBuZXdOb2Rl
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdl
IG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBjb21wYXJl
QW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7CiAg
ICAgICAgIGlmIChlZGdlICE9IG9sZEVkZ2UpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKKyAgICAgICAgY2hhbmdlRWRn
ZShlZGdlLCBuZXdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hp
bGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVy
ZWYobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
c2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJBbmREZXJlZkNo
aWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsgfQpAQCAtMTc3
LDE4ICsxMjgsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlv
bihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSA9IG5vZGUt
PnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1Zh
ckFyZ3MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9y
RWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxkR2VuZXJhdGUp
OwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCks
IHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdl
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdl
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdl
KG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIHBlcmZv
cm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZikKKyAgICB2b2lk
IHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkKQogICAgIHsKICAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KICAgICAgICAgaWYg
KCFjaGlsZCkKQEAgLTIwNCwyMiArMTU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlcmUg
aXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVwbGFjZW1lbnQg
ZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgogICAgICAgICBBU1NFUlQo
IWNoaWxkLT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRkUmVmKQotICAg
ICAgICAgICAgcmVmKGNoaWxkKTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQURE
X05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXND
b21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJh
bXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVu
TW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQ
YXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVt
cGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0Nv
bW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIG5vZGUgPSBuZXcgKG1f
YWxsb2NhdG9yKSBOb2RlKHZhbHVlQXJncyk7IFwKICAgICAgICAgbm9kZS0+cHJlZGljdCh0eXBl
KTsgXAotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZOb2RlTW9kZSA9PSBSZWZO
b2RlKSBcCi0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAocmVmQ2hpbGRy
ZW5Nb2RlID09IFJlZkNoaWxkcmVuKSBcCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsg
XAogICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFESUNfVEVNUExB
VEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKQEAgLTIyNywxMiArMTY4LDYgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIC8vIENhbGwgdGhpcyBpZiB5
b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhhdCBkZWFsIHdp
dGgKLSAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgbG9j
YWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQotICAgIC8vIGN5Y2xlcywgYW5kIGhlbmNl
IHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVzZXQgdGhlCi0g
ICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5LgotICAgIHZv
aWQgY29sbGVjdEdhcmJhZ2UoKTsKLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5v
ZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0TG9jYWwpCkBAIC02NjksMTkgKzYwNCwxOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJ
ZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyArK2NoaWxkSWR4
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhd
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJBcmdDaGlsZHJl
bltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVu
W2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZywg
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2Fw
KG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcpOwogICAgICAgICAg
ICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywg
bmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29tcGFyZUFu
ZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkBAIC03NTUsNiArNjkwLDcgQEAgcHVibGljOgogICAgIE9wdGlt
aXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBoRm9ybSBtX2Zv
cm07CiAgICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7CisgICAgUmVmQ291
bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZvaWQgaGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNkZWZpbmUgREZHX0RFRklORV9J
TlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBh
cmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlw
ZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFJlZkNo
aWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2RlKHNpemVfdCBp
bmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBc
CiAgICAgeyBcCi0gICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGguYWRkTm9kZShy
ZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVB
cmdzKSk7IFwKKyAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KICAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9JTlNFUlRfTk9ERSkKICN1bmRlZiBERkdf
REVGSU5FX0lOU0VSVF9OT0RFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6
IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGlsZHJlbikKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAg
ICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9w
cmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
b3ApOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQs
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52
YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwg
bV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CiAg
ICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNo
aWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAg
ewpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4ZWQsIGNo
aWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9y
ZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBt
X29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9w
cmVkaWN0aW9uKFNwZWNOb25lKQpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNl
bmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNoaWxkcmVuKQogICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZD
b3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0x
Lm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVkPihpbW0yLm1f
dmFsdWUpKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTI3Miw4ICsyNzIs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudCh1bnNpZ25lZCBj
b25zdGFudE51bWJlcikKICAgICB7CiAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50OwotICAgICAg
ICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX3JlZkNvdW50
LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xv
YmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51
bWJlcjsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTI4Miw4ICsyODAsNiBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBHZXRMb2NhbFVubGlua2VkOwotICAg
ICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX3JlZkNv
dW50LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0
Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8gPSBsb2NhbDsK
ICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTM4NiwxMSArMzgyLDI3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmlzQm9vbGVhbigpOwogICAgIH0KICAgICAKKyAgICBib29sIGNvbnRhaW5zTW92
SGludCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBTZXRM
b2NhbDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVj
azoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBQaGk6CiAgICAg
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC05NTIsNiArOTY0
LDkgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAgICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgogICAgICAg
ICBjYXNlIFZhbHVlVG9JbnQzMjoKQEAgLTk3MywxMiArOTg4LDYgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBOb2RlKiByZWYoKQotICAg
IHsKLSAgICAgICAgbV9yZWZDb3VudCsrOwotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0K
ICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JlZkNv
dW50Kys7CkBAIC05OTQsMTggKzEwMDMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fcmVm
Q291bnQgPSByZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZigpCi0gICAgewot
ICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIC0tbV9yZWZDb3VudDsKLSAgICB9
Ci0gICAgCi0gICAgdW5zaWduZWQgcG9zdGZpeERlcmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3JlZkNvdW50KTsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKLSAgICB9Ci0gICAg
CiAgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBO
b2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVzIHdp
bGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0
SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAorICAgIG1hY3Jv
KE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0ZvcndhcmQpIFwK
KyAgICBtYWNybyhNb3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNybyhab21iaWVI
aW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGks
IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCkBAIC03Niw3ICs3OSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBIaW50IHRoYXQgaW5saW5p
bmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5vZGUuIEl0J3Mg
b25seSAqL1wKICAgICAvKiB1c2VkIGZvciBjb3B5aW5nIE9TUiBkYXRhIGludG8gaW5saW5lIGZy
YW1lIGRhdGEsIHRvIHN1cHBvcnQgcmVpZmljYXRpb24gb2YgKi9cCiAgICAgLyogY2FsbCBmcmFt
ZXMgb2YgaW5saW5lZCBmdW5jdGlvbnMuICovXAotICAgIG1hY3JvKElubGluZVN0YXJ0LCAwIHwg
Tm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oSW5saW5lU3RhcnQsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ug
b3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50MzIgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQ0
NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0g
bWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBj
aGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhmbGFncyAmIH5Ob2RlVXNl
ZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhh
dCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxv
b3AsCisgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5n
IHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKKyAgICAgICAg
ICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUg
d29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQorICAgICAgICAgICAgLy8gcG9pbnQg
YW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCBy
aWdodCBub3cgSSBkb24ndCB0aGluaworICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0
aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3Mo
KGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KSB8IE5vZGVVc2VkQXNOdW1iZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjE0LDEyICsyMjAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpOwogCi0gICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkgdGhhdCBhIFNl
dExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBhIGxvb3AsCi0g
ICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFkaW5nIHRvIHRo
ZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKLSAgICAgICAgICAgIC8v
IHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQgYmUgd29ydGh3
aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQotICAgICAgICAgICAgLy8gcG9pbnQgYW5kIGFj
dHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1dCByaWdodCBu
b3cgSSBkb24ndCB0aGluawotICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5jZSB0aGF0IHRo
aXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NEYXRhLT5mbGFn
cygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNo
aWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03MzcsNyArNzM4LDEwIEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBBcnJheWlm
eToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBjYXNlIElkZW50
aXR5OiB7CisgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAg
ICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmllSGludDogewog
ICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMg
c3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBm
aXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBDUkFTSCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDYgKzE5NjgsMTkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgY29tcGlsZU1vdkhp
bnQobm9kZSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3
aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCkBAIC00Nzg4LDcgKzQ4MDEsNDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgSW5saW5lU3RhcnQ6Cisg
ICAgY2FzZSBJbmxpbmVTdGFydDogeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG5vZGUtPmFy
Z3VtZW50UG9zaXRpb25TdGFydCgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkg
eworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKKyAgICAgICAgICAgIGlmIChj
b2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQorICAgICAgICAgICAg
ICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYgYXJndW1lbnRQ
b3NpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubV9hcmd1bWVudFBv
c2l0aW9uc1thcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBpXTsKKyAgICAgICAgICAgICAgICBWYWx1
ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3VtZW50UG9zaXRp
b24uc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlv
bi5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVl
U291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0NlbGxT
cGVjdWxhdGlvbihhcmd1bWVudFBvc2l0aW9uLnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5w
cmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291
cmNlKEJvb2xlYW5JbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAg
ICAgICAgICAgICAgcmVjb3ZlcnkgPSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJj
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgcmVjb3Zlcnkgc2hvdWxkIHJl
ZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisgICAgICAgICAg
ICAvLyBzdG9yZWQgaW50byB0aGUgc3RhY2sgYXQgdGhlIHJpZ2h0IHBsYWNlLCBvciB0byBhIGNv
bnN0YW50LAorICAgICAgICAgICAgLy8gc2luY2UgdGhlIEFyZ3VtZW50cyBjb2RlIGlzbid0IHNt
YXJ0IGVub3VnaCB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAgIC8vIFRoZSBl
eGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVk
IHRvIGJlCisgICAgICAgICAgICAvLyBhYmxlIHRvIHJlY292ZXIuCisjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZ0YoIlxuUmVjb3ZlcnkgZm9yIGFyZ3Vt
ZW50ICVkOiAiLCBpKTsKKyAgICAgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgp
KTsKKyNlbmRpZgorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbaV0gPSBy
ZWNvdmVyeTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAg
ICAgCiAgICAgY2FzZSBOb3A6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcs
OSArMjI3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VAogICAg
IGlmICghdmFsdWVSZWNvdmVyeSkgewogICAgICAgICAvLyBDaGVjayB0aGF0IGVpdGhlciB0aGUg
Y3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9kZSB3YXMgYQog
ICAgICAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgotICAgICAgICBp
ZiAobV9jdXJyZW50Tm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkgeworICAgICAgICBpZiAoIW1fY3Vy
cmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CiAgICAgICAgICAgICBOb2RlKiBzZXRMb2Nh
bCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KG1faW5kZXhJbkJsb2NrIC0g
MSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+b3AoKSA9
PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2Nh
bC0+Y29udGFpbnNNb3ZIaW50KCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2Nh
bCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29udmVydExhc3RPU1JFeGl0VAogICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNoaWxkMSgp
LT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlKTsKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVChz
ZXRMb2NhbC0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSk7Ci0gICAgQVNTRVJUKHNldExvY2Fs
LT5vcCgpID09IFNldExvY2FsKTsKKyAgICBBU1NFUlQoc2V0TG9jYWwtPmNvbnRhaW5zTW92SGlu
dCgpKTsKICAgICBBU1NFUlQoc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbik7CiAKICAgICBOb2RlKiBuZXh0Tm9kZSA9IG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrICsgMSk7CkBAIC0xNTY3LDcgKzE1
NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgIEFTU0VSVChub2RlLT5jb250YWluc01vdkhp
bnQoKSAmJiBub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOwogICAgIAogICAgIG1fbGFzdFNldE9w
ZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogCkBAIC0xNjc4LDUwICsxNjc4LDE5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAg
ICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAgICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fY3VycmVudE5vZGUt
PmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZy
YW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeSBy
ZWNvdmVyeTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChh
cmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9
IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBhcmd1bWVu
dFBvc2l0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLm1f
YXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYXJndW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2libGUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVl
SW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50UG9z
aXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRp
b24ucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigp
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNl
KENlbGxJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29s
ZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZh
bHVlU291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgcmVjb3Zlcnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMg
YWxyZWFkeSBiZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBpbnRvIHRoZSBzdGFj
ayBhdCB0aGUgcmlnaHQgcGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMgY29kZSBpc24ndCBzbWFydCBlbm91Z2ggdG8gaGFu
ZGxlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBleGNlcHRpb24g
aXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGJlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KLSNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcblJlY292ZXJ5IGZv
ciBhcmd1bWVudCAlZDogIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5LmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5OwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAgICAg
ICAgIG1fbGFzdFNldE9wZXJhbmQgPSBtX2N1cnJlbnROb2RlLT5sb2NhbCgpOworICAgICAgICAg
ICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwobV9j
dXJyZW50Tm9kZS0+bG9jYWwoKSwgRGF0YUZvcm1hdERlYWQpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1cnJl
bnROb2RlLT5vcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBl
bmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4OCwxMSArMjg4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVk
Z2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgdmFy
aWFibGUtPnByZWRpY3Rpb24oKSwgR2V0TG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIENoZWNrU3RydWN0
dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKGdldExvY2FsLCBDZWxsVXNlKSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PT0gbm9kZSkKQEAgLTMyMCwxNCArMzIwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSks
IGNoaWxkMSk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlCiAgICAgICAgICAg
ICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVj
dXRpbmcgdGhlIGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2Vs
bFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Rm9yd2FyZENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2Up
KTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEwICsx
NDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5v
ZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAg
ICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9
PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJlZkNv
dW50cy5nZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVu
KG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQpAQCAtMTc4LDcg
KzE3OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09
IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFy
Z3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50CisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBlZGdlLT5vcCgpID09IE1vdkhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gTW92SGludEFuZENoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xODcsNiArMTkwLDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG5vZGUsIGVkZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVk
Z2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IFpvbWJpZUhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IE1vdkhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5v
cCgpID09IE1vdkhpbnRBbmRDaGVjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBl
ZGdlLT5vcCgpID09IEZsdXNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjIwLDYg
KzIyNiw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBNb3ZIaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gTW92SGludEFuZENoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJl
dk5vZGUtPm9wKCkgPT0gWm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewpAQCAtMjg3LDYgKzI5NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2Fs
J3MgdGhhdCB3ZSBrbm93IHRvIGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAorICAgICAgICAg
ICAgICAgICAgICAvLyBkb2Vzbid0IHlldCBrbm93IHRvIGJlIGRlYWQuCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUykKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0lu
ZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQp
OwogICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191085</attachid>
            <date>2013-03-01 18:22:22 -0800</date>
            <delta_ts>2013-03-04 23:59:18 -0800</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90756</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw4IEBACiAJCTBGMkM1NTcwMTQ3MzhG
MzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCAqLzsgfTsKIAkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQyIC8qIFVudXNlZFBv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0
RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyRkM3
NzIxNkUxMkY3MTAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi87IH07CisJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAvKiBERkdE
Q0VQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNE
QTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICov
OyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjM0QjE0QjE2RDQzRTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTEwMDMsNiArMTAwNSw4IEBACiAJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1ZhcmlhYmxlRXZlbnQuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1
NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRENFUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR0RDRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyRkM3NzEx
NkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0RDRVBoYXNlLmg7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1Vz
ZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVXNlS2lu
ZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9ERkdVc2VL
aW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTRCMTZENDNFMEMwMDFD
REE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjQ0LDYgKzI2NDgsOCBAQAogCQkJCTBGQkUwRjZD
MTZDMURCMDEwMDgyQzVFOCAvKiBERkdDUFNSZXRocmVhZGluZ1BoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NEQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCAqLywKIAkJCQkwRkZGQzk0
RTE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2UuaCAqLywKKwkJCQkwRjJGQzc3MDE2RTEy
RjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwICovLAorCQkJCTBGMkZDNzcxMTZFMTJGNkYw
MDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovLAogCQkJCTBGRjQyNzYxMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGRjQyNzYyMTU5MUExQzkwMDRDQjlG
RiAvKiBERkdEaXNhc3NlbWJsZXIuaCAqLywKIAkJCQkwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgKi8sCkBAIC0yOTgwLDYgKzI5ODYsNyBAQAogCQkJCUMyRkM5
QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyRkM3NzMxNkUxMkY3NDAwMzhEOTc2IC8qIERGR0RD
RVBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzc0Niw2
ICszNzUzLDcgQEAKIAkJCQkxNDhGMjFBQTEwN0VDNTNBMDA0MkVDMkMgLyogQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4MkQxMDdFQzA1NzAwMTNFN0IyIC8q
IENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYx
OSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyRkM3NzIxNkUxMkY3MTAw
MzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzNEN0FFMTY1QTE0MkQwMEFDQUI3MSAvKiBDbG9zdXJlQ2FsbFN0dWJSb3V0aW5l
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQs
NiArMzE0LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgTW92
SGludEFuZENoZWNrOiB7CisgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuIEEg
TW92SGludCBpcyBlZmZlY3RpdmVseSBhIHByb21pc2UgdGhhdCB0aGUgU2V0TG9jYWwKKyAgICAg
ICAgLy8gd2FzIGRlYWQuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgICAgICAKICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KQEAgLTE2MjgsMTggKzE2NDAsNiBAQCBpbmxpbmUgYm9v
bCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgLy8gSWYgdGhlIEdl
dExvY2FsIGlzIGRlYWQsIHRoZW4gd2UgdHJhbnNmZXIgZnJvbSBoZWFkIHRvIHRhaWwuCi0gICAg
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGdldCByaWQgb2YgdGhpcyBjYXNlIGFmdGVyIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDkzODkKLSAgICAgICAgICAgIGlm
ICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBibG9j
ayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgotICAgICAgICAgICAgICAg
IHNvdXJjZSA9IGluVmFyaWFibGU7Ci0jaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgICAgICAgVHJhbnNmZXJpbmcg
Iik7Ci0gICAgICAgICAgICAgICAgc291cmNlLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nRigiIGZyb20gaGVhZCB0byB0YWlsIChkZWFkIEdldExvY2FsIGNh
c2UpLlxuIik7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIC8vIFRoZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9u
YWwgc3BlY3VsYXRpb25zLgogICAgICAgICAgICAgc291cmNlID0gZm9yTm9kZShub2RlKTsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MCw2ICsxNDAsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5hZGQodmFyaWFibGVBY2Nlc3NEYXRhLCBBcmd1bWVudHNBbGlhc2luZ0RhdGEoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFyaWFibGVz
IGFyZSBsaXZlLCB1c2luZyBhIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mCisgICAgICAg
IC8vIGxpdmVuZXNzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0u
Z2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxv
Y2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAgICAgICAgIGNhc2UgRmx1c2g6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIG1faXNMaXZlLmFkZChub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCB2YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJl
CiAgICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFycmF5TGVuZ3RoIGFj
Y2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAogICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9mIENy
ZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVudHMK
QEAgLTE5OCw2ICsyMTgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmICFzb3VyY2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRvdGFsbHkgZGVhZCwgdGhl
biBpZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNMaXZlLmNvbnRh
aW5zKHZhcmlhYmxlQWNjZXNzRGF0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1
bWVudHNSZWdpc3RlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3Vt
ZW50c1JlZ2lzdGVyKSkpIHsKQEAgLTQ2OCw3ICs0OTIsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZl
cmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTQ4OCw3ICs1MTEsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gbm9kZS0+Y2hpbGRyZW4uY2hp
bGQyKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpID0gRWRn
ZSgpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50QnlWYWwpOwpAQCAtNTA0LDEwICs1MjYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlZigpOyAvLyBUaGlzIGlzIGEgbXVzdC1nZW5l
cmF0ZSBub2RlLgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0
aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNTMxLDggKzU1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2Uga25vdyBleGFjdGx5IHdoYXQgdGhpcyB3aWxsIHJldHVybi4gQnV0IG9u
bHkgYWZ0ZXIgd2UgaGF2ZSBjaGVja2VkCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgbm9i
b2R5IGhhcyBlc2NhcGVkIG91ciBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNO
b3RDcmVhdGVkLCBjb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLCBqc051bWJlcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKSAtIDEpKTsKQEAgLTU4MSwxMCArNjAwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVP
cmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJlKGluZGV4KSkpOwogCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
Q2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250
UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbik7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKQEAgLTU5
OCw3ICs2MTcsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5k
RGVmYXVsdEZsYWdzKE5vcCk7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmRE
ZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQyKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRSZWZDb3VudCgw
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTYyNiw4ICs2NDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChub2RlLT5zaG91bGRHZW5lcmF0
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNo
aWxkcmVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoUGhhbnRvbUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4ucmVzZXQoKTsKQEAgLTY1MSw2ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQXJndW1lbnRzQWxpYXNpbmdEYXRhLAogICAgICAgICAg
ICAgRGVmYXVsdEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCiAgICAgICAgICAgICBO
dWxsYWJsZUhhc2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFz
aW5nOworICAgIEhhc2hTZXQ8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbV9pc0xpdmU7CiAKICAgICB2
b2lkIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoTm9kZSogbm9kZSkKICAgICB7CkBAIC03ODUsNyAr
ODAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRz
LmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAg
IGlmICghaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lz
dGVyKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihl
ZGdlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNzkzLDcgKzgxMCw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3
ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENT
RSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgogICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21C
YWcoZWRnZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTQ0NDg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFZlY3RvcjxOb2RlKiwg
OD4gewogICAgIH0KICAgICAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0
ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBh
cmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBv
c3QgTm9kZSogYXBwZW5kTm9kZShHcmFwaCYsIFJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUs
IFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpOworICAgIHRlbXBs
YXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUoR3JhcGgmLCBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKICAgICBERkdfVkFS
SUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BUFBFTkRfTk9ERSkKICN1bmRlZiBE
RkdfREVGSU5FX0FQUEVORF9OT0RFCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDkgKzM0LDkgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2RlZmluZSBERkdfREVGSU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBv
c3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3Mp
IFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSog
QmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFwaCYgZ3JhcGgsIFJlZkNoaWxkcmVuTW9kZSByZWZD
aGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFy
YW1zIHRlbXBsYXRlUG9zdCBpbmxpbmUgTm9kZSogQmFzaWNCbG9jazo6YXBwZW5kTm9kZShHcmFw
aCYgZ3JhcGgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFt
cykgXAogICAgIHsgXAotICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHJlZkNo
aWxkcmVuTW9kZSwgcmVmTm9kZU1vZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3Mp
OyBcCisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGdyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFt
c0NvbW1hIHZhbHVlQXJncyk7IFwKICAgICAgICAgYXBwZW5kKHJlc3VsdCk7IFwKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsgXAogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk4LDc3ICs2OTgsNTYgQEAgcHJpdmF0ZToKICAgICBOb2RlKiBhZGRUb0dyYXBoKE5vZGVU
eXBlIG9wLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMg
PSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAg
ICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAg
ICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiks
IEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3Jp
Z2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAg
ICBBU1NFUlQob3AgIT0gUGhpKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1
bHQpOwotCi0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkK
LSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgRWRnZSBj
aGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpLCBFZGdlIGNoaWxkMyA9IEVkZ2UoKSkKICAgICB7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1
cnJlbnRDb2RlT3JpZ2luKCksIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAg
U3BlY05vbmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0
R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUg
b3AsIE9wSW5mbyBpbmZvLCBOb2RlKiBjaGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2Rl
KiBjaGlsZDMgPSAwKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShjaGlsZDEp
LCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2UoY2hpbGQxKSwgRWRnZShjaGlsZDIpLCBF
ZGdlKGNoaWxkMykpOwogICAgICAgICBpZiAob3AgPT0gUGhpKQogICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZs
YWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxk
cmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFk
ZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2RlKiBj
aGlsZDEgPSAwLCBOb2RlKiBjaGlsZDIgPSAwLCBOb2RlKiBjaGlsZDMgPSAwKQogICAgIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKAotICAgICAgICAgICAgRG9udFJl
ZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwg
RWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgaW5mbzEsIGluZm8yLAorICAgICAgICAgICAgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxk
MiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFn
cyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJl
bihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBOb2Rl
KiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwg
T3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUs
Ci0gICAgICAgICAgICBOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsCisgICAgICAgICAgICBTcGVjTm9uZSwgTm9kZTo6VmFyQXJnLCBvcCwgY3VycmVu
dENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLAogICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdz
KTsKICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmQocmVzdWx0KTsKICAgICAgICAgCiAgICAgICAgIG1fbnVtUGFzc2VkVmFyQXJncyA9IDA7
CiAgICAgICAgIAotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJh
dGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgTm9kZSogaW5zZXJ0UGhpTm9kZShPcEluZm8gaW5m
bywgQmFzaWNCbG9jayogYmxvY2spCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dy
YXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwKLSAgICAgICAgICAgIFBoaSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbyk7Cisg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUGhpLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvKTsKICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3Vs
dCk7Ci0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKQEAgLTEyNTYsMTcgKzEyMzUs
MTkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNh
bGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKLSAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNQcm92
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVChjYWxsTGlua1N0YXR1cy5j
YW5PcHRpbWl6ZSgpKTsKLSAgICAKICAgICBOb2RlKiB0aGlzQXJndW1lbnQ7CiAgICAgaWYgKGtp
bmQgPT0gQ29kZUZvckNhbGwpCiAgICAgICAgIHRoaXNBcmd1bWVudCA9IGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKTsKICAgICBlbHNlCiAgICAgICAgIHRoaXNBcmd1
bWVudCA9IDA7CiAKKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNQcm92ZWQoKSkgeworICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXQsIHRoaXNBcmd1bWVudCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGlt
aXplKCkpOworICAgIAogICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3Rh
dHVzLmZ1bmN0aW9uKCkpCiAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZv
KGZ1bmN0aW9uKSwgY2FsbFRhcmdldCwgdGhpc0FyZ3VtZW50KTsKICAgICBlbHNlIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsNiArNDUsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgcnVuKCkK
ICAgICB7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBUaHJlYWRlZENQUyk7Cisg
ICAgICAgIEFTU0VSVChtX2dyYXBoLm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZp
ZWQpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXZlcnl0aGlu
Z0lzTGl2ZSk7CisgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKICAgICAgICAgbV9jb3VudCA9IDA7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDggKzE0MCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZXR0aXNvbkJsb2NrKGJsb2NrSW5k
ZXgsIG5vdFRha2VuQmxvY2tJbmRleCwgYm91bmRhcnlDb2RlT3JpZ2luKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm91bmRhcnlDb2RlT3JpZ2luLCBPcEluZm8odGFrZW5CbG9ja0luZGV4KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1w
LCBib3VuZGFyeUNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh0YWtlbkJsb2NrSW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE3MSw4ICsxNzEsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJyYW5jaC0+cmVmQ291bnQoKSA9
PSAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaC0+Y29kZU9yaWdpbiwgT3BJ
bmZvKHRhcmdldEJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJyYW5jaC0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRhcmdldEJsb2NrSW5kZXgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyQ2hhbmdlZCA9
IG91dGVyQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTI3Miw3ICsyNzIsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWxpdmVuZXNzTm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYmxvY2stPmFwcGVu
ZE5vZGUoCi0gICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2Rl
LCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgbV9ncmFw
aCwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwgCiAgICAgICAgICAgICBPcElu
Zm8obGl2ZW5lc3NOb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAgIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDUFNSZXRocmVhZGlu
Z1BoYXNlLmNwcAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbm9uaWNhbGl6ZUxvY2Fsc0luQmxvY2tzKCk7CiAgICAg
ICAgIHByb3BhZ2F0ZVBoaXM8TG9jYWxPcGVyYW5kPigpOwogICAgICAgICBwcm9wYWdhdGVQaGlz
PEFyZ3VtZW50T3BlcmFuZD4oKTsKLSAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOwog
ICAgICAgICAKICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBUaHJlYWRlZENQUzsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xMjQsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBBTFdB
WVNfSU5MSU5FIE5vZGUqIGFkZFBoaVNpbGVudGx5KEJhc2ljQmxvY2sqIGJsb2NrLCBjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKQogICAg
IHsKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJs
ZSkpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBo
aSwgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFw
cGVuZChyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwOCw3ICsxMDA4LDYgQEAgcHJpdmF0ZToKICNpZiBERkdfRU5BQkxFKERFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICBFbGltaW5hdGluZyBl
ZGdlIEAiLCBtX2N1cnJlbnROb2RlLT5pbmRleCgpLCAiIC0+IEAiLCBlZGdlLT5pbmRleCgpKTsK
ICNlbmRpZgotICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihlZGdlKTsKICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CiAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC0xMDI0LDcgKzEwMjMsNiBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBtX2N1cnJlbnROb2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
Ci0gICAgICAgIG1fY3VycmVudE5vZGUtPnNldFJlZkNvdW50KDEpOwogICAgICAgICBlbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG1fY3VycmVudE5vZGUpOwogICAgICAgICAKICAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSB3aWxsIGVsaW1pbmF0ZSBhbGwgcmVmZXJlbmNlcyB0
byB0aGlzIG5vZGUuCkBAIC0xMTU0LDEwICsxMTUyLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gSWYgd2UgcmVwbGFjZSBhIEdldExvY2FsIHdpdGggYSBHZXRMb2Nh
bFVubGlua2VkLCB0aGVuIHR1cm4gdGhlIEdldExvY2FsVW5saW5rZWQKICAgICAgICAgICAgIC8v
IGludG8gYSBHZXRMb2NhbC4KLSAgICAgICAgICAgIGlmIChyZWxldmFudExvY2FsT3AtPm9wKCkg
PT0gR2V0TG9jYWxVbmxpbmtlZCkgeworICAgICAgICAgICAgaWYgKHJlbGV2YW50TG9jYWxPcC0+
b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKQogICAgICAgICAgICAgICAgIHJlbGV2YW50TG9jYWxP
cC0+Y29udmVydFRvR2V0TG9jYWwodmFyaWFibGVBY2Nlc3NEYXRhLCBwaGkpOwotICAgICAgICAg
ICAgICAgIG1fZ3JhcGgucmVmKHBoaSk7Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTAsNyArMTIwNiw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoZGF0YU5vZGUtPmhhc1Jlc3VsdCgpKTsKICAg
ICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShub2RlKTsKICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZShkYXRhTm9kZSk7Ci0gICAgICAgICAgICBt
X2dyYXBoLnJlZihkYXRhTm9kZSk7CiAgICAgICAgICAgICBtX2dyYXBoLmRldGhyZWFkKCk7CiAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDYgKzkxLDIxIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBV
bmkKICAgICB9CiB9CiAKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBSZWZD
b3VudFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEV2ZXJ5
dGhpbmdJc0xpdmU6CisgICAgICAgIG91dC5wcmludCgiRXZlcnl0aGluZ0lzTGl2ZSIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEV4YWN0UmVmQ291bnQ6CisgICAgICAgIG91dC5wcmludCgi
RXhhY3RSZWZDb3VudCIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBQcm9vZlN0YXR1cyBzdGF0dXMp
CiB7CiAgICAgc3dpdGNoIChzdGF0dXMpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDYgKzIxNywxNSBAQCBlbnVtIFVu
aWZpY2F0aW9uU3RhdGUgewogICAgIEdsb2JhbGx5VW5pZmllZAogfTsKIAorLy8gRGVzY3JpYmVz
IGhvdyByZWZlcmVuY2UgY291bnRzIGluIHRoZSBncmFwaCBiZWhhdmUuCitlbnVtIFJlZkNvdW50
U3RhdGUgeworICAgIC8vIEV2ZXJ5dGhpbmcgaGFzIHJlZkNvdW50KCkgPT0gMS4KKyAgICBFdmVy
eXRoaW5nSXNMaXZlLAorCisgICAgLy8gU2V0IGFmdGVyIERDRSBoYXMgcnVuLgorICAgIEV4YWN0
UmVmQ291bnQKK307CisKIGVudW0gT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSB7IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbiwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIH07CiAKIGVudW0gU3Bl
Y3VsYXRpb25EaXJlY3Rpb24geyBGb3J3YXJkU3BlY3VsYXRpb24sIEJhY2t3YXJkU3BlY3VsYXRp
b24gfTsKQEAgLTI1MCw2ICsyNTksNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlKTsK
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpHcmFwaEZvcm0pOwog
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlVuaWZpY2F0aW9uU3Rh
dGUpOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlJlZkNvdW50
U3RhdGUpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OlByb29m
U3RhdHVzKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24g
MTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pKS5tX3R5cGUpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAgICAgICBu
b2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDQsNyArMTAzLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0
ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24g
Y2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAg
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKQEAgLTEyNiw3ICsxMjQsNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeTogewogICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+YXJyYXlNb2RlKCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbm9kZSwgbV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKSkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE4NiwyNSArMTgzLDIyIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHN0
cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgewogICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmln
aW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2hpbGQtPnJlZigpOwogICAgICAgICAgICAgICAg
IGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNo
aWxkRWRnZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOwpAQCAtMjUyLDEyICsyNDYsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNv
ZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0
dXJlKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwg
Y2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKQEAgLTI4NywxNyAr
MjgwLDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFn
ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQo
c3RhdHVzLm9mZnNldCgpKSkgewotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVmKCk7IC8v
IFRoZSBjaGlsZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3BlcnR5IGluZGV4LCBzbyByZWYgaXQg
dG8gcmVmbGVjdCB0aGUgZG91YmxlIHVzZS4KKyAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVP
ZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9y
YWdlID0gY2hpbGRFZGdlOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLmlzU2lt
cGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJl
ZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBj
aGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1
cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdl
KG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVP
cmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOwogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOwpAQCAtMzA1LDE3ICsyOTcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgR2V0QnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4s
IGNoaWxkRWRnZSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFB1
dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTM0OCw2ICszMzgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFkamFj
ZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAvLyBH
ZXRMb2NhbHMgd2l0aG91dCBhIFBoaSBjaGlsZCBhcmUgZ3VhcmFudGVlZCBkZWFkLiBXZSBkb24n
dCBoYXZlIHRvCisgICAgICAgICAgICAgICAgLy8gZG8gYW55dGhpbmcgYWJvdXQgdGhlbS4KKyAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X2Zvcm0gIT0gTG9hZFN0b3JlKSB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOwpAQCAtMzYwLDggKzM1
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogcGhhbnRvbSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBoaSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBo
YW50b21Mb2NhbCwgIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHZhcmlhYmxlKSwgRWRnZShwaGkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAg
LTM3Nyw3ICszNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hp
bGRyZW4pOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20s
IGNvZGVPcmlnaW4sIGNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTQwNiwxOCArNDAxLDE3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CiAgICAgICAgIE5vZGUq
IHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIHNwZWN1bGF0aW9uRnJv
bVZhbHVlKGNlbGwpLAotICAgICAgICAgICAgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9w
SW5mbyhjZWxsKSk7CisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRJc1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LAotICAgICAgICAg
ICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0Nv
bnN0YW50LCBDZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAg
ICAgICAgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxV
c2UpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmln
aW4sCiAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3Ry
dWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKICAgICB9CiAgICAgCkBA
IC00NTQsOCArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Rm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJP
cGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
RENFUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIERDRVBoYXNlKEdyYXBoJiBn
cmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgImRlYWQgY29kZSBlbGltaW5hdGlvbiIpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICAvLyBGaXJz
dCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQorICAgICAgICAgICAg
ICAgIGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07
KQorICAgICAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7
CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOgorICAgICAg
ICAvLyAtIE5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuCisgICAgICAgIC8vIC0gTm9kZXMg
dGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdHlwZSBjaGVja3MuCisgICAgICAgIC8vIC0gTm9kZXMg
dGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gU2V0TG9jYWxzLgorICAgICAgICAvLyBTZXQgdGhlaXIg
cmVmIGNvdW50cyB0byAxIGFuZCBwdXQgdGhlbSBvbiB0aGUgd29ya2xpc3QuCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBmaW5kVHlw
ZUNoZWNrUm9vdCk7CisgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVN
dXN0R2VuZXJhdGUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgbV93b3Jr
bGlzdC5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHdoaWxlICghbV93b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBtX3dvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgICAgIG1fd29ya2xpc3QucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBjb3VudEVkZ2Up
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9j
ay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLmlzUHJvdmVkKCkgfHwgbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBwb3NzaWJpbGl0
eSB0aGF0IFVJbnQzMlRvTnVtYmVyIGlzIGRlYWQgYnV0IGl0cworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2hpbGQgaXNuJ3Q7IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNo
aWxkLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxk
R2VuZXJhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkMSgpID0gbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoWm9tYmll
SGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBFZGdl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhNb3ZIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZs
YWdzKE1vdkhpbnRBbmRDaGVjayk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNv
dW50KDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAg
ICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICAvLyBM
ZWF2ZSB0aGVtIGFzIG5vdCBzaG91bGRHZW5lcmF0ZS4KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGls
ZHJlbihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fcmVmQ291bnRTdGF0
ZSA9IEV4YWN0UmVmQ291bnQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBmaW5kVHlwZUNoZWNrUm9vdChOb2RlKiwgRWRnZSBlZGdl
KQorICAgIHsKKyAgICAgICAgLy8gV2UgbWF5IGhhdmUgYW4gInVucHJvdmVkIiB1bnR5cGVkIHVz
ZSBmb3IgY29kZSB0aGF0IGlzIHVucmVhY2hhYmxlLiBUaGUgQ0ZBCisgICAgICAgIC8vIHdpbGwg
anVzdCBub3QgaGF2ZSBnb3R0ZW4gYXJvdW5kIHRvIGl0LgorICAgICAgICBpZiAoZWRnZS5pc1By
b3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmICghZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgbV93b3Jr
bGlzdC5hcHBlbmQoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvdW50RWRn
ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgY291bnQgZWRnZXMg
dGhhdCBhcmUgYWxyZWFkeSBjb3VudGVkIGZvciB0aGVpciB0eXBlIGNoZWNrcy4KKyAgICAgICAg
aWYgKCEoZWRnZS5pc1Byb3ZlZCgpIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPnBvc3RmaXhS
ZWYoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV93b3JrbGlzdC5hcHBlbmQoZWRn
ZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4oTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpIHsKKyAgICAgICAgICAgIEVkZ2UgZWRn
ZSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkKGkpOworICAgICAgICAgICAgaWYgKCFlZGdlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGVkZ2UubmVlZHNDaGVjaygp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
cmVtb3ZlRWRnZUZyb21CYWcoaS0tKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBWZWN0
b3I8Tm9kZSosIDEyOD4gbV93b3JrbGlzdDsKK307CisKK2Jvb2wgcGVyZm9ybURDRShHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBEQ0UgUGhh
c2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8RENFUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdEQ0VQaGFzZV9oCisjZGVmaW5lIERGR0RDRVBoYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworLy8gR2xvYmFsIGRlYWQgY29kZSBlbGltaW5hdGlvbi4gRWxpbWluYXRlcyBhbnkg
bm9kZSB0aGF0IGlzIG5vdCBOb2RlTXVzdEdlbmVyYXRlLAorLy8gbm90IHVzZWQgYnkgYW55IG90
aGVyIGxpdmUgbm9kZSwgYW5kIG5vdCBzdWJqZWN0IHRvIGFueSB0eXBlIGNoZWNrLgorCitib29s
IHBlcmZvcm1EQ0UoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdEQ0VQaGFzZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE0NDQ4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkRGR0NQU1JldGhyZWFkaW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdDU0VQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2UuaCIKICNpbmNsdWRlICJERkdGaXh1cFBoYXNl
LmgiCiAjaW5jbHVkZSAiREZHSklUQ29tcGlsZXIuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuaCIKQEAgLTE0NywxMSArMTQ4LDEzIEBAIGlubGluZSBib29sIGNvbXBp
bGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgfQogICAgIAorICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKKyAgICAg
ICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRpb24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0
ZXJhdGlvbnMuXG4iLCBjbnQpOworCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50
Q29udmVyZ2VkOwogICAgIHBlcmZvcm1DU0UoZGZnKTsKICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRp
bmcoZGZnKTsgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBiZSBhIG5vLW9wIHNpbmNlIENTRSByYXJl
bHkgZGV0aHJlYWRzIHRoZSBncmFwaC4KLSAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkp
Ci0gICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBp
biAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKKyAgICBwZXJmb3JtRENFKGRmZyk7CiAgICAgcGVy
Zm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsKIAogICAgIEdyYXBoRHVtcE1vZGUg
bW9kZUZvckZpbmFsVmFsaWRhdGUgPSBEdW1wR3JhcGg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Nyw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5l
ZWQgdG8gZG8gcmVmJ2luZyBvbiB0aGUgY2hpbGRyZW4gYmVjYXVzZSB3ZSdyZSBzdGVhbGluZyB0
aGVtIGZyb20KICAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2luYWwgZGl2aXNpb24uCiAgICAg
ICAgICAgICAgICAgTm9kZSogbmV3RGl2aXNpb24gPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBS
ZWZOb2RlLCBTcGVjRG91YmxlLCAqbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjRG91YmxlLCAqbm9kZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3AoRG91YmxlQXNJbnQzMik7CiAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uaW5pdGlhbGl6ZShFZGdlKG5ld0RpdmlzaW9uLCBLbm93bk51bWJlclVzZSksIEVk
Z2UoKSwgRWRnZSgpKTsKQEAgLTUxOCw4ICs1MTgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChvaykgewogICAgICAgICAgICAgICAgICAgICBFZGdlIG5ld0NoaWxkRWRnZSA9IGxv
Z2ljYWxOb3QtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGRFZGdl
LT5oYXNCb29sZWFuUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
cmVmKG5ld0NoaWxkRWRnZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KGxvZ2ljYWxOb3QpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0
Q2hpbGQxKG5ld0NoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdG9CZVRha2VuID0gbm9kZS0+bm90VGFrZW5CbG9j
a0luZGV4KCk7CkBAIC01NTYsOCArNTU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgLy8gd291bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBieSBub3csIGJ1dCBpbnNlcnQgYSBmb3Jj
ZWQgZXhpdCBqdXN0IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGJlIHNhZmUuCiAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVP
cmlnaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25l
LCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5H
X1RZUEVTOgpAQCAtNjM4LDggKzYzNSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24oKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFycmF5UHJvZmls
ZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwgbm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTY1MCwxMCArNjQ3LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIEFTU0VSVChub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSk7CiAg
ICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCk7CiAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUpOwogICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKGFycmF5TW9kZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIE5vZGUqIHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwg
bm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0
b3JhZ2UsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgTm9kZSogc3RvcmFn
ZSA9IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSk7CiAgICAgICAgICAgICBpZiAoIXN0b3Jh
Z2UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTczMCw2ICs3MjYs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgICAg
IGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBMYXN0Tm9kZVR5
cGU6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC04MzcsNyArODM2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAg
ICAgfQogICAgIAotICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFycmF5TW9kZSwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSogaW5kZXgsIGJvb2wgKCpzdG9y
YWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSwgYm9vbCBzaG91bGRH
ZW5lcmF0ZSA9IHRydWUpCisgICAgTm9kZSogY2hlY2tBcnJheShBcnJheU1vZGUgYXJyYXlNb2Rl
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBOb2RlKiBpbmRleCwgYm9vbCAo
KnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5DU0VTdG9yYWdlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGFycmF5TW9kZS5pc1NwZWNpZmljKCkpOwogICAgICAgICAKQEAgLTg1
OCwyMSArODU3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCBBcnJheWlmeVRvU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRnZSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBBcnJheWlmeSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBBcnJheWlmeSwgY29kZU9yaWdpbiwKICAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXks
IENlbGxVc2UpLCBpbmRleEVkZ2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBFZGdlKGFycmF5LCBDZWxsVXNlKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9u
dFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJyYXksIGNvZGVPcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFy
cmF5LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg4MiwxNyArODgx
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAoYXJyYXlNb2RlLnVzZXNCdXR0
ZXJmbHkoKSkgewogICAgICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssCi0gICAgICAgICAgICAgICAgc2hvdWxk
R2VuZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKLSAgICAgICAgICAgICAg
ICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAgICAgICAgICAg
ICBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBLbm93bkNl
bGxVc2UpKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssCi0gICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/
IFJlZkNoaWxkcmVuIDogRG9udFJlZkNoaWxkcmVuLAotICAgICAgICAgICAgc2hvdWxkR2VuZXJh
dGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAgICAgICBTcGVjTm9uZSwgR2V0SW5k
ZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2Vs
bFVzZSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGJsZXNzQXJyYXlPcGVyYXRpb24oRWRnZSBi
YXNlLCBFZGdlIGluZGV4LCBFZGdlJiBzdG9yYWdlQ2hpbGQpCkBAIC05MDIsOCArODk2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAg
ICAgIG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC05ODIsNyArOTc1LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRWRn
ZSBvbGRFZGdlID0gZWRnZTsKICAgICAgICAgRWRnZSBuZXdFZGdlID0gbm9kZS0+Y2hpbGQxKCk7
CiAgICAgICAgIAogICAgICAgICBpZiAobmV3RWRnZS51c2VLaW5kKCkgIT0gSW50MzJVc2UpIHsK
QEAgLTk5Miw4ICs5ODQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChu
ZXdFZGdlLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpOwogICAgICAgICAKLSAgICAgICAgbV9n
cmFwaC5yZWYobmV3RWRnZSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYob2xkRWRnZSk7CisgICAg
ICAgIC8vIENvbXBsZXRlbHkga2lsbCB0aGUgVmFsdWVUb0ludDMyLiBXZSB3b3VsZG4ndCBoYXZl
IHRvIGRvIGNyYXp5IHRoaW5ncyBsaWtlIHRoaXMKKyAgICAgICAgLy8gaWYgaXQgd2VyZW4ndCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMTIzOC4KKyAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKKyAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSBFZGdlKCk7CiAgICAgICAgIAogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CkBA
IC0xMDE0LDcgKzEwMDgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5qZWN0SW50MzJUb0RvdWJs
ZU5vZGUoRWRnZSYgZWRnZSwgVXNlS2luZCB1c2VLaW5kID0gTnVtYmVyVXNlLCBTcGVjdWxhdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBCYWNrd2FyZFNwZWN1bGF0aW9uKQogICAgIHsKICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsCisg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgCiAgICAgICAgICAgICBkaXJl
Y3Rpb24gPT0gQmFja3dhcmRTcGVjdWxhdGlvbiA/IEludDMyVG9Eb3VibGUgOiBGb3J3YXJkSW50
MzJUb0RvdWJsZSwKICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIEVkZ2Uo
ZWRnZS5ub2RlKCksIE51bWJlclVzZSkpOwogICAgICAgICAKQEAgLTEwMzksOSArMTAzMyw4IEBA
IHByaXZhdGU6CiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0b0ludDMyKHZhbHVlLmFz
TnVtYmVyKCkpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIoKSk7CiAgICAgICAgIGVk
Z2Uuc2V0Tm9kZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY0ludDMyLCBKU0NvbnN0YW50
LAotICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKGNvZGVCbG9j
aygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fZ3JhcGguZGVyZWYo
b2xkTm9kZSk7CisgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0
YW50LCBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKGNvZGVC
bG9jaygpLT5hZGRPckZpbmRDb25zdGFudCh2YWx1ZSkpKSk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgdHJ1bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlv
bk1vZGUgbW9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBHcmFwaDo6R3JhcGgoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBDCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQp
CiAgICAgLCBtX2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2Fs
bHlVbmlmaWVkKQorICAgICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5dGhpbmdJc0xpdmUpCiB7CiAg
ICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiB9CkBAIC0zMTIsNyArMzEzLDcgQEAgdm9pZCBH
cmFwaDo6ZHVtcEJsb2NrSGVhZGVyKFByaW50U3RyZWFtJgogdm9pZCBHcmFwaDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KQogewogICAgIGRhdGFMb2coIkRGRyBmb3IgIiwgQ29kZUJsb2NrV2l0aEpJ
VFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCksICI6XG4iKTsKLSAgICBkYXRhTG9n
KCIgIEZpeHBvaW50IHN0YXRlOiAiLCBtX2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9y
bSwgIjsgVW5pZmljYXRpb24gc3RhdGU6ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIlxuIik7Cisg
ICAgZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3Jt
OiAiLCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUs
ICI7IFJlZiBjb3VudCBzdGF0ZTogIiwgbV9yZWZDb3VudFN0YXRlLCAiXG4iKTsKICAgICAKICAg
ICBOb2RlKiBsYXN0Tm9kZSA9IDA7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nr
cy5zaXplKCk7ICsrYikgewpAQCAtMzQ2LDE2ICszNDcsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpCiAgICAgfQogfQogCi12b2lkIEdyYXBoOjpyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIHJlZik7Ci19
Ci0KLXZvaWQgR3JhcGg6OmRlcmVmQ2hpbGRyZW4oTm9kZSogb3ApCi17Ci0gICAgREZHX05PREVf
RE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBkZXJlZik7Ci19Ci0KIHZvaWQgR3JhcGg6OmRldGhy
ZWFkKCkKIHsKICAgICBpZiAobV9mb3JtID09IExvYWRTdG9yZSkKQEAgLTM5MCw2NyArMzgxLDYg
QEAgdm9pZCBHcmFwaDo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9jawogICAgIHN1Y2Nlc3Nv
ci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5kZXgpOwogfQogCi12b2lkIEdyYXBoOjpj
b2xsZWN0R2FyYmFnZSgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRG
RyBHYXJiYWdlIENvbGxlY3Rpb24iKTsKLSAgICAKLSAgICAvLyBGaXJzdCByZXNldCB0aGUgY291
bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KLSAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAg
ICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KQotICAgICAg
ICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJlZkNvdW50KDApOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykK
LSAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4XS0+c2V0UmVmQ291bnQoMCk7Ci0gICAg
fQotICAgIAotICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11
c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCi0gICAgLy8gMSBhbmQgcHV0IHRo
ZW0gb24gdGhlIHdvcmtsaXN0LgotICAgIFZlY3RvcjxOb2RlKiwgMTI4PiB3b3JrbGlzdDsKLSAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2tJbmRleCkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNp
emUoKTsgaW5kZXhJbkJsb2NrLS07KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9k
ZU11c3RHZW5lcmF0ZSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBu
b2RlLT5zZXRSZWZDb3VudCgxKTsKLSAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBOb2RlKiBub2RlID0gd29ya2xpc3QubGFzdCgpOwotICAgICAgICB3b3JrbGlz
dC5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsg
Ly8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgot
ICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGNoaWxkSWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAg
ICAgICAgIGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRyZW4o
KTsKLSAgICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFt
X3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgTm9kZSogY2hpbGROb2RlID0gbV92YXJBcmdDaGlsZHJlbltjaGls
ZElkeF0ubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUtPnBvc3RmaXhSZWYo
KSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgd29ya2xp
c3QuYXBwZW5kKGNoaWxkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
bm9kZS0+Y2hpbGQxKCkpIHsKLSAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnBvc3Rm
aXhSZWYoKSkKLSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSkgewotICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAg
ICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQzKCktPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChub2RlLT5jaGlsZDMoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVh
Y2hhYmlsaXR5KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTQ0NDg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw4MyArOTIsMzQgQEAgcHVibGljOgogICAgIEdyYXBoKEpTR2xvYmFsRGF0YSYsIENvZGVCbG9j
ayosIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5HcmFwaCgpOwogICAgIAotICAgIC8vIE1hcmsg
YSBub2RlIGFzIGJlaW5nIHJlZmVyZW5jZWQuCi0gICAgTm9kZSogcmVmKE5vZGUqIG5vZGUpCisg
ICAgdm9pZCBjaGFuZ2VDaGlsZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlKQogICAgIHsKLSAg
ICAgICAgLy8gSWYgdGhlIHZhbHVlIChiZWZvcmUgaW5jcmVtZW50aW5nKSB3YXMgYXQgcmVmQ291
bnQgemVybyB0aGVuIHdlIG5lZWQgdG8gcmVmIGl0cyBjaGlsZHJlbi4KLSAgICAgICAgaWYgKCFu
b2RlLT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICByZWZDaGlsZHJlbihub2RlKTsKLSAgICAg
ICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotICAgIEVkZ2UgcmVmKEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIHJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBlZGdlOwotICAgIH0KLSAg
ICBFZGdlIHJlZihOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZihl
ZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkZXJlZihOb2RlKiBub2RlKQotICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKLSAgICAg
ICAgICAgIGR1bXAoKTsKLSNlbmRpZgotICAgICAgICBpZiAobm9kZS0+cG9zdGZpeERlcmVmKCkg
PT0gMSkKLSAgICAgICAgICAgIGRlcmVmQ2hpbGRyZW4obm9kZSk7Ci0gICAgfQotICAgIHZvaWQg
ZGVyZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwotICAg
IH0KLSAgICB2b2lkIGRlcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBkZXJl
ZihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2Vz
IGZyb20gMCB0byAxLCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2Yg
aXRzIGNoaWxkcmVuLCBhbmQgdmljZSB2ZXJzYS4KLSAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGUq
KTsKLSAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9kZSopOwotCi0gICAgdm9pZCBjaGFuZ2VDaGls
ZChFZGdlJiBlZGdlLCBOb2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCi0gICAg
ewotICAgICAgICBpZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3Tm9kZSk7Ci0g
ICAgICAgICAgICBkZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgICAgIH0KICAgICAgICAgZWRnZS5z
ZXROb2RlKG5ld05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYg
ZWRnZSwgRWRnZSBuZXdFZGdlLCBib29sIGNoYW5nZVJlZiA9IHRydWUpCisgICAgdm9pZCBjaGFu
Z2VFZGdlKEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSkKICAgICB7Ci0gICAgICAgIGlmIChjaGFu
Z2VSZWYpIHsKLSAgICAgICAgICAgIHJlZihuZXdFZGdlKTsKLSAgICAgICAgICAgIGRlcmVmKGVk
Z2UpOwotICAgICAgICB9CiAgICAgICAgIGVkZ2UgPSBuZXdFZGdlOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5l
d05vZGUsIGJvb2wgY2hhbmdlUmVmKQorICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRn
ZSwgTm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSkKICAgICB7CiAgICAgICAgIGlmIChlZGdl
Lm5vZGUoKSAhPSBvbGROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjaGFuZ2VD
aGlsZChlZGdlLCBuZXdOb2RlLCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VDaGlsZChlZGdl
LCBuZXdOb2RlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBl
ZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9p
ZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBFZGdlIG9sZEVkZ2UsIEVkZ2UgbmV3RWRnZSkK
ICAgICB7CiAgICAgICAgIGlmIChlZGdlICE9IG9sZEVkZ2UpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSwgY2hhbmdlUmVmKTsKKyAgICAgICAg
Y2hhbmdlRWRnZShlZGdlLCBuZXdFZGdlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjbGVhckFu
ZERlcmVmQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAoIW5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgZGVyZWYobm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKTsKICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uc2V0Q2hpbGQoaW5kZXgsIEVkZ2UoKSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXJB
bmREZXJlZkNoaWxkMShOb2RlKiBub2RlKSB7IGNsZWFyQW5kRGVyZWZDaGlsZChub2RlLCAwKTsg
fQpAQCAtMTc3LDE4ICsxMjgsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgcGVyZm9ybVN1
YnN0aXR1dGlvbihOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgYm9vbCBzaG91bGRHZW5lcmF0
ZSA9IG5vZGUtPnNob3VsZEdlbmVyYXRlKCk7CiAgICAgICAgIGlmIChub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBu
b2RlLT5maXJzdENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+
bnVtQ2hpbGRyZW4oKTsgY2hpbGRJZHgrKykKLSAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3Rp
dHV0aW9uRm9yRWRnZShtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgc2hvdWxkR2VuZXJhdGUp
OworICAgICAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hp
bGRyZW5bY2hpbGRJZHhdKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBlcmZvcm1T
dWJzdGl0dXRpb25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAg
ICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSwgc2hvdWxk
R2VuZXJhdGUpOwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+
Y2hpbGQzKCksIHNob3VsZEdlbmVyYXRlKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRp
b25Gb3JFZGdlKG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2
b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJlZikK
KyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKEVkZ2UmIGNoaWxkKQogICAgIHsK
ICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KICAg
ICAgICAgaWYgKCFjaGlsZCkKQEAgLTIwNCwyMiArMTU0LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
Ly8gVGhlcmUgaXMgZGVmaW5pdGVseSBhIHJlcGxhY2VtZW50LiBBc3NlcnQgdGhhdCB0aGUgcmVw
bGFjZW1lbnQgZG9lcyBub3QKICAgICAgICAgLy8gaGF2ZSBhIHJlcGxhY2VtZW50LgogICAgICAg
ICBBU1NFUlQoIWNoaWxkLT5yZXBsYWNlbWVudCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWRk
UmVmKQotICAgICAgICAgICAgcmVmKGNoaWxkKTsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19E
RUZJTkVfQUREX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFs
dWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJl
IHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoUmVmQ2hpbGRyZW5Nb2RlIHJl
ZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQ
YXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGFkZE5vZGUoU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCiAgICAgICAgIE5vZGUqIG5vZGUg
PSBuZXcgKG1fYWxsb2NhdG9yKSBOb2RlKHZhbHVlQXJncyk7IFwKICAgICAgICAgbm9kZS0+cHJl
ZGljdCh0eXBlKTsgXAotICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICAgICAgICAgIG5vZGUtPnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZOb2RlTW9k
ZSA9PSBSZWZOb2RlKSBcCi0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAo
cmVmQ2hpbGRyZW5Nb2RlID09IFJlZkNoaWxkcmVuKSBcCi0gICAgICAgICAgICByZWZDaGlsZHJl
bihub2RlKTsgXAogICAgICAgICByZXR1cm4gbm9kZTsgXAogICAgIH0KICAgICBERkdfVkFSSUFE
SUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9BRERfTk9ERSkKQEAgLTIyNywxMiArMTY4
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIC8vIENhbGwg
dGhpcyBpZiB5b3UndmUgbW9kaWZpZWQgdGhlIHJlZmVyZW5jZSBjb3VudHMgb2Ygbm9kZXMgdGhh
dCBkZWFsIHdpdGgKLSAgICAvLyBsb2NhbCB2YXJpYWJsZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2UgbG9jYWwgdmFyaWFibGUgcmVmZXJlbmNlcyBjYW4gZm9ybQotICAgIC8vIGN5Y2xlcywg
YW5kIGhlbmNlIHJlZmVyZW5jZSBjb3VudGluZyBpcyBub3QgZW5vdWdoLiBUaGlzIHdpbGwgcmVz
ZXQgdGhlCi0gICAgLy8gcmVmZXJlbmNlIGNvdW50cyBhY2NvcmRpbmcgdG8gcmVhY2hhYmlsaXR5
LgotICAgIHZvaWQgY29sbGVjdEdhcmJhZ2UoKTsKLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0Nv
bnN0YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCkBAIC02NjksMTkgKzYwNCwxOSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyAr
K2NoaWxkSWR4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIW1fdmFyQXJnQ2hpbGRyZW5b
Y2hpbGRJZHhdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobV92YXJB
cmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChtX3ZhckFy
Z0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBu
ZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5k
U3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhp
bmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIGNvbXBh
cmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcpOwog
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBv
bGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAg
Y29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGlu
Zyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC03NTUsNiArNjkwLDcgQEAgcHVibGljOgog
ICAgIE9wdGltaXphdGlvbkZpeHBvaW50U3RhdGUgbV9maXhwb2ludFN0YXRlOwogICAgIEdyYXBo
Rm9ybSBtX2Zvcm07CiAgICAgVW5pZmljYXRpb25TdGF0ZSBtX3VuaWZpY2F0aW9uU3RhdGU7Cisg
ICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9j
a0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCShyZXZpc2lvbiAxNDQ0
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Miw5ICs3Miw5IEBAIHB1YmxpYzoKICAgICB9CiAKICNkZWZpbmUgREZH
X0RFRklORV9JTlNFUlRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxhdGVQb3N0LCB0eXBlUGFyYW1z
LCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVBcmdzKSBcCi0gICAgdGVtcGxh
dGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5zZXJ0Tm9kZShzaXplX3QgaW5k
ZXgsIFJlZkNoaWxkcmVuTW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVN
b2RlLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwK
KyAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBpbnNlcnROb2Rl
KHNpemVfdCBpbmRleCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
UGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1fZ3JhcGgu
YWRkTm9kZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29t
bWEgdmFsdWVBcmdzKSk7IFwKKyAgICAgICAgcmV0dXJuIGluc2VydChpbmRleCwgbV9ncmFwaC5h
ZGROb2RlKHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAogICAgIH0KICAgICBE
RkdfVkFSSUFESUNfVEVNUExBVEVfRlVOQ1RJT04oREZHX0RFRklORV9JTlNFUlRfTk9ERSkKICN1
bmRlZiBERkdfREVGSU5FX0lOU0VSVF9OT0RFCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBjaGlsZHJlbihjaGls
ZHJlbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZh
dWx0RmxhZ3Mob3ApOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
OiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlz
dDo6Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisg
ICAgICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkK
ICAgICB7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTExNCw3ICsxMTQs
NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAg
ICAgICAsIGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hp
bGQzKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
Ci0gICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAg
ICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05v
bmUpCiAgICAgewpAQCAtMTI3LDcgKzEyNyw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBj
b2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6
Rml4ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAg
ICAgICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAg
ICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQpAQCAtMTQxLDcgKzE0MSw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRy
ZW4oQWRqYWNlbmN5TGlzdDo6VmFyaWFibGUsIGZpcnN0Q2hpbGQsIG51bUNoaWxkcmVuKQogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAg
ICwgbV9yZWZDb3VudCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVk
PihpbW0yLm1fdmFsdWUpKQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTI3
Miw4ICsyNzIsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudCh1
bnNpZ25lZCBjb25zdGFudE51bWJlcikKICAgICB7CiAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50
OwotICAgICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAgICBt
X3JlZkNvdW50LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8gPSBj
b25zdGFudE51bWJlcjsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTI4Miw4ICsyODAs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgdm9pZCBjb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKFZp
cnR1YWxSZWdpc3RlciBsb2NhbCkKICAgICB7CiAgICAgICAgIG1fb3AgPSBHZXRMb2NhbFVubGlu
a2VkOwotICAgICAgICBpZiAobV9mbGFncyAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAgICAg
ICBtX3JlZkNvdW50LS07CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgbV9vcEluZm8g
PSBsb2NhbDsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKQEAgLTM4NiwxMSArMzgyLDI3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2spLmlzQm9vbGVhbigpOwogICAgIH0KICAgICAKKyAgICBib29sIGNv
bnRhaW5zTW92SGludCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhp
bnRBbmRDaGVjazoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBN
b3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKICAgICAgICAgY2FzZSBQ
aGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC05
NTIsNiArOTY0LDkgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAg
ICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91Ymxl
OgogICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKQEAgLTk3MywxMiArOTg4LDYgQEAgc3RydWN0
IE5vZGUgewogICAgICAgICByZXR1cm4gbV9yZWZDb3VudDsKICAgICB9CiAKLSAgICBOb2RlKiBy
ZWYoKQotICAgIHsKLSAgICAgICAgbV9yZWZDb3VudCsrOwotICAgICAgICByZXR1cm4gdGhpczsK
LSAgICB9Ci0KICAgICB1bnNpZ25lZCBwb3N0Zml4UmVmKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX3JlZkNvdW50Kys7CkBAIC05OTQsMTggKzEwMDMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBkZXJlZigp
Ci0gICAgewotICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIC0tbV9yZWZDb3Vu
dDsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgcG9zdGZpeERlcmVmKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3JlZkNvdW50KTsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQtLTsKLSAg
ICB9Ci0gICAgCiAgICAgRWRnZSYgY2hpbGQxKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1f
ZmxhZ3MgJiBOb2RlSGFzVmFyQXJncykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw5IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFu
ZCB0aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhTZXRMb2NhbCwgTm9kZUV4aXRzRm9yd2FyZCkgXAor
ICAgIG1hY3JvKE1vdkhpbnRBbmRDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVFeGl0c0Zv
cndhcmQpIFwKKyAgICBtYWNybyhNb3ZIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBtYWNy
byhab21iaWVIaW50LCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTm9wLCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBt
YWNybyhQaGksIE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZWxldmFudFRvT1NSKSBcCkBAIC03Niw3
ICs3OSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBIaW50IHRo
YXQgaW5saW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5v
ZGUuIEl0J3Mgb25seSAqL1wKICAgICAvKiB1c2VkIGZvciBjb3B5aW5nIE9TUiBkYXRhIGludG8g
aW5saW5lIGZyYW1lIGRhdGEsIHRvIHN1cHBvcnQgcmVpZmljYXRpb24gb2YgKi9cCiAgICAgLyog
Y2FsbCBmcmFtZXMgb2YgaW5saW5lZCBmdW5jdGlvbnMuICovXAotICAgIG1hY3JvKElubGluZVN0
YXJ0LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oSW5saW5lU3RhcnQsIE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9y
IGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFjcm8oQml0QW5kLCBOb2RlUmVzdWx0SW50
MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTQ0NDg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKQogICAgICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKHByZWRpY3Rpb24pOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncyhmbGFncyAm
IH5Ob2RlVXNlZEFzSW50TG9jYWxseSk7CisgICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0
aXZlbHkgdGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhy
b3VnaCBhIGxvb3AsCisgICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxv
dyBsZWFkaW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwK
KyAgICAgICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQg
bWlnaHQgYmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQorICAgICAgICAgICAg
Ly8gcG9pbnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9v
cHMsIGJ1dCByaWdodCBub3cgSSBkb24ndCB0aGluaworICAgICAgICAgICAgLy8gd2UgaGF2ZSBl
dmlkZW5jZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1l
cmdlRmxhZ3MoKGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KSB8IE5vZGVVc2VkQXNOdW1i
ZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjE0
LDEyICsyMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0KG5vZGUtPmNoaWxkMSgp
LT5wcmVkaWN0aW9uKCkpOwogCi0gICAgICAgICAgICAvLyBBc3N1bWUgY29uc2VydmF0aXZlbHkg
dGhhdCBhIFNldExvY2FsIGltcGxpZXMgdGhhdCB0aGUgdmFsdWUgbWF5IGZsb3cgdGhyb3VnaCBh
IGxvb3AsCi0gICAgICAgICAgICAvLyBhbmQgc28gd2Ugd291bGQgaGF2ZSBvdmVyZmxvdyBsZWFk
aW5nIHRvIHRoZSBwcm9ncmFtICJvYnNlcnZpbmciIG51bWJlcnMgZXZlbiBpZiBhbGwKLSAgICAg
ICAgICAgIC8vIHVzZXJzIG9mIHRoZSB2YWx1ZSBhcmUgZG9pbmcgdG9JbnQzMi4gSXQgbWlnaHQg
YmUgd29ydGh3aGlsZSB0byByZXZpc2l0IHRoaXMgYXQgc29tZQotICAgICAgICAgICAgLy8gcG9p
bnQgYW5kIGFjdHVhbGx5IGNoZWNrIGlmIHRoZSBkYXRhIGZsb3cgaW52b2x2ZXMgbG9vcHMsIGJ1
dCByaWdodCBub3cgSSBkb24ndCB0aGluawotICAgICAgICAgICAgLy8gd2UgaGF2ZSBldmlkZW5j
ZSB0aGF0IHRoaXMgd291bGQgYmUgYmVuZWZpY2lhbCBmb3IgYmVuY2htYXJrcy4KLSAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFibGVBY2Nlc3NE
YXRhLT5mbGFncygpIHwgTm9kZVVzZWRBc051bWJlcik7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxlQWNjZXNzRGF0YS0+ZmxhZ3MoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC03MzcsNyAr
NzM4LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2Fz
ZSBBcnJheWlmeToKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAgICBj
YXNlIElkZW50aXR5OiB7CisgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIGNhc2UgTW92
SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmll
SGludDogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxl
IGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNl
cnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBD
UkFTSCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTY4LDYg
KzE5NjgsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgY29t
cGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogCiAg
ICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGlu
dCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCkBAIC00Nzg4LDcgKzQ4MDEs
NDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgIGNhc2UgSW5saW5l
U3RhcnQ6CisgICAgY2FzZSBJbmxpbmVTdGFydDogeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IG5vZGUtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAg
ICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9
IG5vZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraSkgeworICAgICAgICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKKyAgICAgICAg
ICAgIGlmIChjb2RlQmxvY2stPmlzQ2FwdHVyZWQoYXJndW1lbnRUb09wZXJhbmQoaSkpKQorICAg
ICAgICAgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluSlNTdGFjaygp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQXJndW1lbnRQb3NpdGlvbiYg
YXJndW1lbnRQb3NpdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkubV9h
cmd1bWVudFBvc2l0aW9uc1thcmd1bWVudFBvc2l0aW9uU3RhcnQgKyBpXTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgICAgICAgICBpZiAoIWFyZ3Vt
ZW50UG9zaXRpb24uc2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisg
ICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0
YWNrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0ludDMyU3BlY3VsYXRpb24oYXJndW1l
bnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChpc0NlbGxTcGVjdWxhdGlvbihhcmd1bWVudFBvc2l0aW9uLnByZWRpY3Rpb24oKSkpCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQ
b3NpdGlvbi5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9
IFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFj
ayk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcnkgPSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2
YWx1ZVNvdXJjZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUaGUgcmVjb3Zlcnkg
c2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCisg
ICAgICAgICAgICAvLyBzdG9yZWQgaW50byB0aGUgc3RhY2sgYXQgdGhlIHJpZ2h0IHBsYWNlLCBv
ciB0byBhIGNvbnN0YW50LAorICAgICAgICAgICAgLy8gc2luY2UgdGhlIEFyZ3VtZW50cyBjb2Rl
IGlzbid0IHNtYXJ0IGVub3VnaCB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KKyAgICAgICAgICAg
IC8vIFRoZSBleGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJl
YWxseSBuZWVkIHRvIGJlCisgICAgICAgICAgICAvLyBhYmxlIHRvIHJlY292ZXIuCisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgZGF0YUxvZ0YoIlxuUmVjb3Zlcnkg
Zm9yIGFyZ3VtZW50ICVkOiAiLCBpKTsKKyAgICAgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpk
YXRhRmlsZSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHNbaV0gPSByZWNvdmVyeTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAgICAgCiAgICAgY2FzZSBOb3A6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0NDQ4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjcsOSArMjI3LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JF
eGl0VAogICAgIGlmICghdmFsdWVSZWNvdmVyeSkgewogICAgICAgICAvLyBDaGVjayB0aGF0IGVp
dGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9k
ZSB3YXMgYQogICAgICAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLgot
ICAgICAgICBpZiAobV9jdXJyZW50Tm9kZS0+b3AoKSAhPSBTZXRMb2NhbCkgeworICAgICAgICBp
ZiAoIW1fY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CiAgICAgICAgICAgICBOb2Rl
KiBzZXRMb2NhbCA9IG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KG1faW5kZXhJ
bkJsb2NrIC0gMSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2Nh
bC0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2Fs
LCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VAogICAgICAgICBBU1NFUlQoc2V0TG9jYWwt
PmNoaWxkMSgpLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlKTsKICAgICBlbHNlCiAgICAgICAg
IEFTU0VSVChzZXRMb2NhbC0+Y2hpbGQxKCkgPT0gbV9jdXJyZW50Tm9kZSk7Ci0gICAgQVNTRVJU
KHNldExvY2FsLT5vcCgpID09IFNldExvY2FsKTsKKyAgICBBU1NFUlQoc2V0TG9jYWwtPmNvbnRh
aW5zTW92SGludCgpKTsKICAgICBBU1NFUlQoc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gbV9jdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAKICAgICBOb2RlKiBuZXh0Tm9kZSA9IG1faml0LmdyYXBo
KCkubV9ibG9ja3NbbV9ibG9ja10tPmF0KHNldExvY2FsSW5kZXhJbkJsb2NrICsgMSk7CkBAIC0x
NTY3LDcgKzE1NjcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2Rl
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUqIG5vZGUpCiB7Ci0g
ICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgIEFTU0VSVChub2RlLT5jb250
YWluc01vdkhpbnQoKSAmJiBub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOwogICAgIAogICAgIG1f
bGFzdFNldE9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOwogCkBAIC0xNjc4LDUwICsxNjc4LDE5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAgICAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fY3Vy
cmVudE5vZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOwotICAgICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5s
aW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVS
ZWNvdmVyeSByZWNvdmVyeTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXND
YXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9u
JiBhcmd1bWVudFBvc2l0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2li
bGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291
cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFy
Z3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3Vt
ZW50UG9zaXRpb24ucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJl
ZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZh
bHVlU291cmNlKENlbGxJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9v
bGVhbkluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFj
ayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKHZhbHVlU291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgcmVjb3Zlcnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcg
dGhhdCBoYXMgYWxyZWFkeSBiZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBpbnRv
IHRoZSBzdGFjayBhdCB0aGUgcmlnaHQgcGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMgY29kZSBpc24ndCBzbWFydCBlbm91
Z2ggdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBl
eGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVk
IHRvIGJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KLSNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcblJl
Y292ZXJ5IGZvciBhcmd1bWVudCAlZDogIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292
ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5OwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAg
ICAgICAgICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBtX2N1cnJlbnROb2RlLT5sb2NhbCgpOwor
ICAgICAgICAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0
TG9jYWwobV9jdXJyZW50Tm9kZS0+bG9jYWwoKSwgRGF0YUZvcm1hdERlYWQpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFw
aChtX2N1cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdy
YXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDkgKzc3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT52b3RlKFZvdGVTdHJ1Y3R1cmVDaGVjayk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0
aW5nRmFpbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJlZGljdGlvbigpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb25zaWRlckZvckhvaXN0aW5nKHZhcmlh
YmxlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgbm9kZS0+c3RydWN0dXJlU2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExOCw5ICsxMTYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gY2hpbGQtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZU90aGVyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZh
cmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNw
ZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzaG91bGRDb25zaWRlckZvckhvaXN0aW5nKHZhcmlhYmxlKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0
cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCAwKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTMy
LDkgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gd2UncmUgbm90IGhv
aXN0aW5nIGEgY2hlY2sgdGhhdCB3b3VsZCBjb250cmF2ZW5lIGNoZWNrcyB0aGF0IGFyZQogICAg
ICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGJlaW5nIHBlcmZvcm1lZC4KICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSB8fCB2YXJpYWJsZS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3Bl
Y3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIGlm
ICghc2hvdWxkQ29uc2lkZXJGb3JIb2lzdGluZyh2YXJpYWJsZSkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogc291cmNlID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHN1Yklu
ZGV4SW5CbG9jayA9IDA7IHN1YkluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrc3ViSW5k
ZXhJbkJsb2NrKSB7CkBAIC0yODgsMTEgKzI4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBOb2RlKiBnZXRMb2NhbCA9IGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
ICsgMSwgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgdmFyaWFibGUtPnByZWRpY3Rpb24o
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldExvY2FsLCBjb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jayArIDEsIHZhcmlhYmxlLT5wcmVkaWN0aW9uKCksIEdldExvY2FsLCBjb2RlT3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlKSwgRWRnZShub2RlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3Jp
Z2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25l
LCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShnZXRMb2NhbCwgQ2VsbFVzZSkpOwogCiAgICAg
ICAgICAgICAgICAgICAgIGlmIChibG9jay0+dmFyaWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpID09IG5vZGUpCkBAIC0zMjAsMTQgKzMxNCwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlKSwgY2hpbGQxKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFNldExvY2FsLCBjb2RlT3JpZ2luLCBPcElu
Zm8odmFyaWFibGUpLCBjaGlsZDEpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBhIEZv
cndhcmRDaGVja1N0cnVjdHVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBleGl0IHRvIHRo
ZQogICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uIHJhdGhl
ciB0aGFuIHJlZXhlY3V0aW5nIHRoZSBjdXJyZW50IG9uZS4KICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcndhcmRDaGVja1N0
cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLCBFZGdlKGNoaWxk
MS5ub2RlKCksIENlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEZvcndhcmRDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1
ZS5tX3N0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9k
ZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0zNDMsNiArMzM3
LDE3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBzaG91bGRDb25zaWRl
ckZvckhvaXN0aW5nKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUpCisgICAgeworICAgICAg
ICBpZiAoIXZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5n
RmFpbGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaXNDZWxs
U3BlY3VsYXRpb24odmFyaWFibGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKICAgICB2b2lkIG5vdGlj
ZVN0cnVjdHVyZUNoZWNrKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUsIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBD
aGVja0RhdGE+OjpBZGRSZXN1bHQgcmVzdWx0ID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNDQ0ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDEwICsx
NDcsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIG5vZGVzSW5UaGlzQmxvY2suYWRkKG5v
ZGUpOwogICAgICAgICAgICAgICAgIGlmIChibG9jay0+aXNQaGlJbmRleChpKSkKICAgICAgICAg
ICAgICAgICAgICAgcGhpc0luVGhpc0Jsb2NrLmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRDUFMgfHwgIW5vZGUtPmhhc1ZhcmlhYmxlQWNj
ZXNzRGF0YSgpKQorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fcmVmQ291bnRTdGF0ZSA9
PSBFeGFjdFJlZkNvdW50KQogICAgICAgICAgICAgICAgICAgICBWX0VRVUFMKChub2RlKSwgbXlS
ZWZDb3VudHMuZ2V0KG5vZGUpLCBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBteVJlZkNv
dW50cy5nZXQobm9kZSkgPyBub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkgOiB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgVl9FUVVBTCgobm9kZSksIG5vZGUtPnJlZkNvdW50KCksIDEpOwogICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBtX2dyYXBoLm51bUNoaWxkcmVu
KG5vZGUpOyArK2opIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC5j
aGlsZChub2RlLCBqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlKQpAQCAtMTc4LDcg
KzE3OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLT5vcCgpID09
IFNldExvY2FsCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFNldEFy
Z3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IEZsdXNoCi0g
ICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFBoaQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgZWRnZS0+b3AoKSA9PSBab21iaWVIaW50CisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBlZGdlLT5vcCgpID09IE1vdkhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gTW92SGludEFuZENoZWNrKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChwaGlzSW5UaGlzQmxvY2suY29udGFpbnMoZWRnZS5ub2RlKCkpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xODcsNiArMTkwLDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG5vZGUsIGVkZ2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVk
Z2UtPm9wKCkgPT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IFpvbWJpZUhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdl
LT5vcCgpID09IE1vdkhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5v
cCgpID09IE1vdkhpbnRBbmRDaGVjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVk
Z2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBl
ZGdlLT5vcCgpID09IEZsdXNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjIwLDYg
KzIyNiw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhbCwgYmxvY2stPm1fcHJlZGVjZXNzb3JzW2td
LCBwcmV2Tm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3Ao
KSA9PSBNb3ZIaW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gTW92SGludEFuZENoZWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJl
dk5vZGUtPm9wKCkgPT0gWm9tYmllSGludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHByZXZOb2RlLT5vcCgpID09IFNldEFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gUGhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcmV2Tm9kZSA9PSBlZGdlLm5vZGUoKSkgewpAQCAtMjg3LDYgKzI5NiwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIEdldExvY2Fs
J3MgdGhhdCB3ZSBrbm93IHRvIGJlIGRlYWQsIGJ1dCB0aGF0IHRoZSBncmFwaAorICAgICAgICAg
ICAgICAgICAgICAvLyBkb2Vzbid0IHlldCBrbm93IHRvIGJlIGRlYWQuCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbXlSZWZDb3VudHMuZ2V0KG5vZGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBUaHJl
YWRlZENQUykKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlLCBibG9ja0lu
ZGV4KSwgZ2V0TG9jYWxQb3NpdGlvbnMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9PSBub3RTZXQp
OwogICAgICAgICAgICAgICAgICAgICBnZXRMb2NhbFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gaTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191416</attachid>
            <date>2013-03-04 23:59:18 -0800</date>
            <delta_ts>2013-03-05 13:34:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0NzMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MiBA
QAorMjAxMy0wMy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBEQ0UgbWlnaHQgZWxpbWluYXRlIGNoZWNrcyB1bnNvdW5kbHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTM4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnZXRzIHJpZCBv
ZiBhbGwgZWFnZXIgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBhbGwgZGVhZCBjb2RlIGVs
aW1pbmF0aW9uCisgICAgICAgIGluIG9uZSBwaGFzZSAtIHRoZSBEQ0VQaGFzZS4gVGhpcyBwaGFz
ZSBhbHNvIHNldHMgdXAgdGhlIG5vZGUgcmVmZXJlbmNlIGNvdW50cywKKyAgICAgICAgd2hpY2gg
YXJlIHRoZW4gdXNlZCBub3QganVzdCBmb3IgRENFIGJ1dCBhbHNvIHJlZ2lzdGVyIGFsbG9jYXRp
b24gYW5kIHN0YWNrIHNsb3QKKyAgICAgICAgYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IERvaW5nIHRoaXMgcmVxdWlyZWQgYSBudW1iZXIgb2Ygc3VyZ2ljYWwgY2hhbmdlcyBpbiBwbGFj
ZXMgdGhhdCBwcmV2aW91c2x5IHJlbGllZAorICAgICAgICBvbiBhbHdheXMgaGF2aW5nIGxpdmVu
ZXNzIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIHN0cnVjdHVyZSBjaGVjayBob2lzdGlu
ZworICAgICAgICBwaGFzZSBtdXN0IG5vdyBjb25zdWx0IHdoZXRoZXIgYSBWYXJpYWJsZUFjY2Vz
c0RhdGEgaXMgcHJvZml0YWJsZSBmb3IgdW5ib3hpbmcgdG8KKyAgICAgICAgbWFrZSBzdXJlIHRo
YXQgaXQgZG9lc24ndCB0cnkgdG8gZG8gaG9pc3Rpbmcgb24gc2V0IFNldExvY2Fscy4gVGhlIGFy
Z3VtZW50cworICAgICAgICBzaW1wbGlmaWNhdGlvbiBwaGFzZSBlbXBsb3lzIGl0cyBvd24gbGln
aHQtd2VpZ2h0IGxpdmVuZXNzIGFuYWx5c2lzLiBCb3RoIHBoYXNlcworICAgICAgICBwcmV2aW91
c2x5IGp1c3QgdXNlZCByZWZlcmVuY2UgY291bnRzLgorICAgICAgICAKKyAgICAgICAgVGhlIGxh
cmdlc3QgY2hhbmdlIGlzIHRoYXQgbm93LCBkZWFkIG5vZGVzIGdldCB0dXJuZWQgaW50byBQaGFu
dG9tcy4gVGhvc2UKKyAgICAgICAgUGhhbnRvbXMgd2lsbCByZXRhaW4gdGhvc2UgY2hpbGQgZWRn
ZXMgdGhhdCBhcmUgbm90IHByb3Zlbi4gVGhpcyBlbnN1cmVzIHRoYXQgYW55CisgICAgICAgIHR5
cGUgY2hlY2tzIHBlcmZvcm1lZCBieSBhIGRlYWQgbm9kZSByZW1haW4gZXZlbiBhZnRlciB0aGUg
bm9kZSBpcyBraWxsZWQuIE9uIHRoZQorICAgICAgICBvdGhlciBoYW5kLCB0aGlzIFBoYW50b20g
Y29udmVyc2lvbiBtZWFucyB0aGF0IHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IKKyAgICAg
ICAgU2V0TG9jYWwuIEkgZGVjaWRlZCB0byBtYWtlIHRoZSBmb3VyIGZvcm1zIG9mIFNldExvY2Fs
IGV4cGxpY2l0OgorICAgICAgICAKKyAgICAgICAgTW92SGludChAYSwgckspOiBKdXN0IGluZGlj
YXRlcyB0aGF0IG5vZGUgQGEgY29udGFpbnMgdGhlIHZhbHVlIHRoYXQgd291bGQgaGF2ZQorICAg
ICAgICAgICAgIG5vdyBiZWVuIHBsYWNlZCBpbnRvIHZpcnR1YWwgcmVnaXN0ZXIgcksuIERvZXMg
bm90IGFjdHVhbGx5IGNhdXNlIEBhIHRvIGJlCisgICAgICAgICAgICAgc3RvcmVkIGludG8gcksu
IFRoaXMgd291bGQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYSBkZWFkIFNldExvY2FsIHdpdGggQGEK
KyAgICAgICAgICAgICBiZWluZyBsaXZlLiBNb3ZIaW50cyBhcmUgYWx3YXlzIGRlYWQuCisgICAg
ICAgIAorICAgICAgICBab21iaWVIaW50KHJLKTogSW5kaWNhdGVzIHRoYXQgYXQgdGhpcyBwb2lu
dCwgcmVnaXN0ZXIgcksgd2lsbCBjb250YWluIGEgZGVhZAorICAgICAgICAgICAgIHZhbHVlIGFu
ZCBPU1Igc2hvdWxkIHB1dCBVbmRlZmluZWQgaW50byBpdC4gVGhpcyB3b3VsZCBoYXZlIHByZXZp
b3VzbHkgYmVlbgorICAgICAgICAgICAgIGEgZGVhZCBTZXRMb2NhbCB3aXRoIEBhIGJlaW5nIGRl
YWQgYWxzby4gWm9tYmllSGludHMgYXJlIGFsd2F5cyBkZWFkLgorICAgICAgICAKKyAgICAgICAg
TW92SGludEFuZENoZWNrKEBhLCBySyk6IElkZW50aWNhbCB0byBNb3ZIaW50IGV4Y2VwdCBAYSBp
cyBhbHNvIHR5cGUgY2hlY2tlZCwKKyAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIg
VXNlS2luZCB0aGUgZWRnZSB0byBAYSBoYXMuIFRoZSB0eXBlIGNoZWNrIGlzIGFsd2F5cyBhCisg
ICAgICAgICAgICAgZm9yd2FyZCBleGl0LiBNb3ZIaW50QW5kQ2hlY2tzIGFyZSBhbHdheXMgbGl2
ZSwgc2luY2UgdGhleSBhcmUKKyAgICAgICAgICAgICBOb2RlTXVzdEdlbmVyYXRlLiBQcmV2aW91
c2x5IHRoaXMgd291bGQgaGF2ZSBiZWVuIGEgZGVhZCBTZXRMb2NhbCB3aXRoIGEKKyAgICAgICAg
ICAgICBsaXZlIEBhLCBhbmQgdGhlIGNoZWNrIHdvdWxkIGhhdmUgZGlzYXBwZWFyZWQuIFRoaXMg
aXMgb25lIG9mIHRoZSBidWdzIHRoYXQKKyAgICAgICAgICAgICB0aGlzIHBhdGNoIHNvbHZlcy4K
KyAgICAgICAgCisgICAgICAgIFNldExvY2FsKEBhLCBySyk6IFRoaXMgc3RpbGwgZG9lcyBleGFj
dGx5IHdoYXQgaXQgZG9lcyBub3csIGlmIHRoZSBTZXRMb2NhbCBpcworICAgICAgICAgICAgIGxp
dmUuCisgICAgICAgIAorICAgICAgICBCYXNpY2FsbHkgdGhpcyBwYXRjaCBtYWtlcyBpdCBzbyB0
aGF0IGRlYWQgU2V0TG9jYWxzIGV2ZW50dWFsbHkgZGVjYXkgdG8gTW92SGludCwKKyAgICAgICAg
Wm9tYmllSGludCwgb3IgTW92SGludEFuZENoZWNrIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9u
LiBJZiB0aGUgY2hpbGQgQGEgaXMKKyAgICAgICAgYWxzbyBkZWFkLCB0aGVuIHlvdSBnZXQgYSBa
b21iaWVIaW50LiBJZiB0aGUgY2hpbGQgQGEgaXMgbGl2ZSBidXQgdGhlIFNldExvY2FsCisgICAg
ICAgIGhhcyBhIHR5cGUgY2hlY2sgYW5kIEBhJ3MgdHlwZSBoYXNuJ3QgYmVlbiBwcm92ZW4gdG8g
aGF2ZSB0aGF0IHR5cGUgdGhlbiB5b3UgZ2V0CisgICAgICAgIGEgTW92SGludEFuZENoZWNrLiBP
dGhlcndpc2UgeW91IGdldCBhIE1vdkhpbnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHBl
cmZvcm1hbmNlIG5ldXRyYWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
U3RhdGVBdFRhaWwpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZSk6CisgICAgICAg
IChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlQXJndW1lbnRz
UmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6
CisgICAgICAgIChCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGlu
ZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9HcmFwaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omluc2VydFBoaU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MpOgorICAgICAgICAq
IGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6a2VlcE9wZXJhbmRBbGl2ZSk6CisgICAgICAgICog
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQ
aGFzZTo6YWRkUGhpU2lsZW50bHkpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBk
ZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
IChXVEYpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKFdURik6CisgICAg
ICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVD
b2RlKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChEQ0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6OkRD
RVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAgICAgICAoSlNDOjpERkc6
OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjplbGlt
aW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJm
b3JtRENFKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJy
YXlPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeEludEVkZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdEludDMyVG9Eb3VibGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50VG9JbnQz
Mik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNoYW5nZUNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2hhbmdlRWRnZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6cGVyZm9ybVN1YnN0aXR1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnBlcmZv
cm1TdWJzdGl0dXRpb25Gb3JFZGdlKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3Vic3RpdHV0ZSk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5o
OgorICAgICAgICAoSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNv
bnZlcnRUb0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9HZXRM
b2NhbFVubGlua2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb250YWluc01vdkhpbnQp
OgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9T
Uik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTW92SGludEFuZENoZWNrKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmxpbmVTdGFydCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpzaG91bGRDb25zaWRlckZvckhvaXN0
aW5nKToKKyAgICAgICAgKFN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRh
dGUpOgorCiAyMDEzLTAzLTA0ICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnVzZWQgU3RydWN0dXJlIHByb3BlcnR5IHRhYmxlcyB3YXN0ZSAxNE1CIG9uIE1l
bWJ1c3Rlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtODUsNiArODUsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGRmZy9ERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKICAgICBkZmcvREZHQ1NFUGhhc2UuY3BwCisgICAgZGZnL0RGR0RDRVBoYXNl
LmNwcAogICAgIGRmZy9ERkdEaXNhc3NlbWJsZXIuY3BwCiAgICAgZGZnL0RGR0RvbWluYXRvcnMu
Y3BwCiAgICAgZGZnL0RGR0RyaXZlci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjAzLDYgKzIwMyw4
IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhh
c2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEaXNhc3NlbWJsZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rpc2Fzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
bWluYXRvcnMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAx
NDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5
KQpAQCAtMTIxLDYgKzEyMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRmZy9ERkdDUFNSZXRocmVh
ZGluZ1BoYXNlLmNwcCBcCiAgICAgZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBcCiAg
ICAgZGZnL0RGR0NTRVBoYXNlLmNwcCBcCisgICAgZGZnL0RGR0RDRVBoYXNlLmNwcCBcCiAgICAg
ZGZnL0RGR0Rpc2Fzc2VtYmxlci5jcHAgXAogICAgIGRmZy9ERkdEb21pbmF0b3JzLmNwcCBcCiAg
ICAgZGZnL0RGR0RyaXZlci5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5
LDggQEAKIAkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkQxNDcz
OEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9OwogCQkwRjJFODkyQzE2RDAy
OEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU5ODdGMkYxNjgyOEE3RTAwM0MyRjhEIC8qIFVudXNlZFBv
aW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEI1MTAxNkIzQTk2NDAwM0Y2
OTZCIC8qIERGR01pbmlmaWVkSUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyRkM3
NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLzsgfTsKKwkJMEYyRkM3NzMx
NkUxMkY3NDAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENF
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAv
KiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzRCMTRDMTZENDNFMEQw
MDFDREE1QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTRCMTZENDNFMEMwMDFDREE1
QSAvKiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAwMiw2ICsxMDA0LDggQEAKIAkJMEYy
QkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5jcHA7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkM1NTZEMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjJDNTU2RTE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdDb2RlQmxvY2tzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBE
RkdEQ0VQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdE
Q0VQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRENFUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRENFUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdEQ0VQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2
RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2lu
ZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2NDEsNiAr
MjY0NSw4IEBACiAJCQkJMEZCRTBGNkMxNkMxREIwMTAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFk
aW5nUGhhc2UuaCAqLywKIAkJCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhh
c2UuY3BwICovLAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5o
ICovLAorCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8s
CisJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCiAJCQkJ
MEZGNDI3NjExNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5jcHAgKi8sCiAJCQkJ
MEZGNDI3NjIxNTkxQTFDOTAwNENCOUZGIC8qIERGR0Rpc2Fzc2VtYmxlci5oICovLAogCQkJCTBG
RDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLywKQEAgLTI5Nzcs
NiArMjk4Myw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2Nr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8q
IENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhF
NjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJGQzc3MzE2
RTEyRjc0MDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5
RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNzQyLDYgKzM3NDksNyBAQAogCQkJCTE0OEYyMUFBMTA3RUM1M0Ew
MDQyRUMyQyAvKiBCeXRlY29kZUdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjJGQzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3M0Q3QUUxNjVBMTQyRDAwQUNBQjcxIC8q
IENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0
NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNCw2ICszMTQsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6IHsKKyAgICAgICAgLy8gRG9uJ3Qg
bmVlZCB0byBkbyBhbnl0aGluZy4gQSBNb3ZIaW50IGlzIGVmZmVjdGl2ZWx5IGEgcHJvbWlzZSB0
aGF0IHRoZSBTZXRMb2NhbAorICAgICAgICAvLyB3YXMgZGVhZC4KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OiB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIC8vIEFz
c2VydCB0aGF0IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgpAQCAtMTYyOCwx
OCArMTY0MCw2IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0g
ICAgICAgICAgICAvLyBJZiB0aGUgR2V0TG9jYWwgaXMgZGVhZCwgdGhlbiB3ZSB0cmFuc2ZlciBm
cm9tIGhlYWQgdG8gdGFpbC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZ2V0IHJpZCBv
ZiB0aGlzIGNhc2UgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwOTM4OQotICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRv
IHRhaWwuCi0gICAgICAgICAgICAgICAgc291cmNlID0gaW5WYXJpYWJsZTsKLSNpZiBERkdfRU5B
QkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IiAgICAgICAgICBUcmFuc2ZlcmluZyAiKTsKLSAgICAgICAgICAgICAgICBzb3VyY2UuZHVtcChX
VEY6OmRhdGFGaWxlKCkpOwotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgZnJvbSBoZWFkIHRv
IHRhaWwgKGRlYWQgR2V0TG9jYWwgY2FzZSkuXG4iKTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmluZXMg
dGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlvbnMuCiAgICAgICAgICAgICBzb3Vy
Y2UgPSBmb3JOb2RlKG5vZGUpOwogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQ0NzE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCwyNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmFkZCh2YXJpYWJsZUFjY2Vzc0RhdGEsIEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSgpKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYXJlIGxpdmUsIHVzaW5nIGEgY29uc2VydmF0aXZlIGFw
cHJveGltYXRpb24gb2YKKyAgICAgICAgLy8gbGl2ZW5lc3MuCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
OyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDoKKyAgICAgICAgICAg
ICAgICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgbV9pc0xpdmUuYWRk
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZhcmlhYmxlcyBhbGlhcyB0aGUgYXJndW1lbnRzIGFu
ZCBub3RoaW5nIGVsc2UsIGFuZCBhcmUKICAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZh
bCBhbmQgR2V0QXJyYXlMZW5ndGggYWNjZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCiAgICAgICAg
IC8vIGlkZW50aWZ5IHVzZXMgb2YgQ3JlYXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0
ZW50IHdpdGggdGhlIGFyZ3VtZW50cwpAQCAtMTk4LDYgKzIxOCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNvdXJjZS0+dmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFyaWFi
bGUgaXMgdG90YWxseSBkZWFkLCB0aGVuIGlnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbV9pc0xpdmUuY29udGFpbnModmFyaWFibGVBY2Nlc3NEYXRhKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c1JlZ2lzdGVyICE9IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PSB1bm1vZGlmaWVk
QXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSkgewpAQCAtNDY4LDcgKzQ5Miw2
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3QgZ2V0IHJpZCBv
ZiB0aGlzIG5vZGUsIGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50LgogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0
Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDcgKzUx
MSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQx
KCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CkBAIC01MDQsMTAgKzUyNiw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkg
PSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KEdldE15QXJndW1lbnRzTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVmKCk7
IC8vIFRoaXMgaXMgYSBtdXN0LWdlbmVyYXRlIG5vZGUuCiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9y
Y2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm9ldyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MzEsOCArNTUxLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGV4YWN0bHkgd2hhdCB0
aGlzIHdpbGwgcmV0dXJuLiBCdXQgb25seSBhZnRlciB3ZSBoYXZlIGNoZWNrZWQKICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhhdCBub2JvZHkgaGFzIGVzY2FwZWQgb3VyIGFyZ3VtZW50cy4KICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQXJndW1lbnRzTm90Q3JlYXRl
ZCwgY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIGNvZGVPcmlnaW4pOwogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFu
dCgKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwpAQCAtNTgxLDEwICs2MDAsMTAg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYmFzZWxpbmVD
b2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmFyZ3VtZW50SW5kZXhBZnRlckNhcHR1cmUo
aW5kZXgpKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FyZ3VtZW50c05v
dENyZWF0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luKTsKICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBQaGFudG9tLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwpAQCAtNTk4LDcgKzYxNyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsKICAgICAgICAgICAgICAg
ICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKG5vZGUpOwogICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDIobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPnNldFJlZkNvdW50KDApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNjI2LDggKzY0NCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9k
ZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhQaGFudG9tQXJndW1lbnRzKTsK
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOwpAQCAtNjUxLDYgKzY2OCw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEqLCBBcmd1bWVudHNB
bGlhc2luZ0RhdGEsCiAgICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFjY2Vzc0RhdGEq
Pjo6SGFzaCwKICAgICAgICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJsZUFjY2Vzc0Rh
dGEqPiA+IG1fYXJndW1lbnRzQWxpYXNpbmc7CisgICAgSGFzaFNldDxWYXJpYWJsZUFjY2Vzc0Rh
dGEqPiBtX2lzTGl2ZTsKIAogICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShOb2RlKiBu
b2RlKQogICAgIHsKQEAgLTc4NSw3ICs4MDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoZWRnZS0+Y29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOwogICAgICAgICAgICAgaWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAh
aXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
cmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC03OTMsNyArODEwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDcmVhdGVBcmd1
bWVudHM6IHsgLy8gQXJpc2VzIGlmIHdlIENTRSB0d28gR2V0TG9jYWxzIHRvIHRoZSBhcmd1bWVu
dHMgcmVnaXN0ZXIgYW5kIHRoZW4gQ1NFIHRoZSBzZWNvbmQgdXNlIG9mIHRoZSBHZXRMb2NhbCB0
byB0aGUgZmlyc3QuCiAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5z
KGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CiAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0cnVjdCBCYXNp
Y0Jsb2NrIDogVmVjdG9yPE5vZGUqLCA4PiB7CiAgICAgfQogICAgIAogI2RlZmluZSBERkdfREVG
SU5FX0FQUEVORF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZh
bHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdyYXBoJiwgUmVmQ2hp
bGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2
YWx1ZVBhcmFtcyk7CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9k
ZSogYXBwZW5kTm9kZShHcmFwaCYsIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpOwogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5F
X0FQUEVORF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfQVBQRU5EX05PREUKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUo
dGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwg
dmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVt
cGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNpY0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFw
aCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9kZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1v
ZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAor
ICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IGlubGluZSBOb2RlKiBCYXNp
Y0Jsb2NrOjphcHBlbmROb2RlKEdyYXBoJiBncmFwaCwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCiAgICAgeyBcCi0gICAgICAgIE5vZGUqIHJlc3Vs
dCA9IGdyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1
ZVBhcmFtc0NvbW1hIHZhbHVlQXJncyk7IFwKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGgu
YWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKTsgXAogICAgICAgICBhcHBl
bmQocmVzdWx0KTsgXAogICAgICAgICByZXR1cm4gcmVzdWx0OyBcCiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlz
aW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTgsNzcgKzY5OCw1NiBAQCBwcml2YXRlOgogICAg
IE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNo
aWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQg
PSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBFZGdl
KGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAgICAgICAgICAgIFNwZWNO
b25lLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgRWRnZShjaGlsZDEpLCBFZGdlKGNoaWxkMiks
IEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhv
cCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dy
YXBoKE5vZGVUeXBlIG9wLCBFZGdlIGNoaWxkMSwgRWRnZSBjaGlsZDIgPSBFZGdlKCksIEVkZ2Ug
Y2hpbGQzID0gRWRnZSgpKQogICAgIHsKICAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5h
ZGROb2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05v
bmUsCi0gICAgICAgICAgICBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMyk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZh
dWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVm
Q2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgTm9k
ZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGUqIGNoaWxkMSA9IDAs
IE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUqIGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBpbmZvLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKKyAg
ICAgICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbywgRWRnZShj
aGlsZDEpLCBFZGdlKGNoaWxkMiksIEVkZ2UoY2hpbGQzKSk7CiAgICAgICAgIGlmIChvcCA9PSBQ
aGkpCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwot
Ci0gICAgICAgIGlmIChkZWZhdWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAg
ICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgTm9kZSogYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8x
LCBPcEluZm8gaW5mbzIsIE5vZGUqIGNoaWxkMSA9IDAsIE5vZGUqIGNoaWxkMiA9IDAsIE5vZGUq
IGNoaWxkMyA9IDApCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5v
ZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwK
LSAgICAgICAgICAgIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIEVkZ2Uo
Y2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05v
bmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCisgICAgICAgICAgICBF
ZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgQVNTRVJU
KG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQocmVzdWx0KTsKLQot
ICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2VuZXJhdGUpCi0gICAgICAg
ICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2Rl
VHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2Rl
KiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAgICAgICBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAgIE5vZGU6OlZhckFyZywgb3AsIGN1
cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAgIFNwZWNOb25lLCBO
b2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsCiAgICAg
ICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJB
cmdzLCBtX251bVBhc3NlZFZhckFyZ3MpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwogICAgICAgICAKICAgICAgICAg
bV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAgICAgCi0gICAgICAgIGlmIChkZWZhdWx0Rmxh
Z3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmQ2hpbGRy
ZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBOb2RlKiBp
bnNlcnRQaGlOb2RlKE9wSW5mbyBpbmZvLCBCYXNpY0Jsb2NrKiBibG9jaykKICAgICB7Ci0gICAg
ICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgUGhpLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBpbmZvKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGRO
b2RlKFNwZWNOb25lLCBQaGksIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8pOwogICAgICAgICBi
bG9jay0+cGhpcy5hcHBlbmQocmVzdWx0KTsKLQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIApAQCAtMTI1NiwxNyArMTIzNSwxOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKEludGVycHJlCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhj
b25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNhbGxUYXJnZXQsIGlu
dCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewotICAgIGlm
IChjYWxsTGlua1N0YXR1cy5pc1Byb3ZlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
QVNTRVJUKGNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpOwotICAgIAogICAgIE5vZGUqIHRo
aXNBcmd1bWVudDsKICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKICAgICAgICAgdGhpc0Fy
Z3VtZW50ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpOwogICAg
IGVsc2UKICAgICAgICAgdGhpc0FyZ3VtZW50ID0gMDsKIAorICAgIGlmIChjYWxsTGlua1N0YXR1
cy5pc1Byb3ZlZCgpKSB7CisgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCwg
dGhpc0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQo
Y2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSk7CisgICAgCiAgICAgaWYgKEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSkKICAgICAgICAgYWRkVG9HcmFw
aChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZnVuY3Rpb24pLCBjYWxsVGFyZ2V0LCB0aGlzQXJndW1l
bnQpOwogICAgIGVsc2UgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCBydW4oKQogICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9m
b3JtID09IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlv
blN0YXRlID09IEdsb2JhbGx5VW5pZmllZCk7CisgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fcmVm
Q291bnRTdGF0ZSA9PSBFdmVyeXRoaW5nSXNMaXZlKTsKKyAgICAgICAgCiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBtX2NvdW50ID0gMDsKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsOCArMTQwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGpldHRpc29uQmxvY2soYmxvY2tJbmRleCwgbm90VGFrZW5CbG9ja0luZGV4LCBib3VuZGFyeUNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBKdW1w
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeUNvZGVPcmlnaW4sIE9w
SW5mbyh0YWtlbkJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaCwgU3BlY05vbmUsIEp1bXAsIGJvdW5kYXJ5Q29kZU9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHRha2VuQmxvY2tJbmRleCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJDaGFuZ2VkID0g
b3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoYnJhbmNoLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hcHBlbmROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBEb250UmVmQ2hpbGRyZW4sIERvbnRS
ZWZOb2RlLCBTcGVjTm9uZSwgSnVtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJhbmNoLT5jb2RlT3JpZ2luLCBPcEluZm8odGFyZ2V0QmxvY2tJbmRleCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYnJhbmNoLT5j
b2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odGFyZ2V0
QmxvY2tJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgaW5uZXJDaGFuZ2VkID0gb3V0ZXJDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcyLDcgKzI3Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGlmICghbGl2ZW5lc3NOb2RlLT5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBibG9jay0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIERvbnRS
ZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIGNvZGVPcmln
aW4sCisgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCBjb2RlT3Jp
Z2luLCAKICAgICAgICAgICAgIE9wSW5mbyhsaXZlbmVzc05vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICAgICAgY2Fub25pY2FsaXpl
TG9jYWxzSW5CbG9ja3MoKTsKICAgICAgICAgcHJvcGFnYXRlUGhpczxMb2NhbE9wZXJhbmQ+KCk7
CiAgICAgICAgIHByb3BhZ2F0ZVBoaXM8QXJndW1lbnRPcGVyYW5kPigpOwotICAgICAgICBtX2dy
YXBoLmNvbGxlY3RHYXJiYWdlKCk7CiAgICAgICAgIAogICAgICAgICBtX2dyYXBoLm1fZm9ybSA9
IFRocmVhZGVkQ1BTOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyNCw3ICsxMjMsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIEFMV0FZU19JTkxJTkUgTm9kZSogYWRkUGhpU2lsZW50bHkoQmFz
aWNCbG9jayogYmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUpCiAgICAgewotICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBo
LmFkZE5vZGUoRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoaSwgY29k
ZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZShTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8odmFyaWFibGUpKTsK
ICAgICAgICAgYmxvY2stPnBoaXMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA4LDcgKzEwMDgsNiBAQCBwcml2YXRlOgog
I2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgIEVsaW1pbmF0aW5nIGVkZ2UgQCIsIG1fY3VycmVudE5vZGUtPmluZGV4KCksICIg
LT4gQCIsIGVkZ2UtPmluZGV4KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KGVkZ2UpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoaS0t
KTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KQEAgLTEwMjQsNyAr
MTAyMyw2IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY3VycmVudE5v
ZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZS0+c2V0UmVmQ291
bnQoMSk7CiAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hpbGRyZW4obV9jdXJy
ZW50Tm9kZSk7CiAgICAgICAgIAogICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHdpbGwgZWxp
bWluYXRlIGFsbCByZWZlcmVuY2VzIHRvIHRoaXMgbm9kZS4KQEAgLTExNTQsMTAgKzExNTIsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiB3ZSByZXBsYWNlIGEg
R2V0TG9jYWwgd2l0aCBhIEdldExvY2FsVW5saW5rZWQsIHRoZW4gdHVybiB0aGUgR2V0TG9jYWxV
bmxpbmtlZAogICAgICAgICAgICAgLy8gaW50byBhIEdldExvY2FsLgotICAgICAgICAgICAgaWYg
KHJlbGV2YW50TG9jYWxPcC0+b3AoKSA9PSBHZXRMb2NhbFVubGlua2VkKSB7CisgICAgICAgICAg
ICBpZiAocmVsZXZhbnRMb2NhbE9wLT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpCiAgICAgICAg
ICAgICAgICAgcmVsZXZhbnRMb2NhbE9wLT5jb252ZXJ0VG9HZXRMb2NhbCh2YXJpYWJsZUFjY2Vz
c0RhdGEsIHBoaSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYocGhpKTsKLSAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTIxMCw3ICsxMjA2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVChkYXRh
Tm9kZS0+aGFzUmVzdWx0KCkpOwogICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hp
bGQxKG5vZGUpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKGRh
dGFOb2RlKTsKLSAgICAgICAgICAgIG1fZ3JhcGgucmVmKGRhdGFOb2RlKTsKICAgICAgICAgICAg
IG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5j
cHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsMjEgQEAgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFVuaQogICAgIH0KIH0KIAordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFJlZkNvdW50U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChz
dGF0ZSkgeworICAgIGNhc2UgRXZlcnl0aGluZ0lzTGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJF
dmVyeXRoaW5nSXNMaXZlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXhhY3RSZWZDb3Vu
dDoKKyAgICAgICAgb3V0LnByaW50KCJFeGFjdFJlZkNvdW50Iik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFByb29mU3RhdHVzIHN0YXR1cykKIHsKICAgICBzd2l0Y2ggKHN0YXR1cykgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTcsNiArMjE3LDE1IEBAIGVudW0gVW5pZmljYXRpb25TdGF0ZSB7CiAgICAgR2xvYmFsbHlVbmlm
aWVkCiB9OwogCisvLyBEZXNjcmliZXMgaG93IHJlZmVyZW5jZSBjb3VudHMgaW4gdGhlIGdyYXBo
IGJlaGF2ZS4KK2VudW0gUmVmQ291bnRTdGF0ZSB7CisgICAgLy8gRXZlcnl0aGluZyBoYXMgcmVm
Q291bnQoKSA9PSAxLgorICAgIEV2ZXJ5dGhpbmdJc0xpdmUsCisKKyAgICAvLyBTZXQgYWZ0ZXIg
RENFIGhhcyBydW4uCisgICAgRXhhY3RSZWZDb3VudAorfTsKKwogZW51bSBPcGVyYW5kU3BlY3Vs
YXRpb25Nb2RlIHsgQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24gfTsKIAogZW51bSBTcGVjdWxhdGlvbkRpcmVjdGlvbiB7IEZvcndhcmRTcGVjdWxh
dGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiB9OwpAQCAtMjUwLDYgKzI1OSw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6Ok9wdGlt
aXphdGlvbkZpeHBvaW50U3RhdGUpOwogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpERkc6OkdyYXBoRm9ybSk7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkRGRzo6VW5pZmljYXRpb25TdGF0ZSk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkRGRzo6UmVmQ291bnRTdGF0ZSk7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkRGRzo6UHJvb2ZTdGF0dXMpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyAr
ODgsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS52YXJpYWJs
ZXMoKS5vcGVyYW5kKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1l
bnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdpbikpLm1fdHlwZSkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5yZWZDb3VudCgpID09
IDEpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEw
NCw3ICsxMDMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0
IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5j
b252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVl
OwpAQCAtMTI2LDcgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5
OiB7CiAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tl
ZChtX2dyYXBoLCBub2RlLCBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpKSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNv
dW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwog
ICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTg2LDI1ICsxODMsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAobmVl
ZHNXYXRjaHBvaW50KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSkpOwogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIGNvZGVPcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxs
KSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9k
ZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tLCBjb2RlT3JpZ2lu
LCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQo
S25vd25DZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBFZGdlIHBy
b3BlcnR5U3RvcmFnZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjaGlsZC0+
cmVmKCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEVkZ2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1
dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldEJ5T2Zmc2V0
KG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CkBA
IC0yNTIsMTIgKzI0NiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dh
dGNocG9pbnQpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxk
RWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsK
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNo
aWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93
bkNlbGxVc2UpOwpAQCAtMjg3LDE3ICsyODAsMTYgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
ICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoaWxkLT5yZWYoKTsgLy8gVGhlIGNoaWxkIHdpbGwgYmUgdXNlZCBhcyB0aGUgcHJv
cGVydHkgaW5kZXgsIHNvIHJlZiBpdCB0byByZWZsZWN0IHRoZSBkb3VibGUgdXNlLgorICAgICAg
ICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChzdGF0dXMuaXNTaW1wbGVSZXBsYWNlKCkgfHwgc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpID09IHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSkgeworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cy5pc1NpbXBsZVJlcGxhY2UoKSB8
fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RhdHVzLm5ld1N0cnVjdHVyZSgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNOb25lLCBHZXRC
dXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGls
ZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNw
ZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkBAIC0zMDUsMTcgKzI5Nywx
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0
KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9k
ZSwgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGRFZGdlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJl
biwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmln
aW4sIGNoaWxkRWRnZSkpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9u
ZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLCAKICAgICAgICAg
ICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzQ4LDYgKzMzOCwxMSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVu
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkg
eworICAgICAgICAgICAgICAgIC8vIEdldExvY2FscyB3aXRob3V0IGEgUGhpIGNoaWxkIGFyZSBn
dWFyYW50ZWVkIGRlYWQuIFdlIGRvbid0IGhhdmUgdG8KKyAgICAgICAgICAgICAgICAvLyBkbyBh
bnl0aGluZyBhYm91dCB0aGVtLgorICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSAhPSBMb2FkU3RvcmUpIHsKICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CkBAIC0zNjAsOCArMzU1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFu
dChub2RlLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGFudG9tID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQaGFu
dG9tTG9jYWwsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5m
byh2YXJpYWJsZSksIEVkZ2UocGhpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbUxvY2FsLCAgY29kZU9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGUpLCBFZGdlKHBoaSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSA9IHBoYW50b207CiAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhhbnRvbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMzc3LDcgKzM3Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFsdWUp
OwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQ
aGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRyZW4pOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtNDA2LDE4ICs0
MDEsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBjZWxs
KQogICAgIHsKICAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksCi0gICAgICAgICAgICBXZWFrSlND
b25zdGFudCwgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBjb2RlT3Jp
Z2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKGNlbGwtPnN0
cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKKyAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwg
Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBF
ZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1
Y3R1cmUsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBD
aGVja1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2Vs
bFVzZSkpOwogICAgIH0KICAgICAKQEAgLTQ1NCw4ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIERv
bnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVPcmlnaW4pOwog
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBo
YXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0RDRVBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBEQ0VQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6
CisgICAgRENFUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiZGVh
ZCBjb2RlIGVsaW1pbmF0aW9uIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5v
ZGVzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleElu
QmxvY2stLTspCisgICAgICAgICAgICAgICAgYmxvY2stPmF0KGluZGV4SW5CbG9jayktPnNldFJl
ZkNvdW50KDApOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5w
aGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICAgICAgYmxvY2stPnBoaXNbcGhp
SW5kZXhdLT5zZXRSZWZDb3VudCgwKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICAvLyBOb3cg
ZmluZCB0aGUgcm9vdHM6CisgICAgICAgIC8vIC0gTm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5lcmF0
ZS4KKyAgICAgICAgLy8gLSBOb2RlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0eXBlIGNoZWNr
cy4KKyAgICAgICAgLy8gLSBOb2RlcyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBTZXRMb2NhbHMu
CisgICAgICAgIC8vIFNldCB0aGVpciByZWYgY291bnRzIHRvIDEgYW5kIHB1dCB0aGVtIG9uIHRo
ZSB3b3JrbGlzdC4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdl
dCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gYmxvY2stPnNpemUoKTsg
aW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5h
dChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVO
KG1fZ3JhcGgsIG5vZGUsIGZpbmRUeXBlQ2hlY2tSb290KTsKKyAgICAgICAgICAgICAgICBpZiAo
IShub2RlLT5mbGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQorICAg
ICAgICAgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgd2hpbGUgKCFtX3dvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fd29ya2xpc3QubGFzdCgpOworICAgICAg
ICAgICAgbV93b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVu
bGVzcyBpdCdzIHJlZidlZC4KKyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1f
Z3JhcGgsIG5vZGUsIGNvdW50RWRnZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkuaXNQcm92ZWQoKSB8fCBub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IHRoYXQgVUludDMyVG9OdW1iZXIgaXMgZGVhZCBidXQg
aXRzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGlsZCBpc24ndDsgaWYgc28gdGhlbiB3
ZSBzaG91bGQgTW92SGludCB0aGUgY2hpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5lcmF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hp
bGQxKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNo
b3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRP
cEFuZERlZmF1bHRGbGFncyhab21iaWVIaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE1vdkhpbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludEFuZENoZWNrKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50OiB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIExlYXZlIHRoZW0gYXMgbm90IHNob3VsZEdlbmVyYXRlLgor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgICAgICAgICBlbGltaW5h
dGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfSB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID0gRXhhY3RSZWZDb3VudDsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZpbmRUeXBlQ2hl
Y2tSb290KE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICAvLyBXZSBtYXkgaGF2ZSBh
biAidW5wcm92ZWQiIHVudHlwZWQgdXNlIGZvciBjb2RlIHRoYXQgaXMgdW5yZWFjaGFibGUuIFRo
ZSBDRkEKKyAgICAgICAgLy8gd2lsbCBqdXN0IG5vdCBoYXZlIGdvdHRlbiBhcm91bmQgdG8gaXQu
CisgICAgICAgIGlmIChlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFlZGdlLT5wb3N0Zml4UmVm
KCkpCisgICAgICAgICAgICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY291bnRFZGdlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICAvLyBEb24ndCBjb3VudCBlZGdlcyB0aGF0IGFyZSBhbHJlYWR5IGNvdW50ZWQgZm9yIHRoZWly
IHR5cGUgY2hlY2tzLgorICAgICAgICBpZiAoIShlZGdlLmlzUHJvdmVkKCkgfHwgZWRnZS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBpZiAoZWRnZS0+cG9zdGZpeFJlZigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX3dvcmtsaXN0LmFwcGVuZChlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkg
eworICAgICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaSk7CisgICAg
ICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBpZiAoZWRnZS5uZWVkc0NoZWNrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxOb2RlKiwgMTI4PiBtX3dvcmtsaXN0OworfTsKKwor
Ym9vbCBwZXJmb3JtRENFKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIERDRSBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxEQ0VQaGFz
ZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhh
c2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0RDRVBoYXNlX2gKKyNkZWZpbmUg
REZHRENFUGhhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBHbG9iYWwgZGVhZCBjb2RlIGVsaW1p
bmF0aW9uLiBFbGltaW5hdGVzIGFueSBub2RlIHRoYXQgaXMgbm90IE5vZGVNdXN0R2VuZXJhdGUs
CisvLyBub3QgdXNlZCBieSBhbnkgb3RoZXIgbGl2ZSBub2RlLCBhbmQgbm90IHN1YmplY3QgdG8g
YW55IHR5cGUgY2hlY2suCisKK2Jvb2wgcGVyZm9ybURDRShHcmFwaCYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR0RDRVBoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkocmV2aXNpb24gMTQ0NzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiREZH
Q1BTUmV0aHJlYWRpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0NTRVBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdEQ0VQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR0ZpeHVwUGhhc2UuaCIKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgog
I2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgpAQCAtMTQ3LDExICsxNDgs
MTMgQEAgaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTQogICAgICAgICBw
ZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICB9CiAgICAgCisgICAgaWYgKGxvZ0NvbXBp
bGF0aW9uQ2hhbmdlcygpKQorICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhw
b2ludCBjb252ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisKICAgICBkZmcubV9m
aXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7CiAgICAgcGVyZm9ybUNTRShkZmcpOwog
ICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOyAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGJl
IGEgbm8tb3Agc2luY2UgQ1NFIHJhcmVseSBkZXRocmVhZHMgdGhlIGdyYXBoLgotICAgIGlmIChs
b2dDb21waWxhdGlvbkNoYW5nZXMoKSkKLSAgICAgICAgZGF0YUxvZ0YoIkRGRyBvcHRpbWl6YXRp
b24gZml4cG9pbnQgY29udmVyZ2VkIGluICV1IGl0ZXJhdGlvbnMuXG4iLCBjbnQpOworICAgIHBl
cmZvcm1EQ0UoZGZnKTsKICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcp
OwogCiAgICAgR3JhcGhEdW1wTW9kZSBtb2RlRm9yRmluYWxWYWxpZGF0ZSA9IER1bXBHcmFwaDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTQ0NzE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyByZWYnaW5nIG9uIHRoZSBjaGlsZHJlbiBi
ZWNhdXNlIHdlJ3JlIHN0ZWFsaW5nIHRoZW0gZnJvbQogICAgICAgICAgICAgICAgIC8vIHRoZSBv
cmlnaW5hbCBkaXZpc2lvbi4KICAgICAgICAgICAgICAgICBOb2RlKiBuZXdEaXZpc2lvbiA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNEb3VibGUsICpub2RlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNEb3VibGUsICpub2RlKTsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChEb3VibGVBc0ludDMyKTsK
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5pbml0aWFsaXplKEVkZ2UobmV3RGl2aXNp
b24sIEtub3duTnVtYmVyVXNlKSwgRWRnZSgpLCBFZGdlKCkpOwpAQCAtNTE4LDggKzUxOCw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICAgICAgICAg
IEVkZ2UgbmV3Q2hpbGRFZGdlID0gbG9naWNhbE5vdC0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChuZXdDaGlsZEVkZ2UtPmhhc0Jvb2xlYW5SZXN1bHQoKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5yZWYobmV3Q2hpbGRFZGdlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZGVyZWYobG9naWNhbE5vdCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEobmV3Q2hpbGRFZGdlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0b0JlVGFr
ZW4gPSBub2RlLT5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKQEAgLTU1Niw4ICs1NTQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyB3b3VsZCBoYXZlIGFscmVhZHkgZXhpdGVkIGJ5
IG5vdywgYnV0IGluc2VydCBhIGZvcmNlZCBleGl0IGp1c3QgdG8KICAgICAgICAgICAgICAgICAg
ICAgLy8gYmUgc2FmZS4KICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yY2VPU1JFeGl0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CkBAIC02MzgsOCArNjM1LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9k
ZS0+cHJlZGljdGlvbigpKTsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRz
TGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2Rl
T3JpZ2luLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBl
Y3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBub2RlLT5jb2RlT3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmls
ZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQpAQCAtNjUw
LDEwICs2NDcsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmZsYWdzKCkg
JiBOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAgICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgICAgIHNldFVzZUtpbmRB
bmRVbmJveElmUHJvZml0YWJsZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZSk7CiAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1v
ZGUoYXJyYXlNb2RlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogc3RvcmFnZSA9
IGNoZWNrQXJyYXkoYXJyYXlNb2RlLCBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCksIDAsIGxlbmd0aE5lZWRzU3RvcmFnZSwgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Cisg
ICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJheU1vZGUsIG5vZGUtPmNv
ZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3RoTmVlZHNTdG9yYWdlKTsK
ICAgICAgICAgICAgIGlmICghc3RvcmFnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIApAQCAtNzMwLDYgKzcyNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUGhhbnRv
bVB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgog
ICAgICAgICBjYXNlIExhc3ROb2RlVHlwZToKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKQEAgLTgzNyw3ICs4MzYsNyBAQCBwcml2YXRlOgogICAgICAgICBtX2luc2VydGlv
blNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgTm9kZSogY2hlY2tBcnJheShB
cnJheU1vZGUgYXJyYXlNb2RlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGUqIGFycmF5LCBO
b2RlKiBpbmRleCwgYm9vbCAoKnN0b3JhZ2VDaGVjaykoY29uc3QgQXJyYXlNb2RlJikgPSBjYW5D
U0VTdG9yYWdlLCBib29sIHNob3VsZEdlbmVyYXRlID0gdHJ1ZSkKKyAgICBOb2RlKiBjaGVja0Fy
cmF5KEFycmF5TW9kZSBhcnJheU1vZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJy
YXksIE5vZGUqIGluZGV4LCBib29sICgqc3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9
IGNhbkNTRVN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQoYXJyYXlNb2RlLmlzU3BlY2lm
aWMoKSk7CiAgICAgICAgIApAQCAtODU4LDIxICs4NTcsMjEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFJlZkNo
aWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5VG9TdHJ1Y3R1cmUsIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJy
YXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHN0cnVjdHVyZSksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBDZWxs
VXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEFycmF5aWZ5LCBjb2Rl
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEFy
cmF5aWZ5LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSksIGluZGV4RWRnZSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlKSB7CiAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIEVkZ2Uo
YXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleElu
QmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIENoZWNrQXJyYXksIGNv
ZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Q2hlY2tBcnJheSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtODgyLDE3ICs4ODEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IGlmIChhcnJheU1vZGUudXNlc0J1dHRlcmZseSgpKSB7CiAgICAgICAgICAgICByZXR1cm4gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywK
LSAgICAgICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZkNoaWxkcmVuIDogRG9udFJlZkNo
aWxkcmVuLAotICAgICAgICAgICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRS
ZWZOb2RlLAotICAgICAgICAgICAgICAgIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmln
aW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBFZGdlKGFycmF5LCBL
bm93bkNlbGxVc2UpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5CbG9jaywKLSAgICAg
ICAgICAgIHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0g
ICAgICAgICAgICBzaG91bGRHZW5lcmF0ZSA/IFJlZk5vZGUgOiBEb250UmVmTm9kZSwKLSAgICAg
ICAgICAgIFNwZWNOb25lLCBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7Cisg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgp
KSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYmxl
c3NBcnJheU9wZXJhdGlvbihFZGdlIGJhc2UsIEVkZ2UgaW5kZXgsIEVkZ2UmIHN0b3JhZ2VDaGls
ZCkKQEAgLTkwMiw4ICs4OTYsNyBAQCBwcml2YXRlOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBGb3Jj
ZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsIG5vZGUtPmNvZGVP
cmlnaW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTk4Miw3ICs5NzUsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBFZGdlIG9sZEVkZ2UgPSBlZGdlOwogICAgICAgICBFZGdlIG5l
d0VkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgCiAgICAgICAgIGlmIChuZXdFZGdlLnVz
ZUtpbmQoKSAhPSBJbnQzMlVzZSkgewpAQCAtOTkyLDggKzk4NCwxMCBAQCBwcml2YXRlOgogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKG5ld0VkZ2UtPnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSk7
CiAgICAgICAgIAotICAgICAgICBtX2dyYXBoLnJlZihuZXdFZGdlKTsKLSAgICAgICAgbV9ncmFw
aC5kZXJlZihvbGRFZGdlKTsKKyAgICAgICAgLy8gQ29tcGxldGVseSBraWxsIHRoZSBWYWx1ZVRv
SW50MzIuIFdlIHdvdWxkbid0IGhhdmUgdG8gZG8gY3JhenkgdGhpbmdzIGxpa2UgdGhpcworICAg
ICAgICAvLyBpZiBpdCB3ZXJlbid0IGZvciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTExMjM4LgorICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3Ap
OworICAgICAgICBub2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgCiAgICAgICAgIGVk
Z2UgPSBuZXdFZGdlOwogICAgIH0KQEAgLTEwMTQsNyArMTAwOCw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBpbmplY3RJbnQzMlRvRG91YmxlTm9kZShFZGdlJiBlZGdlLCBVc2VLaW5kIHVzZUtpbmQg
PSBOdW1iZXJVc2UsIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEJhY2t3YXJkU3Bl
Y3VsYXRpb24pCiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwg
UmVmTm9kZSwgU3BlY0RvdWJsZSwKKyAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjRG91
YmxlLCAKICAgICAgICAgICAgIGRpcmVjdGlvbiA9PSBCYWNrd2FyZFNwZWN1bGF0aW9uID8gSW50
MzJUb0RvdWJsZSA6IEZvcndhcmRJbnQzMlRvRG91YmxlLAogICAgICAgICAgICAgbV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgTnVtYmVyVXNlKSk7CiAgICAgICAg
IApAQCAtMTAzOSw5ICsxMDMzLDggQEAgcHJpdmF0ZToKICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihKU0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICBBU1NFUlQodmFsdWUu
aXNJbnQzMigpKTsKICAgICAgICAgZWRnZS5zZXROb2RlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2Rl
LCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsCi0gICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luLCBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkpKTsK
LSAgICAgICAgbV9ncmFwaC5kZXJlZihvbGROb2RlKTsKKyAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjSW50MzIsIEpTQ29uc3RhbnQsIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sCisg
ICAgICAgICAgICBPcEluZm8oY29kZUJsb2NrKCktPmFkZE9yRmluZENvbnN0YW50KHZhbHVlKSkp
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB0cnVuY2F0ZUNvbnN0YW50c0lmTmVjZXNzYXJ5KE5v
ZGUqIG5vZGUsIEFkZFNwZWN1bGF0aW9uTW9kZSBtb2RlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBA
IEdyYXBoOjpHcmFwaChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEMKICAgICAsIG1fZml4cG9p
bnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKICAgICAsIG1fZm9ybShMb2FkU3RvcmUpCiAgICAgLCBt
X3VuaWZpY2F0aW9uU3RhdGUoTG9jYWxseVVuaWZpZWQpCisgICAgLCBtX3JlZkNvdW50U3RhdGUo
RXZlcnl0aGluZ0lzTGl2ZSkKIHsKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKIH0KQEAg
LTMxMiw3ICszMTMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0m
CiB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgZGF0YUxvZygiREZH
IGZvciAiLCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklU
KSwgIjpcbiIpOwotICAgIGRhdGFMb2coIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRT
dGF0ZSwgIjsgRm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlm
aWNhdGlvblN0YXRlLCAiXG4iKTsKKyAgICBkYXRhTG9nKCIgIEZpeHBvaW50IHN0YXRlOiAiLCBt
X2ZpeHBvaW50U3RhdGUsICI7IEZvcm06ICIsIG1fZm9ybSwgIjsgVW5pZmljYXRpb24gc3RhdGU6
ICIsIG1fdW5pZmljYXRpb25TdGF0ZSwgIjsgUmVmIGNvdW50IHN0YXRlOiAiLCBtX3JlZkNvdW50
U3RhdGUsICJcbiIpOwogICAgIAogICAgIE5vZGUqIGxhc3ROb2RlID0gMDsKICAgICBmb3IgKHNp
emVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CkBAIC0zNDYsMTYgKzM0Nyw2
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICB9CiB9CiAKLXZvaWQg
R3JhcGg6OnJlZkNoaWxkcmVuKE5vZGUqIG9wKQotewotICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKCp0aGlzLCBvcCwgcmVmKTsKLX0KLQotdm9pZCBHcmFwaDo6ZGVyZWZDaGlsZHJlbihOb2Rl
KiBvcCkKLXsKLSAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTigqdGhpcywgb3AsIGRlcmVmKTsK
LX0KLQogdm9pZCBHcmFwaDo6ZGV0aHJlYWQoKQogewogICAgIGlmIChtX2Zvcm0gPT0gTG9hZFN0
b3JlKQpAQCAtMzkwLDY3ICszODEsNiBAQCB2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVj
dG9yPEJsb2NrCiAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRl
eCk7CiB9CiAKLXZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKLXsKLSAgICBTYW1wbGluZ1Jl
Z2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEdhcmJhZ2UgQ29sbGVjdGlvbiIpOwotICAgIAotICAg
IC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgotICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsg
KytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBp
bmRleEluQmxvY2stLTspCi0gICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0
UmVmQ291bnQoMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhp
cy5zaXplKCk7IHBoaUluZGV4LS07KQotICAgICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5kZXhd
LT5zZXRSZWZDb3VudCgwKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IGZpbmQgdGhlIHJvb3Rz
OiB0aGUgbm9kZXMgdGhhdCBhcmUgbXVzdC1nZW5lcmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMg
dG8KLSAgICAvLyAxIGFuZCBwdXQgdGhlbSBvbiB0aGUgd29ya2xpc3QuCi0gICAgVmVjdG9yPE5v
ZGUqLCAxMjg+IHdvcmtsaXN0OwotICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7Ci0gICAgICAgIGlm
ICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTspIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAgICAgICAgIGlm
ICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50KDEpOwotICAgICAgICAgICAg
d29ya2xpc3QuYXBwZW5kKG5vZGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHdoaWxl
ICghd29ya2xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSB3b3JrbGlzdC5s
YXN0KCk7Ci0gICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJdCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlz
dCB1bmxlc3MgaXQncyByZWYnZWQuCi0gICAgICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5m
aXJzdENoaWxkKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLT5maXJzdENoaWxk
KCkgKyBub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICsrY2hpbGRJZHgpIHsK
LSAgICAgICAgICAgICAgICBpZiAoIW1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZE5vZGUg
PSBtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGNoaWxkTm9kZS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQoY2hpbGROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDEoKSkgewotICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgICAgIHdvcmtsaXN0
LmFwcGVuZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKS0+cG9zdGZpeFJl
ZigpKQotICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQzKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDMoKS0+cG9zdGZpeFJlZigpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNoaWxkMygpLm5vZGUoKSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCiB2
b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewogICAgIFZlY3RvcjxCbG9ja0lu
ZGV4LCAxNj4gd29ya2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDgzICs5MiwzNCBAQCBwdWJsaWM6CiAgICAgR3JhcGgo
SlNHbG9iYWxEYXRhJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4
LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgfkdyYXBo
KCk7CiAgICAgCi0gICAgLy8gTWFyayBhIG5vZGUgYXMgYmVpbmcgcmVmZXJlbmNlZC4KLSAgICBO
b2RlKiByZWYoTm9kZSogbm9kZSkKKyAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5v
ZGUqIG5ld05vZGUpCiAgICAgewotICAgICAgICAvLyBJZiB0aGUgdmFsdWUgKGJlZm9yZSBpbmNy
ZW1lbnRpbmcpIHdhcyBhdCByZWZDb3VudCB6ZXJvIHRoZW4gd2UgbmVlZCB0byByZWYgaXRzIGNo
aWxkcmVuLgotICAgICAgICBpZiAoIW5vZGUtPnBvc3RmaXhSZWYoKSkKLSAgICAgICAgICAgIHJl
ZkNoaWxkcmVuKG5vZGUpOwotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0gICAgRWRnZSBy
ZWYoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmVmKGVkZ2Uubm9kZSgpKTsKLSAgICAgICAg
cmV0dXJuIGVkZ2U7Ci0gICAgfQotICAgIEVkZ2UgcmVmKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAg
ewotICAgICAgICByZXR1cm4gcmVmKGVkZ2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGRlcmVm
KE5vZGUqIG5vZGUpCi0gICAgewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgaWYgKCFu
b2RlLT5yZWZDb3VudCgpKQotICAgICAgICAgICAgZHVtcCgpOwotI2VuZGlmCi0gICAgICAgIGlm
IChub2RlLT5wb3N0Zml4RGVyZWYoKSA9PSAxKQotICAgICAgICAgICAgZGVyZWZDaGlsZHJlbihu
b2RlKTsKLSAgICB9Ci0gICAgdm9pZCBkZXJlZihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBk
ZXJlZihlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIHZvaWQgZGVyZWYoTm9kZSosIEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIGRlcmVmKGVkZ2UpOwotICAgIH0KLSAgICAKLSAgICAvLyBXaGVu
IGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkg
cmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgotICAg
IHZvaWQgcmVmQ2hpbGRyZW4oTm9kZSopOwotICAgIHZvaWQgZGVyZWZDaGlsZHJlbihOb2RlKik7
Ci0KLSAgICB2b2lkIGNoYW5nZUNoaWxkKEVkZ2UmIGVkZ2UsIE5vZGUqIG5ld05vZGUsIGJvb2wg
Y2hhbmdlUmVmID0gdHJ1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChjaGFuZ2VSZWYpIHsKLSAgICAg
ICAgICAgIHJlZihuZXdOb2RlKTsKLSAgICAgICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgpKTsKLSAg
ICAgICAgfQogICAgICAgICBlZGdlLnNldE5vZGUobmV3Tm9kZSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVm
ID0gdHJ1ZSkKKyAgICB2b2lkIGNoYW5nZUVkZ2UoRWRnZSYgZWRnZSwgRWRnZSBuZXdFZGdlKQog
ICAgIHsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikgewotICAgICAgICAgICAgcmVmKG5ld0VkZ2Up
OwotICAgICAgICAgICAgZGVyZWYoZWRnZSk7Ci0gICAgICAgIH0KICAgICAgICAgZWRnZSA9IG5l
d0VkZ2U7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwg
Tm9kZSogb2xkTm9kZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYpCisgICAgdm9pZCBj
b21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBOb2RlKiBuZXdOb2RlKQog
ICAgIHsKICAgICAgICAgaWYgKGVkZ2Uubm9kZSgpICE9IG9sZE5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5ld05vZGUsIGNoYW5nZVJlZik7Cisg
ICAgICAgIGNoYW5nZUNoaWxkKGVkZ2UsIG5ld05vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ugb2xkRWRnZSwgRWRnZSBuZXdFZGdlLCBi
b29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVkZ2UmIGVkZ2UsIEVkZ2Ug
b2xkRWRnZSwgRWRnZSBuZXdFZGdlKQogICAgIHsKICAgICAgICAgaWYgKGVkZ2UgIT0gb2xkRWRn
ZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2hhbmdlRWRnZShlZGdlLCBuZXdFZGdl
LCBjaGFuZ2VSZWYpOworICAgICAgICBjaGFuZ2VFZGdlKGVkZ2UsIG5ld0VkZ2UpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNsZWFyQW5kRGVyZWZDaGlsZChOb2RlKiBub2RlLCB1bnNpZ25lZCBp
bmRleCkKICAgICB7CiAgICAgICAgIGlmICghbm9kZS0+Y2hpbGRyZW4uY2hpbGQoaW5kZXgpKQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZXJlZihub2RlLT5jaGlsZHJlbi5jaGlsZChp
bmRleCkpOwogICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZChpbmRleCwgRWRnZSgpKTsK
ICAgICB9CiAgICAgdm9pZCBjbGVhckFuZERlcmVmQ2hpbGQxKE5vZGUqIG5vZGUpIHsgY2xlYXJB
bmREZXJlZkNoaWxkKG5vZGUsIDApOyB9CkBAIC0xNzcsMTggKzEyOCwxNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBib29sIHNob3VsZEdlbmVyYXRlID0gbm9kZS0+c2hvdWxkR2VuZXJhdGUoKTsKICAgICAg
ICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGRJZHggPCBub2Rl
LT5maXJzdENoaWxkKCkgKyBub2RlLT5udW1DaGlsZHJlbigpOyBjaGlsZElkeCsrKQotICAgICAg
ICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdlKG1fdmFyQXJnQ2hpbGRyZW5bY2hp
bGRJZHhdLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1
dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQxKCks
IHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdl
KG5vZGUtPmNoaWxkMigpLCBzaG91bGRHZW5lcmF0ZSk7Ci0gICAgICAgICAgICBwZXJmb3JtU3Vi
c3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDMoKSwgc2hvdWxkR2VuZXJhdGUpOworICAgICAg
ICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQzKCkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2UoRWRn
ZSYgY2hpbGQsIGJvb2wgYWRkUmVmKQorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVk
Z2UoRWRnZSYgY2hpbGQpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQg
aXMgYWN0dWFsbHkgdW51c2VkLgogICAgICAgICBpZiAoIWNoaWxkKQpAQCAtMjA0LDIyICsxNTQs
MTMgQEAgcHVibGljOgogICAgICAgICAvLyBUaGVyZSBpcyBkZWZpbml0ZWx5IGEgcmVwbGFjZW1l
bnQuIEFzc2VydCB0aGF0IHRoZSByZXBsYWNlbWVudCBkb2VzIG5vdAogICAgICAgICAvLyBoYXZl
IGEgcmVwbGFjZW1lbnQuCiAgICAgICAgIEFTU0VSVCghY2hpbGQtPnJlcGxhY2VtZW50KTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChhZGRSZWYpCi0gICAgICAgICAgICByZWYoY2hpbGQpOwogICAg
IH0KICAgICAKICNkZWZpbmUgREZHX0RFRklORV9BRERfTk9ERSh0ZW1wbGF0ZVByZSwgdGVtcGxh
dGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFsdWVB
cmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRk
Tm9kZShSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2Rl
TW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBc
CisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogYWRkTm9kZShT
cGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7
IFwKICAgICAgICAgTm9kZSogbm9kZSA9IG5ldyAobV9hbGxvY2F0b3IpIE5vZGUodmFsdWVBcmdz
KTsgXAogICAgICAgICBub2RlLT5wcmVkaWN0KHR5cGUpOyBcCi0gICAgICAgIGlmIChub2RlLT5m
bGFncygpICYgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwK
LSAgICAgICAgaWYgKHJlZk5vZGVNb2RlID09IFJlZk5vZGUpIFwKLSAgICAgICAgICAgIG5vZGUt
PnJlZigpOyBcCi0gICAgICAgIGlmIChyZWZDaGlsZHJlbk1vZGUgPT0gUmVmQ2hpbGRyZW4pIFwK
LSAgICAgICAgICAgIHJlZkNoaWxkcmVuKG5vZGUpOyBcCiAgICAgICAgIHJldHVybiBub2RlOyBc
CiAgICAgfQogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdfREVGSU5FX0FE
RF9OT0RFKQpAQCAtMjI3LDEyICsxNjgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRldGhyZWFk
KCk7CiAgICAgCi0gICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJl
bmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0aAotICAgIC8vIGxvY2FsIHZhcmlhYmxl
cy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2NhbCB2YXJpYWJsZSByZWZlcmVuY2VzIGNh
biBmb3JtCi0gICAgLy8gY3ljbGVzLCBhbmQgaGVuY2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzIG5v
dCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUKLSAgICAvLyByZWZlcmVuY2UgY291bnRzIGFj
Y29yZGluZyB0byByZWFjaGFiaWxpdHkuCi0gICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOwotICAg
IAogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3Rh
bnROdW1iZXIpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKQEAg
LTY2OSwxOSArNjA0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmIChub2RlLT5mbGFncygp
ICYgTm9kZUhhc1ZhckFyZ3MpIHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7ICsrY2hpbGRJZHgpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCEhbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChtX3ZhckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSwgb2xkVGhpbmcsIG5l
d1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXBhcmVBbmRTd2FwKG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3
VGhpbmcpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJl
bi5jaGlsZDEoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRU
aGluZywgbmV3VGhpbmcpOwogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNo
aWxkcmVuLmNoaWxkMigpLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpOworICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCks
IG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMygpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9k
ZS0+Y2hpbGRyZW4uY2hpbGQzKCksIG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSk7CisgICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGls
ZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc1
NSw2ICs2OTAsNyBAQCBwdWJsaWM6CiAgICAgT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSBtX2Zp
eHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKICAgICBVbmlmaWNhdGlvblN0YXRl
IG1fdW5pZmljYXRpb25TdGF0ZTsKKyAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsK
IHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5k
ZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNj
ZXNzb3JJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDkgKzcyLDkgQEAgcHVibGlj
OgogICAgIH0KIAogI2RlZmluZSBERkdfREVGSU5FX0lOU0VSVF9OT0RFKHRlbXBsYXRlUHJlLCB0
ZW1wbGF0ZVBvc3QsIHR5cGVQYXJhbXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2
YWx1ZUFyZ3MpIFwKLSAgICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2Rl
KiBpbnNlcnROb2RlKHNpemVfdCBpbmRleCwgUmVmQ2hpbGRyZW5Nb2RlIHJlZkNoaWxkcmVuTW9k
ZSwgUmVmTm9kZU1vZGUgcmVmTm9kZU1vZGUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJh
bXNDb21tYSB2YWx1ZVBhcmFtcykgXAorICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxh
dGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6ZV90IGluZGV4LCBTcGVjdWxhdGVkVHlwZSB0eXBl
IHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgcmV0dXJu
IGluc2VydChpbmRleCwgbV9ncmFwaC5hZGROb2RlKHJlZkNoaWxkcmVuTW9kZSwgcmVmTm9kZU1v
ZGUsIHR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpKTsgXAorICAgICAgICByZXR1cm4g
aW5zZXJ0KGluZGV4LCBtX2dyYXBoLmFkZE5vZGUodHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVl
QXJncykpOyBcCiAgICAgfQogICAgIERGR19WQVJJQURJQ19URU1QTEFURV9GVU5DVElPTihERkdf
REVGSU5FX0lOU0VSVF9OT0RFKQogI3VuZGVmIERGR19ERUZJTkVfSU5TRVJUX05PREUKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyAr
OTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQog
ICAgICAgICAsIGNoaWxkcmVuKGNoaWxkcmVuKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVy
KEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgwKQorICAgICAg
ICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAg
ewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMDIsNyArMTAyLDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykK
ICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAg
ICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwg
bV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgIHsKICAgICAgICAgc2V0T3BBbmREZWZhdWx0Rmxh
Z3Mob3ApOwpAQCAtMTE0LDcgKzExNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgOiBjb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRyZW4oQWRqYWNlbmN5TGlzdDo6Rml4
ZWQsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIo
SW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAg
ICwgbV9yZWZDb3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQogICAgICAg
ICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CkBAIC0xMjcsNyArMTI3LDcgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBj
aGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAg
ICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9v
cEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNpZ25l
ZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCkBAIC0x
NDEsNyArMTQxLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwgZmlyc3RD
aGlsZCwgbnVtQ2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZp
cnR1YWxSZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZD
b3VudCgxKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKICAgICAgICAgLCBtX29w
SW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgICAgICwgbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQpAQCAtMjcyLDggKzI3Miw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICB2
b2lkIGNvbnZlcnRUb0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAg
ICAgICAgbV9vcCA9IEpTQ29uc3RhbnQ7Ci0gICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11c3RH
ZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fcmVmQ291bnQtLTsKICAgICAgICAgbV9mbGFncyAmPSB+
KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9kZUNsb2JiZXJzV29ybGQp
OwogICAgICAgICBtX29wSW5mbyA9IGNvbnN0YW50TnVtYmVyOwogICAgICAgICBjaGlsZHJlbi5y
ZXNldCgpOwpAQCAtMjgyLDggKzI4MCw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICB2b2lkIGNvbnZl
cnRUb0dldExvY2FsVW5saW5rZWQoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQogICAgIHsKICAgICAg
ICAgbV9vcCA9IEdldExvY2FsVW5saW5rZWQ7Ci0gICAgICAgIGlmIChtX2ZsYWdzICYgTm9kZU11
c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fcmVmQ291bnQtLTsKICAgICAgICAgbV9mbGFncyAm
PSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9kZUNsb2JiZXJzV29y
bGQpOwogICAgICAgICBtX29wSW5mbyA9IGxvY2FsOwogICAgICAgICBjaGlsZHJlbi5yZXNldCgp
OwpAQCAtMzg2LDExICszODIsMjcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXND
b25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNCb29sZWFuKCk7CiAg
ICAgfQogICAgIAorICAgIGJvb2wgY29udGFpbnNNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIE1vdkhp
bnQ6CisgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgorICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBib29sIGhhc1Zh
cmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBN
b3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgY2FzZSBab21i
aWVIaW50OgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAg
ICAgICAgY2FzZSBGbHVzaDoKQEAgLTk1Miw2ICs5NjQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAg
ICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2Ug
TW92SGludEFuZENoZWNrOgogICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CiAgICAgICAgIGNh
c2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgpAQCAt
OTczLDEyICs5ODgsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX3JlZkNvdW50
OwogICAgIH0KIAotICAgIE5vZGUqIHJlZigpCi0gICAgewotICAgICAgICBtX3JlZkNvdW50Kys7
Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQogICAgIHVuc2lnbmVkIHBvc3RmaXhSZWYo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQrKzsKQEAgLTk5NCwxOCArMTAwMyw2
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9yZWZDb3VudCA9IHJlZkNvdW50OwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGRlcmVmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3JlZkNvdW50
KTsKLSAgICAgICAgLS1tX3JlZkNvdW50OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBwb3N0
Zml4RGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOwotICAgICAgICBy
ZXR1cm4gbV9yZWZDb3VudC0tOwotICAgIH0KLSAgICAKICAgICBFZGdlJiBjaGlsZDEoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNDQ3MTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDYgKzU5LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8q
IFZhcmlhYmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gKi9c
CiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFNldExvY2Fs
LCBOb2RlRXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oTW92SGludEFuZENoZWNrLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZUV4aXRzRm9yd2FyZCkgXAorICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVE
b2VzTm90RXhpdCkgXAorICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhOb3AsIE5v
ZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKFBoaSwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJl
bGV2YW50VG9PU1IpIFwKQEAgLTc2LDcgKzc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIC8qIEhpbnQgdGhhdCBpbmxpbmluZyBiZWdpbnMgaGVyZS4gTm8gY29kZSBp
cyBnZW5lcmF0ZWQgZm9yIHRoaXMgbm9kZS4gSXQncyBvbmx5ICovXAogICAgIC8qIHVzZWQgZm9y
IGNvcHlpbmcgT1NSIGRhdGEgaW50byBpbmxpbmUgZnJhbWUgZGF0YSwgdG8gc3VwcG9ydCByZWlm
aWNhdGlvbiBvZiAqL1wKICAgICAvKiBjYWxsIGZyYW1lcyBvZiBpbmxpbmVkIGZ1bmN0aW9ucy4g
Ki9cCi0gICAgbWFjcm8oSW5saW5lU3RhcnQsIDAgfCBOb2RlRG9lc05vdEV4aXQpIFwKKyAgICBt
YWNybyhJbmxpbmVTdGFydCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAog
ICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wKICAgICBtYWNy
byhCaXRBbmQsIE5vZGVSZXN1bHRJbnQzMiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA2LDcgKzIwNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHByZWRpY3Rp
b24pCiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24ocHJlZGljdGlv
bik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVVc2VkQXNJbnRMb2NhbGx5KTsKKyAgICAgICAg
ICAgIC8vIEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0
IHRoZSB2YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKKyAgICAgICAgICAgIC8vIGFuZCBz
byB3ZSB3b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2Vydmlu
ZyIgbnVtYmVycyBldmVuIGlmIGFsbAorICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVl
IGFyZSBkb2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhp
cyBhdCBzb21lCisgICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhl
IGRhdGEgZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCisg
ICAgICAgICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmlj
aWFsIGZvciBiZW5jaG1hcmtzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBjaGFuZ2VkIHw9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VGbGFncygoZmxhZ3MgJiB+Tm9kZVVzZWRBc0ludExv
Y2FsbHkpIHwgTm9kZVVzZWRBc051bWJlcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0yMTQsMTIgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEt
PnByZWRpY3Qobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSk7CiAKLSAgICAgICAgICAgIC8v
IEFzc3VtZSBjb25zZXJ2YXRpdmVseSB0aGF0IGEgU2V0TG9jYWwgaW1wbGllcyB0aGF0IHRoZSB2
YWx1ZSBtYXkgZmxvdyB0aHJvdWdoIGEgbG9vcCwKLSAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSB3
b3VsZCBoYXZlIG92ZXJmbG93IGxlYWRpbmcgdG8gdGhlIHByb2dyYW0gIm9ic2VydmluZyIgbnVt
YmVycyBldmVuIGlmIGFsbAotICAgICAgICAgICAgLy8gdXNlcnMgb2YgdGhlIHZhbHVlIGFyZSBk
b2luZyB0b0ludDMyLiBJdCBtaWdodCBiZSB3b3J0aHdoaWxlIHRvIHJldmlzaXQgdGhpcyBhdCBz
b21lCi0gICAgICAgICAgICAvLyBwb2ludCBhbmQgYWN0dWFsbHkgY2hlY2sgaWYgdGhlIGRhdGEg
ZmxvdyBpbnZvbHZlcyBsb29wcywgYnV0IHJpZ2h0IG5vdyBJIGRvbid0IHRoaW5rCi0gICAgICAg
ICAgICAvLyB3ZSBoYXZlIGV2aWRlbmNlIHRoYXQgdGhpcyB3b3VsZCBiZSBiZW5lZmljaWFsIGZv
ciBiZW5jaG1hcmtzLgotICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVy
Z2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsYWdzKCkgfCBOb2RlVXNlZEFzTnVtYmVyKTsK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3ModmFyaWFi
bGVBY2Nlc3NEYXRhLT5mbGFncygpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTczNyw3ICs3MzgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBD
aGVja0FycmF5OgogICAgICAgICBjYXNlIEFycmF5aWZ5OgogICAgICAgICBjYXNlIEFycmF5aWZ5
VG9TdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2UgSWRlbnRpdHk6IHsKKyAgICAgICAgY2FzZSBJZGVu
dGl0eToKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVj
azoKKyAgICAgICAgY2FzZSBab21iaWVIaW50OiB7CiAgICAgICAgICAgICAvLyBUaGlzIG5vZGUg
c2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxhdGlvbi4gSXQg
aXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZvbGxvd3MgdGhp
cyBwaGFzZS4KICAgICAgICAgICAgIENSQVNIKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE0
NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMjIsNiArMjAyMiwyMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgTW92SGludEFuZENoZWNrOiB7CisgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2so
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBJbmxpbmVT
dGFydDogeworICAgICAgICBjb21waWxlSW5saW5lU3RhcnQobm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBa
b21iaWVIaW50OiB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgLy8gU2V0
TG9jYWwgZG91YmxlcyBhcyBhIGhpbnQgYXMgdG8gd2hlcmUgYSBub2RlIHdpbGwgYmUgc3RvcmVk
IGFuZAogICAgICAgICAvLyBhcyBhIHNwZWN1bGF0aW9uIHBvaW50LiBTbyBiZWZvcmUgd2Ugc3Bl
Y3VsYXRlIG1ha2Ugc3VyZSB0aGF0IHdlCkBAIC00OTQyLDcgKzQ5NTgsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwog
ICAgICAgICBicmVhazsKIAotICAgIGNhc2UgSW5saW5lU3RhcnQ6CiAgICAgY2FzZSBOb3A6CiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NjgsNiArMTk2
OCwyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorICAgICAgICAKKyAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICBjb21waWxl
TW92SGludEFuZENoZWNrKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgSW5saW5lU3RhcnQ6IHsKKyAgICAgICAgY29tcGlsZUlubGluZVN0YXJ0KG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAgICAgCisgICAgY2FzZSBNb3ZI
aW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdoZXJlIGEgbm9k
ZSB3aWxsIGJlIHN0b3JlZCBhbmQKQEAgLTQ3ODgsNyArNDgwNCw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIElubGluZVN0YXJ0OgogICAgIGNhc2UgTm9w
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxNDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFQKICAgICBpZiAoIXZhbHVlUmVjb3Zl
cnkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBh
IFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKICAgICAgICAgLy8gU2V0TG9j
YWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbi4KLSAgICAgICAgaWYgKG1fY3VycmVudE5vZGUt
Pm9wKCkgIT0gU2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5jb250YWlu
c01vdkhpbnQoKSkgewogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBtX2ppdC5ncmFwaCgp
Lm1fYmxvY2tzW21fYmxvY2tdLT5hdChtX2luZGV4SW5CbG9jayAtIDEpOwotICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9jYWwpOworICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGlu
dCgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2Rl
T3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NS
RXhpdFQKICAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGlsZDEoKS0+Y2hpbGQxKCkgPT0gbV9j
dXJyZW50Tm9kZSk7CiAgICAgZWxzZQogICAgICAgICBBU1NFUlQoc2V0TG9jYWwtPmNoaWxkMSgp
ID09IG1fY3VycmVudE5vZGUpOwotICAgIEFTU0VSVChzZXRMb2NhbC0+b3AoKSA9PSBTZXRMb2Nh
bCk7CisgICAgQVNTRVJUKHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7CiAgICAgQVNTRVJU
KHNldExvY2FsLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogCiAg
ICAgTm9kZSogbmV4dE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChz
ZXRMb2NhbEluZGV4SW5CbG9jayArIDEpOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTW92SGludChOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IFNl
dExvY2FsKTsKKyAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+b3Ao
KSAhPSBab21iaWVIaW50KTsKICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS0+bG9j
YWwoKTsKIApAQCAtMTU4MCw2ICsxNTgwLDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNb3ZIaW50KE5vZGUKICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPmxvY2FsKCkpKTsKIH0KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnRBbmRDaGVjayhOb2RlKiBub2RlKQoreworICAg
IGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVJbmxpbmVTdGFydChOb2RlKiBub2RlKQoreworICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOworICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG5vZGUtPmFyZ3VtZW50
UG9zaXRpb25TdGFydCgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKKyAgICAgICAgVmFs
dWVSZWNvdmVyeSByZWNvdmVyeTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJlZChh
cmd1bWVudFRvT3BlcmFuZChpKSkpCisgICAgICAgICAgICByZWNvdmVyeSA9IFZhbHVlUmVjb3Zl
cnk6OmFscmVhZHlJbkpTU3RhY2soKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBcmd1
bWVudFBvc2l0aW9uJiBhcmd1bWVudFBvc2l0aW9uID0KKyAgICAgICAgICAgICAgICBtX2ppdC5n
cmFwaCgpLm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07Cisg
ICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgICAgIGlmICghYXJn
dW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCisgICAgICAg
ICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAg
ICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKElu
dDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGFy
Z3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spOworICAgICAgICAgICAgZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQorICAgICAg
ICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjayk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKHZhbHVlU291cmNlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBUaGUgcmVjb3Zl
cnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVu
CisgICAgICAgIC8vIHN0b3JlZCBpbnRvIHRoZSBzdGFjayBhdCB0aGUgcmlnaHQgcGxhY2UsIG9y
IHRvIGEgY29uc3RhbnQsCisgICAgICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMgY29kZSBpc24n
dCBzbWFydCBlbm91Z2ggdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCisgICAgICAgIC8vIFRoZSBl
eGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVk
IHRvIGJlCisgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KKyNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCJcblJlY292ZXJ5IGZvciBhcmd1bWVudCAlZDog
IiwgaSk7CisgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyNlbmRpZgor
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5OworICAgIH0K
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKIHsK
ICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xNjc4LDUwICsxNzI2LDE5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAg
ICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAgICAgICAgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fY3VycmVudE5v
ZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOwotICAgICAgICAgICAgICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2Fs
bEZyYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eSByZWNvdmVyeTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDYXB0dXJl
ZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVy
eSA9IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0aW9uJiBhcmd1
bWVudFBvc2l0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5ncmFwaCgp
Lm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghYXJndW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2libGUoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZh
bHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50
UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3VtZW50UG9z
aXRpb24ucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNv
dXJjZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJlZGljdGlv
bigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291
cmNlKENlbGxJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNC
b29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9vbGVhbklu
SlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KHZhbHVlU291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAvLyBUaGUgcmVjb3Zlcnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBo
YXMgYWxyZWFkeSBiZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBpbnRvIHRoZSBz
dGFjayBhdCB0aGUgcmlnaHQgcGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMgY29kZSBpc24ndCBzbWFydCBlbm91Z2ggdG8g
aGFuZGxlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBleGNlcHRp
b24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGJl
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KLSNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcblJlY292ZXJ5
IGZvciBhcmd1bWVudCAlZDogIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5LmR1
bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5OwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICAg
ICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBtX2N1cnJlbnROb2RlLT5sb2NhbCgpOworICAgICAg
ICAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwo
bV9jdXJyZW50Tm9kZS0+bG9jYWwoKSwgRGF0YUZvcm1hdERlYWQpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChtX2N1
cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5h
cHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAx
NDQ3MTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlKE5vZGUqKTsKICAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGUqKTsKLSAgICB2
b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYp
OwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTY4Miw2ICs2ODEsMTAgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbGFzdE5vZGUtPm9wKCkgPT0gQnJhbmNoICYmIGxhc3RO
b2RlLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlID8gYmxvY2stPnNpemUoKSAtIDEgOiBVSU5U
X01BWDsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlKik7CisgICAg
dm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJbmxp
bmVTdGFydChOb2RlKik7CisKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMyVG9OdW1iZXIo
Tm9kZSopOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOSArNzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnZvdGUoVm90ZVN0cnVj
dHVyZUNoZWNrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2VsbFNw
ZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNob3VsZENvbnNpZGVyRm9ySG9pc3RpbmcodmFyaWFibGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNr
KHZhcmlhYmxlLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTE4LDkgKzExNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+dm90ZShWb3RlT3RoZXIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNr
SG9pc3RpbmdGYWlsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFyaWFibGUtPnBy
ZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZENvbnNpZGVy
Rm9ySG9pc3RpbmcodmFyaWFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUs
IDApOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzIsOSArMTI4LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBjaGVjayB0aGF0IHdv
dWxkIGNvbnRyYXZlbmUgY2hlY2tzIHRoYXQgYXJlCiAgICAgICAgICAgICAgICAgICAgIC8vIGFs
cmVhZHkgYmVpbmcgcGVyZm9ybWVkLgogICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxlLT5zdHJ1Y3R1
cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+cHJl
ZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb25zaWRlckZvckhv
aXN0aW5nKHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2NrID0gMDsgc3ViSW5k
ZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2spIHsKQEAgLTI4OCwx
MSArMjgyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVmQ2hpbGRyZW4s
IERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2Uobm9kZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgdmFyaWFibGUtPnBy
ZWRpY3Rpb24oKSwgR2V0TG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBjb2Rl
T3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKGdldExvY2FsLCBDZWxsVXNlKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPT0gbm9kZSkK
QEAgLTMyMCwxNCArMzE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgRWRnZSBj
aGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwg
U2V0TG9jYWwsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFy
aWFibGUpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIGNoaWxkMSk7
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3RydWN0dXJlIHRv
IGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAg
IC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVjdXRpbmcgdGhl
IGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERv
bnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0
ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgRm9yd2FyZENo
ZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KQEAgLTM0Myw2ICszMzcsMTcgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKKyAgICBib29sIHNob3VsZENvbnNpZGVyRm9ySG9pc3RpbmcoVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIGlmICghdmFyaWFibGUtPnNob3Vs
ZFVuYm94SWZQb3NzaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAodmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJpYWJsZS0+
cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgbm90aWNlU3RydWN0dXJlQ2hlY2soVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAg
ICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46OkFkZFJlc3VsdCBy
ZXN1bHQgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDE0NDcxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTAgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAg
aWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBwaGlzSW5UaGlz
QmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBU
aHJlYWRlZENQUyB8fCAhbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpCiAgICAg
ICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQobm9kZSksIG5v
ZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG15UmVmQ291bnRzLmdldChub2RlKSA/IG5vZGUt
PmFkanVzdGVkUmVmQ291bnQoKSA6IHRydWUpOworICAgICAgICAgICAgICAgICAgICBWX0VRVUFM
KChub2RlKSwgbm9kZS0+cmVmQ291bnQoKSwgMSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikgewogICAgICAg
ICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGopOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWVkZ2UpCkBAIC0xNzgsNyArMTc4LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2Ut
Pm9wKCkgPT0gUGhpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5vcCgpID09IFpv
bWJpZUhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGlu
dAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBNb3ZIaW50QW5kQ2hl
Y2spOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHBoaXNJ
blRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTE4Nyw2ICsxOTAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSwgZWRn
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBTZXRMb2NhbAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9tYmllSGludAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGludEFuZENoZWNr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBTZXRBcmd1bWVu
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjAsNiArMjI2LDkgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50QW5kQ2hlY2sK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBab21iaWVI
aW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9wKCkgPT0gU2V0
QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09IGVkZ2Uubm9k
ZSgpKSB7CkBAIC0yODcsNiArMjk2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgR2V0TG9jYWwncyB0aGF0IHdlIGtub3cgdG8gYmUg
ZGVhZCwgYnV0IHRoYXQgdGhlIGdyYXBoCisgICAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3Qg
eWV0IGtub3cgdG8gYmUgZGVhZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFteVJlZkNvdW50
cy5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQogICAgICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2NhbFBvc2l0aW9u
cy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAgICAgICAgICAgICAgICAg
IGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191551</attachid>
            <date>2013-03-05 13:34:14 -0800</date>
            <delta_ts>2013-03-05 13:53:33 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102314</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ0ODAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MiBA
QAorMjAxMy0wMy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBEQ0UgbWlnaHQgZWxpbWluYXRlIGNoZWNrcyB1bnNvdW5kbHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTM4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBnZXRzIHJpZCBv
ZiBhbGwgZWFnZXIgcmVmZXJlbmNlIGNvdW50aW5nLCBhbmQgZG9lcyBhbGwgZGVhZCBjb2RlIGVs
aW1pbmF0aW9uCisgICAgICAgIGluIG9uZSBwaGFzZSAtIHRoZSBEQ0VQaGFzZS4gVGhpcyBwaGFz
ZSBhbHNvIHNldHMgdXAgdGhlIG5vZGUgcmVmZXJlbmNlIGNvdW50cywKKyAgICAgICAgd2hpY2gg
YXJlIHRoZW4gdXNlZCBub3QganVzdCBmb3IgRENFIGJ1dCBhbHNvIHJlZ2lzdGVyIGFsbG9jYXRp
b24gYW5kIHN0YWNrIHNsb3QKKyAgICAgICAgYWxsb2NhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IERvaW5nIHRoaXMgcmVxdWlyZWQgYSBudW1iZXIgb2Ygc3VyZ2ljYWwgY2hhbmdlcyBpbiBwbGFj
ZXMgdGhhdCBwcmV2aW91c2x5IHJlbGllZAorICAgICAgICBvbiBhbHdheXMgaGF2aW5nIGxpdmVu
ZXNzIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIHN0cnVjdHVyZSBjaGVjayBob2lzdGlu
ZworICAgICAgICBwaGFzZSBtdXN0IG5vdyBjb25zdWx0IHdoZXRoZXIgYSBWYXJpYWJsZUFjY2Vz
c0RhdGEgaXMgcHJvZml0YWJsZSBmb3IgdW5ib3hpbmcgdG8KKyAgICAgICAgbWFrZSBzdXJlIHRo
YXQgaXQgZG9lc24ndCB0cnkgdG8gZG8gaG9pc3Rpbmcgb24gc2V0IFNldExvY2Fscy4gVGhlIGFy
Z3VtZW50cworICAgICAgICBzaW1wbGlmaWNhdGlvbiBwaGFzZSBlbXBsb3lzIGl0cyBvd24gbGln
aHQtd2VpZ2h0IGxpdmVuZXNzIGFuYWx5c2lzLiBCb3RoIHBoYXNlcworICAgICAgICBwcmV2aW91
c2x5IGp1c3QgdXNlZCByZWZlcmVuY2UgY291bnRzLgorICAgICAgICAKKyAgICAgICAgVGhlIGxh
cmdlc3QgY2hhbmdlIGlzIHRoYXQgbm93LCBkZWFkIG5vZGVzIGdldCB0dXJuZWQgaW50byBQaGFu
dG9tcy4gVGhvc2UKKyAgICAgICAgUGhhbnRvbXMgd2lsbCByZXRhaW4gdGhvc2UgY2hpbGQgZWRn
ZXMgdGhhdCBhcmUgbm90IHByb3Zlbi4gVGhpcyBlbnN1cmVzIHRoYXQgYW55CisgICAgICAgIHR5
cGUgY2hlY2tzIHBlcmZvcm1lZCBieSBhIGRlYWQgbm9kZSByZW1haW4gZXZlbiBhZnRlciB0aGUg
bm9kZSBpcyBraWxsZWQuIE9uIHRoZQorICAgICAgICBvdGhlciBoYW5kLCB0aGlzIFBoYW50b20g
Y29udmVyc2lvbiBtZWFucyB0aGF0IHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBmb3IKKyAgICAg
ICAgU2V0TG9jYWwuIEkgZGVjaWRlZCB0byBtYWtlIHRoZSBmb3VyIGZvcm1zIG9mIFNldExvY2Fs
IGV4cGxpY2l0OgorICAgICAgICAKKyAgICAgICAgTW92SGludChAYSwgckspOiBKdXN0IGluZGlj
YXRlcyB0aGF0IG5vZGUgQGEgY29udGFpbnMgdGhlIHZhbHVlIHRoYXQgd291bGQgaGF2ZQorICAg
ICAgICAgICAgIG5vdyBiZWVuIHBsYWNlZCBpbnRvIHZpcnR1YWwgcmVnaXN0ZXIgcksuIERvZXMg
bm90IGFjdHVhbGx5IGNhdXNlIEBhIHRvIGJlCisgICAgICAgICAgICAgc3RvcmVkIGludG8gcksu
IFRoaXMgd291bGQgaGF2ZSBwcmV2aW91c2x5IGJlZW4gYSBkZWFkIFNldExvY2FsIHdpdGggQGEK
KyAgICAgICAgICAgICBiZWluZyBsaXZlLiBNb3ZIaW50cyBhcmUgYWx3YXlzIGRlYWQuCisgICAg
ICAgIAorICAgICAgICBab21iaWVIaW50KHJLKTogSW5kaWNhdGVzIHRoYXQgYXQgdGhpcyBwb2lu
dCwgcmVnaXN0ZXIgcksgd2lsbCBjb250YWluIGEgZGVhZAorICAgICAgICAgICAgIHZhbHVlIGFu
ZCBPU1Igc2hvdWxkIHB1dCBVbmRlZmluZWQgaW50byBpdC4gVGhpcyB3b3VsZCBoYXZlIHByZXZp
b3VzbHkgYmVlbgorICAgICAgICAgICAgIGEgZGVhZCBTZXRMb2NhbCB3aXRoIEBhIGJlaW5nIGRl
YWQgYWxzby4gWm9tYmllSGludHMgYXJlIGFsd2F5cyBkZWFkLgorICAgICAgICAKKyAgICAgICAg
TW92SGludEFuZENoZWNrKEBhLCBySyk6IElkZW50aWNhbCB0byBNb3ZIaW50IGV4Y2VwdCBAYSBp
cyBhbHNvIHR5cGUgY2hlY2tlZCwKKyAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIg
VXNlS2luZCB0aGUgZWRnZSB0byBAYSBoYXMuIFRoZSB0eXBlIGNoZWNrIGlzIGFsd2F5cyBhCisg
ICAgICAgICAgICAgZm9yd2FyZCBleGl0LiBNb3ZIaW50QW5kQ2hlY2tzIGFyZSBhbHdheXMgbGl2
ZSwgc2luY2UgdGhleSBhcmUKKyAgICAgICAgICAgICBOb2RlTXVzdEdlbmVyYXRlLiBQcmV2aW91
c2x5IHRoaXMgd291bGQgaGF2ZSBiZWVuIGEgZGVhZCBTZXRMb2NhbCB3aXRoIGEKKyAgICAgICAg
ICAgICBsaXZlIEBhLCBhbmQgdGhlIGNoZWNrIHdvdWxkIGhhdmUgZGlzYXBwZWFyZWQuIFRoaXMg
aXMgb25lIG9mIHRoZSBidWdzIHRoYXQKKyAgICAgICAgICAgICB0aGlzIHBhdGNoIHNvbHZlcy4K
KyAgICAgICAgCisgICAgICAgIFNldExvY2FsKEBhLCBySyk6IFRoaXMgc3RpbGwgZG9lcyBleGFj
dGx5IHdoYXQgaXQgZG9lcyBub3csIGlmIHRoZSBTZXRMb2NhbCBpcworICAgICAgICAgICAgIGxp
dmUuCisgICAgICAgIAorICAgICAgICBCYXNpY2FsbHkgdGhpcyBwYXRjaCBtYWtlcyBpdCBzbyB0
aGF0IGRlYWQgU2V0TG9jYWxzIGV2ZW50dWFsbHkgZGVjYXkgdG8gTW92SGludCwKKyAgICAgICAg
Wm9tYmllSGludCwgb3IgTW92SGludEFuZENoZWNrIGRlcGVuZGluZyBvbiB0aGUgc2l0dWF0aW9u
LiBJZiB0aGUgY2hpbGQgQGEgaXMKKyAgICAgICAgYWxzbyBkZWFkLCB0aGVuIHlvdSBnZXQgYSBa
b21iaWVIaW50LiBJZiB0aGUgY2hpbGQgQGEgaXMgbGl2ZSBidXQgdGhlIFNldExvY2FsCisgICAg
ICAgIGhhcyBhIHR5cGUgY2hlY2sgYW5kIEBhJ3MgdHlwZSBoYXNuJ3QgYmVlbiBwcm92ZW4gdG8g
aGF2ZSB0aGF0IHR5cGUgdGhlbiB5b3UgZ2V0CisgICAgICAgIGEgTW92SGludEFuZENoZWNrLiBP
dGhlcndpc2UgeW91IGdldCBhIE1vdkhpbnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHBl
cmZvcm1hbmNlIG5ldXRyYWwuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
U3RhdGVBdFRhaWwpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
OjpydW4pOgorICAgICAgICAoQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZSk6CisgICAgICAg
IChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlQXJndW1lbnRz
UmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6
CisgICAgICAgIChCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9ja0lubGlu
ZXMuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9HcmFwaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omluc2VydFBoaU5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MpOgorICAgICAgICAq
IGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6
CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6a2VlcE9wZXJhbmRBbGl2ZSk6CisgICAgICAgICog
ZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNQU1Jl
dGhyZWFkaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6Q1BTUmV0aHJlYWRpbmdQ
aGFzZTo6YWRkUGhpU2lsZW50bHkpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZUlycmVsZXZhbnRQaGFudG9tQ2hp
bGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBk
ZmcvREZHQ29tbW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
IChXVEYpOgorICAgICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKFdURik6CisgICAg
ICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OnBhaW50VW5yZWFjaGFibGVD
b2RlKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChEQ0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6RENFUGhhc2U6OkRD
RVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFzZTo6cnVuKToKKyAgICAgICAgKEpT
Qzo6REZHOjpEQ0VQaGFzZTo6ZmluZFR5cGVDaGVja1Jvb3QpOgorICAgICAgICAoSlNDOjpERkc6
OkRDRVBoYXNlOjpjb3VudEVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkRDRVBoYXNlOjplbGlt
aW5hdGVJcnJlbGV2YW50UGhhbnRvbUNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJm
b3JtRENFKToKKyAgICAgICAgKiBkZmcvREZHRENFUGhhc2UuaDogQWRkZWQuCisgICAgICAgIChE
RkcpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmNoZWNrQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmJsZXNzQXJy
YXlPcGVyYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeEludEVkZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdEludDMyVG9Eb3VibGVOb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0YW50VG9JbnQz
Mik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKERG
Ryk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmNoYW5nZUNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2hhbmdlRWRnZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbXBhcmVBbmRTd2FwKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6Y2xlYXJBbmREZXJlZkNoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6cGVyZm9ybVN1YnN0aXR1dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnBlcmZv
cm1TdWJzdGl0dXRpb25Gb3JFZGdlKToKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6c3Vic3RpdHV0ZSk6CisgICAgICAgICogZGZnL0RGR0luc2VydGlvblNldC5o
OgorICAgICAgICAoSW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNv
bnZlcnRUb0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9HZXRM
b2NhbFVubGlua2VkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb250YWluc01vdkhpbnQp
OgorICAgICAgICAoTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3aWxsSGF2ZUNvZGVHZW5Pck9T
Uik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29udmVydExhc3RPU1JFeGl0VG9Gb3J3YXJkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlTW92SGludEFuZENoZWNrKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbmxpbmVTdGFydCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVDaGVja0hvaXN0aW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlOjpzaG91bGRDb25zaWRlckZvckhvaXN0
aW5nKToKKyAgICAgICAgKFN0cnVjdHVyZUNoZWNrSG9pc3RpbmdQaGFzZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRh
dGUpOgorCiAyMDEzLTAzLTA1ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWls
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTQ0NzA4LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQ0ODAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NSw2
ICs4NSw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0NQU1JldGhy
ZWFkaW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAogICAg
IGRmZy9ERkdDU0VQaGFzZS5jcHAKKyAgICBkZmcvREZHRENFUGhhc2UuY3BwCiAgICAgZGZnL0RG
R0Rpc2Fzc2VtYmxlci5jcHAKICAgICBkZmcvREZHRG9taW5hdG9ycy5jcHAKICAgICBkZmcvREZH
RHJpdmVyLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDggQEAgamF2YXNjcmlwdGNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEQ0VQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rp
c2Fzc2VtYmxlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGlzYXNzZW1i
bGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9taW5hdG9ycy5jcHAgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIx
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIFwK
ICAgICBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIFwKICAgICBkZmcvREZHQ1NFUGhh
c2UuY3BwIFwKKyAgICBkZmcvREZHRENFUGhhc2UuY3BwIFwKICAgICBkZmcvREZHRGlzYXNzZW1i
bGVyLmNwcCBcCiAgICAgZGZnL0RGR0RvbWluYXRvcnMuY3BwIFwKICAgICBkZmcvREZHRHJpdmVy
LmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ0ODAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw2ICsxMDksOCBAQAogCQkwRjJDNTU3
MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyog
REZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBV
bnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkU4OTJEMTZEMDJC
QUYwMDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0QjUxMDE2QjNBOTY0MDAzRjY5NkIgLyogREZHTWluaWZp
ZWRJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJGQzc3MDE2RTEyRjZGMDAzOEQ5
NzYgLyogREZHRENFUGhhc2UuY3BwICovOyB9OworCQkwRjJGQzc3MzE2RTEyRjc0MDAzOEQ5NzYg
LyogREZHRENFUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMzRCMTQ5MTZENDIw
MTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5k
LmNwcCAqLzsgfTsKIAkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4MTZE
NDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNEIxNkQ0M0UwQzAwMUNEQTVBIC8qIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMDAxLDYgKzEwMDMsOCBAQAogCQkwRjJCREM1MDE1MjI4RkZBMDBD
RDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAw
MTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gREZHQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RDRVBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdEQ0VQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkZDNzcxMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdEQ0VQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0RDRVBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAv
KiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBkZmcv
REZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0QjE2RDQz
RTBDMDAxQ0RBNUEgLyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYzOCw2ICsyNjQyLDggQEAKIAkJCQkw
RkJFMEY2QzE2QzFEQjAxMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oICovLAog
CQkJCTBGRkZDOTREMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgKi8sCiAJCQkJ
MEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCisJCQkJMEYyRkM3
NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKKwkJCQkwRjJGQzc3MTE2
RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKIAkJCQkwRkY0Mjc2MTE1OTFBMUM5
MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCAqLywKIAkJCQkwRkY0Mjc2MjE1OTFBMUM5
MDA0Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmggKi8sCiAJCQkJMEZEODFBQ0YxNTRGQjRFQjAw
OTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovLApAQCAtMjk3NCw2ICsyOTgwLDcgQEAKIAkJ
CQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFj
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkZDNzczMTZFMTJGNzQwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxOTE2MjYyQkRE
MDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjE4
RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKQEAg
LTM3MzksNiArMzc0Niw3IEBACiAJCQkJMTQ4RjIxQUExMDdFQzUzQTAwNDJFQzJDIC8qIEJ5dGVj
b2RlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODJEMTA3RUMwNTcwMDEz
RTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDhERDBFRDIyMDVC
MDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkZDNzcyMTZF
MTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBC
ODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjczRDdBRTE2NUExNDJEMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHVi
Um91dGluZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQ0ODAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzE0LDYgKzMxNCwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnCiAgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgICAgICAKKyAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazogeworICAgICAgICAvLyBEb24ndCBuZWVkIHRvIGRvIGFueXRo
aW5nLiBBIE1vdkhpbnQgaXMgZWZmZWN0aXZlbHkgYSBwcm9taXNlIHRoYXQgdGhlIFNldExvY2Fs
CisgICAgICAgIC8vIHdhcyBkZWFkLgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6IHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAg
ICAgCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0
YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCkBAIC0xNjI4LDE4ICsxNjQwLDYgQEAgaW5s
aW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIC8vIElm
IHRoZSBHZXRMb2NhbCBpcyBkZWFkLCB0aGVuIHdlIHRyYW5zZmVyIGZyb20gaGVhZCB0byB0YWls
LgotICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgY2FzZSBhZnRl
ciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5Mzg5Ci0gICAgICAg
ICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KLSAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBpblZhcmlhYmxlOwotI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgICAgICAgIFRyYW5z
ZmVyaW5nICIpOwotICAgICAgICAgICAgICAgIHNvdXJjZS5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiBmcm9tIGhlYWQgdG8gdGFpbCAoZGVhZCBHZXRM
b2NhbCBjYXNlKS5cbiIpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBh
ZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KICAgICAgICAgICAgIHNvdXJjZSA9IGZvck5vZGUobm9k
ZSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ4MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAsNiArMTQwLDI2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuYWRkKHZhcmlhYmxlQWNjZXNzRGF0YSwgQXJndW1lbnRzQWxpYXNpbmdEYXRh
KCkpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZh
cmlhYmxlcyBhcmUgbGl2ZSwgdXNpbmcgYSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZgor
ICAgICAgICAvLyBsaXZlbmVzcy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5k
ZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoK
KyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bUxvY2FsOgorICAgICAgICAgICAgICAgICAgICBtX2lzTGl2ZS5hZGQobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIEZpZ3VyZSBv
dXQgd2hpY2ggdmFyaWFibGVzIGFsaWFzIHRoZSBhcmd1bWVudHMgYW5kIG5vdGhpbmcgZWxzZSwg
YW5kIGFyZQogICAgICAgICAvLyB1c2VkIG9ubHkgZm9yIEdldEJ5VmFsIGFuZCBHZXRBcnJheUxl
bmd0aCBhY2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGltZSwKICAgICAgICAgLy8gaWRlbnRpZnkgdXNl
cyBvZiBDcmVhdGVBcmd1bWVudHMgdGhhdCBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgYXJn
dW1lbnRzCkBAIC0xOTgsNiArMjE4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyB0b3RhbGx5IGRl
YWQsIHRoZW4gaWdub3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2lzTGl2
ZS5jb250YWlucyh2YXJpYWJsZUFjY2Vzc0RhdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYXJndW1lbnRzUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkg
PT0gYXJndW1lbnRzUmVnaXN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwg
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKSB7CkBAIC00NjgsNyArNDkyLDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9kZSwgaWYg
aXQgcmVmZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgp
OwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDEoRWRnZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00ODgsNyArNTExLDYgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IG5vZGUtPmNoaWxk
cmVuLmNoaWxkMigpOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDIo
KSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKQEAgLTUwNCwxMCArNTI2LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNM
ZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5yZWYoKTsgLy8gVGhpcyBpcyBhIG11
c3QtZ2VuZXJhdGUgbm9kZS4KICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRp
b24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRzTGVuZ3RoLgogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTUzMSw4ICs1NTEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgZXhhY3RseSB3aGF0IHRoaXMgd2lsbCByZXR1cm4u
IEJ1dCBvbmx5IGFmdGVyIHdlIGhhdmUgY2hlY2tlZAogICAgICAgICAgICAgICAgICAgICAvLyB0
aGF0IG5vYm9keSBoYXMgZXNjYXBlZCBvdXIgYXJndW1lbnRzLgogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBjb2RlT3JpZ2luKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJn
dW1lbnRzTm90Q3JlYXRlZCwgY29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KAogICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZSwganNOdW1iZXIoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKSk7CkBAIC01ODEsMTAgKzYwMCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2Rl
LT5jb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShpbmRleCkpKTsKIAogICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3Bl
Y05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVP
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQ
aGFudG9tLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4pOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CkBAIC01OTgsNyArNjE3LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNs
ZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xl
YXJBbmREZXJlZkNoaWxkMihub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVm
Q291bnQoMCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgCkBAIC02MjYsOCArNjQ0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkgewogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVu
LCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb2RlT3JpZ2luLCBub2RlLT5jaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBu
b2RlLT5jaGlsZHJlbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOwogICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnJlc2V0KCk7CkBAIC02NTEsNiArNjY4LDcgQEAgcHJpdmF0ZToKICAg
ICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSwKICAg
ICAgICAgICAgIERlZmF1bHRIYXNoPFZhcmlhYmxlQWNjZXNzRGF0YSo+OjpIYXNoLAogICAgICAg
ICAgICAgTnVsbGFibGVIYXNoVHJhaXRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+ID4gbV9hcmd1bWVu
dHNBbGlhc2luZzsKKyAgICBIYXNoU2V0PFZhcmlhYmxlQWNjZXNzRGF0YSo+IG1faXNMaXZlOwog
CiAgICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKE5vZGUqIG5vZGUpCiAgICAgewpAQCAt
Nzg1LDcgKzgwMyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0Fy
Z3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVu
dHNSZWdpc3RlcikKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1fZ3JhcGgu
ZGVyZWYoZWRnZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJh
ZyhlZGdlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTc5Myw3ICs4
MTAsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeyAvLyBBcmlz
ZXMgaWYgd2UgQ1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBhbmQg
dGhlbiBDU0UgdGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRoZSBmaXJzdC4KICAg
ICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoZWRnZS0+Y29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
bV9ncmFwaC5kZXJlZihlZGdlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVk
Z2VGcm9tQmFnKGVkZ2VJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE0
NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBWZWN0b3I8
Tm9kZSosIDg+IHsKICAgICB9CiAgICAgCiAjZGVmaW5lIERGR19ERUZJTkVfQVBQRU5EX05PREUo
dGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlwZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwg
dmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAgIHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVt
cGxhdGVQb3N0IE5vZGUqIGFwcGVuZE5vZGUoR3JhcGgmLCBSZWZDaGlsZHJlbk1vZGUsIFJlZk5v
ZGVNb2RlLCBTcGVjdWxhdGVkVHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKTsKKyAg
ICB0ZW1wbGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhcHBlbmROb2RlKEdy
YXBoJiwgU3BlY3VsYXRlZFR5cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcyk7CiAgICAg
REZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQVBQRU5EX05PREUpCiAj
dW5kZWYgREZHX0RFRklORV9BUFBFTkRfTk9ERQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMTQ0ODAy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKICNkZWZpbmUgREZHX0RFRklORV9BUFBFTkRfTk9ERSh0ZW1wbGF0ZVByZSwgdGVt
cGxhdGVQb3N0LCB0eXBlUGFyYW1zLCB2YWx1ZVBhcmFtc0NvbW1hLCB2YWx1ZVBhcmFtcywgdmFs
dWVBcmdzKSBcCi0gICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5l
IE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5vZGUoR3JhcGgmIGdyYXBoLCBSZWZDaGlsZHJlbk1v
ZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSByZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFyYW1zKSBcCisgICAgdGVtcGxhdGVQcmUg
dHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgaW5saW5lIE5vZGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5v
ZGUoR3JhcGgmIGdyYXBoLCBTcGVjdWxhdGVkVHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVQYXJhbXMpIFwKICAgICB7IFwKLSAgICAgICAgTm9kZSogcmVzdWx0ID0gZ3JhcGguYWRkTm9k
ZShyZWZDaGlsZHJlbk1vZGUsIHJlZk5vZGVNb2RlLCB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFs
dWVBcmdzKTsgXAorICAgICAgICBOb2RlKiByZXN1bHQgPSBncmFwaC5hZGROb2RlKHR5cGUgdmFs
dWVQYXJhbXNDb21tYSB2YWx1ZUFyZ3MpOyBcCiAgICAgICAgIGFwcGVuZChyZXN1bHQpOyBcCiAg
ICAgICAgIHJldHVybiByZXN1bHQ7IFwKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTQ0ODAyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY5OCw3NyArNjk4LDU2IEBAIHByaXZhdGU6CiAgICAgTm9kZSogYWRkVG9HcmFw
aChOb2RlVHlwZSBvcCwgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSog
Y2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9k
ZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAot
ICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIEVkZ2UoY2hpbGQxKSwgRWRnZShj
aGlsZDIpLCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05vbmUsIG9wLCBjdXJyZW50
Q29kZU9yaWdpbigpLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hpbGQyKSwgRWRnZShjaGlsZDMpKTsK
ICAgICAgICAgQVNTRVJUKG9wICE9IFBoaSk7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmQocmVzdWx0KTsKLQotICAgICAgICBpZiAoZGVmYXVsdEZsYWdzKG9wKSAmIE5vZGVNdXN0R2Vu
ZXJhdGUpCi0gICAgICAgICAgICBtX2dyYXBoLnJlZkNoaWxkcmVuKHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIE5vZGUqIGFkZFRvR3JhcGgoTm9kZVR5cGUgb3As
IEVkZ2UgY2hpbGQxLCBFZGdlIGNoaWxkMiA9IEVkZ2UoKSwgRWRnZSBjaGlsZDMgPSBFZGdlKCkp
CiAgICAgewogICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoCi0gICAgICAg
ICAgICBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAgICAgICAgICAg
IG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAg
ICAgICAgIFNwZWNOb25lLCBvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBO
b2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBOb2RlKiBhZGRUb0dyYXBoKE5v
ZGVUeXBlIG9wLCBPcEluZm8gaW5mbywgTm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0g
MCwgTm9kZSogY2hpbGQzID0gMCkKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLAotICAgICAgICAgICAgb3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIEVkZ2Uo
Y2hpbGQxKSwgRWRnZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOworICAgICAgICAgICAgU3BlY05v
bmUsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBFZGdlKGNoaWxkMSksIEVkZ2UoY2hp
bGQyKSwgRWRnZShjaGlsZDMpKTsKICAgICAgICAgaWYgKG9wID09IFBoaSkKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5waGlzLmFwcGVuZChyZXN1bHQpOwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKHJlc3VsdCk7Ci0KLSAgICAgICAgaWYgKGRl
ZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5y
ZWZDaGlsZHJlbihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBO
b2RlKiBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwg
Tm9kZSogY2hpbGQxID0gMCwgTm9kZSogY2hpbGQyID0gMCwgTm9kZSogY2hpbGQzID0gMCkKICAg
ICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZSgKLSAgICAgICAgICAg
IERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAgICAgICAgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgRWRnZShjaGlsZDEpLCBFZGdlKGNo
aWxkMiksIEVkZ2UoY2hpbGQzKSk7CisgICAgICAgICAgICBTcGVjTm9uZSwgb3AsIGN1cnJlbnRD
b2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKKyAgICAgICAgICAgIEVkZ2UoY2hpbGQxKSwgRWRn
ZShjaGlsZDIpLCBFZGdlKGNoaWxkMykpOwogICAgICAgICBBU1NFUlQob3AgIT0gUGhpKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChyZXN1bHQpOwotCi0gICAgICAgIGlmIChkZWZh
dWx0RmxhZ3Mob3ApICYgTm9kZU11c3RHZW5lcmF0ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgucmVm
Q2hpbGRyZW4ocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAg
ICAgTm9kZSogYWRkVG9HcmFwaChOb2RlOjpWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBPcEluZm8g
aW5mbzEsIE9wSW5mbyBpbmZvMikKICAgICB7CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3Jh
cGguYWRkTm9kZSgKLSAgICAgICAgICAgIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNw
ZWNOb25lLAotICAgICAgICAgICAgTm9kZTo6VmFyQXJnLCBvcCwgY3VycmVudENvZGVPcmlnaW4o
KSwgaW5mbzEsIGluZm8yLAorICAgICAgICAgICAgU3BlY05vbmUsIE5vZGU6OlZhckFyZywgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwKICAgICAgICAgICAgIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2Vk
VmFyQXJncyk7CiAgICAgICAgIEFTU0VSVChvcCAhPSBQaGkpOwogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kKHJlc3VsdCk7CiAgICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFy
Z3MgPSAwOwogICAgICAgICAKLSAgICAgICAgaWYgKGRlZmF1bHRGbGFncyhvcCkgJiBOb2RlTXVz
dEdlbmVyYXRlKQotICAgICAgICAgICAgbV9ncmFwaC5yZWZDaGlsZHJlbihyZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIE5vZGUqIGluc2VydFBoaU5vZGUoT3BJ
bmZvIGluZm8sIEJhc2ljQmxvY2sqIGJsb2NrKQogICAgIHsKLSAgICAgICAgTm9kZSogcmVzdWx0
ID0gbV9ncmFwaC5hZGROb2RlKAotICAgICAgICAgICAgRG9udFJlZkNoaWxkcmVuLCBEb250UmVm
Tm9kZSwgU3BlY05vbmUsCi0gICAgICAgICAgICBQaGksIGN1cnJlbnRDb2RlT3JpZ2luKCksIGlu
Zm8pOworICAgICAgICBOb2RlKiByZXN1bHQgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFBo
aSwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbyk7CiAgICAgICAgIGJsb2NrLT5waGlzLmFwcGVu
ZChyZXN1bHQpOwotCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0xMjU2LDE3
ICsxMjM1LDE5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0gICAgaWYgKGNhbGxMaW5rU3RhdHVz
LmlzUHJvdmVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQoY2FsbExpbmtT
dGF0dXMuY2FuT3B0aW1pemUoKSk7Ci0gICAgCiAgICAgTm9kZSogdGhpc0FyZ3VtZW50OwogICAg
IGlmIChraW5kID09IENvZGVGb3JDYWxsKQogICAgICAgICB0aGlzQXJndW1lbnQgPSBnZXQocmVn
aXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSk7CiAgICAgZWxzZQogICAgICAgICB0
aGlzQXJndW1lbnQgPSAwOwogCisgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzUHJvdmVkKCkpIHsK
KyAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0LCB0aGlzQXJndW1lbnQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVChjYWxsTGlua1N0YXR1cy5j
YW5PcHRpbWl6ZSgpKTsKKyAgICAKICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxs
TGlua1N0YXR1cy5mdW5jdGlvbigpKQogICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24s
IE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJnZXQsIHRoaXNBcmd1bWVudCk7CiAgICAgZWxzZSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNp
b24gMTQ0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBib29s
IHJ1bigpCiAgICAgeworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gVGhyZWFkZWRD
UFMpOworICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFs
bHlVbmlmaWVkKTsKKyAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV2
ZXJ5dGhpbmdJc0xpdmUpOworICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCiAgICAgICAgIG1fY291bnQgPSAwOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw4ICsxNDAs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamV0dGlzb25CbG9jayhi
bG9ja0luZGV4LCBub3RUYWtlbkJsb2NrSW5kZXgsIGJvdW5kYXJ5Q29kZU9yaWdpbik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jay0+
YXBwZW5kTm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEp1bXAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5Q29kZU9yaWdpbiwgT3BJbmZvKHRha2VuQmxvY2tJ
bmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBTcGVjTm9u
ZSwgSnVtcCwgYm91bmRhcnlDb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8odGFrZW5CbG9ja0luZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNoYW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzEsOCArMTcxLDggQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChicmFuY2gtPnJlZkNv
dW50KCkgPT0gMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25l
LCBKdW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gtPmNvZGVPcmln
aW4sIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBicmFuY2gtPmNvZGVPcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0YXJnZXRCbG9ja0luZGV4KSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNo
YW5nZWQgPSBvdXRlckNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yNzIsNyArMjcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFsaXZlbmVzc05v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJsb2Nr
LT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9ncmFwaCwgRG9udFJlZkNoaWxkcmVuLCBEb250
UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAg
IG1fZ3JhcGgsIFNwZWNOb25lLCBQaGFudG9tTG9jYWwsIGNvZGVPcmlnaW4sIAogICAgICAgICAg
ICAgT3BJbmZvKGxpdmVuZXNzTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDcgKzUxLDYgQEAgcHVibGljOgogICAgICAgICBjYW5vbmljYWxpemVMb2NhbHNJbkJsb2Nrcygp
OwogICAgICAgICBwcm9wYWdhdGVQaGlzPExvY2FsT3BlcmFuZD4oKTsKICAgICAgICAgcHJvcGFn
YXRlUGhpczxBcmd1bWVudE9wZXJhbmQ+KCk7Ci0gICAgICAgIG1fZ3JhcGguY29sbGVjdEdhcmJh
Z2UoKTsKICAgICAgICAgCiAgICAgICAgIG1fZ3JhcGgubV9mb3JtID0gVGhyZWFkZWRDUFM7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI0LDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgQUxXQVlTX0lOTElORSBOb2RlKiBhZGRQaGlTaWxlbnRseShCYXNpY0Jsb2NrKiBibG9jaywg
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSkKICAgICB7Ci0gICAgICAgIE5vZGUqIHJlc3VsdCA9IG1fZ3JhcGguYWRkTm9kZShEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgUGhpLCBjb2RlT3JpZ2luLCBPcEluZm8o
dmFyaWFibGUpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gbV9ncmFwaC5hZGROb2RlKFNwZWNO
b25lLCBQaGksIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSkpOwogICAgICAgICBibG9jay0+
cGhpcy5hcHBlbmQocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTQ0
ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMDgsNyArMTAwOCw2IEBAIHByaXZhdGU6CiAjaWYgREZHX0VOQUJMRShE
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICAgICAgZGF0YUxvZygiICAgRWxpbWlu
YXRpbmcgZWRnZSBAIiwgbV9jdXJyZW50Tm9kZS0+aW5kZXgoKSwgIiAtPiBAIiwgZWRnZS0+aW5k
ZXgoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CiAgICAgICAg
ICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhpLS0pOwogICAgICAgICAgICAg
bV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTAyNCw3ICsxMDIzLDYgQEAgcHJpdmF0
ZToKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOwotICAgICAgICBtX2N1cnJlbnROb2RlLT5zZXRSZWZDb3VudCgxKTsKICAgICAgICAg
ZWxpbWluYXRlSXJyZWxldmFudFBoYW50b21DaGlsZHJlbihtX2N1cnJlbnROb2RlKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugd2lsbCBlbGltaW5hdGUgYWxsIHJlZmVy
ZW5jZXMgdG8gdGhpcyBub2RlLgpAQCAtMTE1NCwxMCArMTE1Miw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHdlIHJlcGxhY2UgYSBHZXRMb2NhbCB3aXRoIGEg
R2V0TG9jYWxVbmxpbmtlZCwgdGhlbiB0dXJuIHRoZSBHZXRMb2NhbFVubGlua2VkCiAgICAgICAg
ICAgICAvLyBpbnRvIGEgR2V0TG9jYWwuCi0gICAgICAgICAgICBpZiAocmVsZXZhbnRMb2NhbE9w
LT5vcCgpID09IEdldExvY2FsVW5saW5rZWQpIHsKKyAgICAgICAgICAgIGlmIChyZWxldmFudExv
Y2FsT3AtPm9wKCkgPT0gR2V0TG9jYWxVbmxpbmtlZCkKICAgICAgICAgICAgICAgICByZWxldmFu
dExvY2FsT3AtPmNvbnZlcnRUb0dldExvY2FsKHZhcmlhYmxlQWNjZXNzRGF0YSwgcGhpKTsKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLnJlZihwaGkpOwotICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjEwLDcgKzEy
MDYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKGRhdGFOb2RlLT5oYXNSZXN1bHQo
KSk7CiAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEobm9kZSk7CiAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDEoKSA9IEVkZ2UoZGF0YU5vZGUpOwotICAgICAg
ICAgICAgbV9ncmFwaC5yZWYoZGF0YU5vZGUpOwogICAgICAgICAgICAgbV9ncmFwaC5kZXRocmVh
ZCgpOwogICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ0
ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MSw2ICs5MSwyMSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgVW5pCiAgICAgfQogfQogCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgUmVmQ291bnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2Fz
ZSBFdmVyeXRoaW5nSXNMaXZlOgorICAgICAgICBvdXQucHJpbnQoIkV2ZXJ5dGhpbmdJc0xpdmUi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeGFjdFJlZkNvdW50OgorICAgICAgICBvdXQu
cHJpbnQoIkV4YWN0UmVmQ291bnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgUHJvb2ZTdGF0dXMg
c3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw2ICsyMTcsMTUgQEAg
ZW51bSBVbmlmaWNhdGlvblN0YXRlIHsKICAgICBHbG9iYWxseVVuaWZpZWQKIH07CiAKKy8vIERl
c2NyaWJlcyBob3cgcmVmZXJlbmNlIGNvdW50cyBpbiB0aGUgZ3JhcGggYmVoYXZlLgorZW51bSBS
ZWZDb3VudFN0YXRlIHsKKyAgICAvLyBFdmVyeXRoaW5nIGhhcyByZWZDb3VudCgpID09IDEuCisg
ICAgRXZlcnl0aGluZ0lzTGl2ZSwKKworICAgIC8vIFNldCBhZnRlciBEQ0UgaGFzIHJ1bi4KKyAg
ICBFeGFjdFJlZkNvdW50Cit9OworCiBlbnVtIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgeyBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24sIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB9OwogCiBl
bnVtIFNwZWN1bGF0aW9uRGlyZWN0aW9uIHsgRm9yd2FyZFNwZWN1bGF0aW9uLCBCYWNrd2FyZFNw
ZWN1bGF0aW9uIH07CkBAIC0yNTAsNiArMjU5LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6T3B0aW1pemF0aW9uRml4cG9pbnRT
dGF0ZSk7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6R3JhcGhG
b3JtKTsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpVbmlmaWNh
dGlvblN0YXRlKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpS
ZWZDb3VudFN0YXRlKTsKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZH
OjpQcm9vZlN0YXR1cyk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihu
b2RlLT5jb2RlT3JpZ2luKSkubV90eXBlKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnJlZkNvdW50KCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA0LDcgKzEwMyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBu
b2RlLT5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFT
U0VSVChub2RlLT5yZWZDb3VudCgpID09IDEpOwogICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmls
dGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20o
KTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CkBAIC0xMjYsNyArMTI0
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6IHsKICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG5vZGUs
IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+cmVmQ291bnQoKSA9PSAxKTsKICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAg
ZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODYsMjUgKzE4
MywyMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSk7
CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludCwgY29kZU9yaWdpbiwgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCwgY29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGwpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFBoYW50b20sIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBj
b2RlT3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNoaWxkLT5yZWYoKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IERvbnRSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9y
aWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRWRnZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3Jp
Z2luLCBjaGlsZEVkZ2UpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJvcGVydHlTdG9yYWdlKTsKQEAgLTI1MiwxMiArMjQ2LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVj
Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBjb2RlT3JpZ2luLCBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbCkgewogICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLAotICAgICAg
ICAgICAgICAgICAgICAgICAgUGhhbnRvbSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVP
cmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CkBAIC0y
ODcsMTcgKzI4MCwxNiBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgRWRnZSBwcm9wZXJ0
eVN0b3JhZ2U7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW5saW5l
T2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJl
ZigpOyAvLyBUaGUgY2hpbGQgd2lsbCBiZSB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBpbmRleCwgc28g
cmVmIGl0IHRvIHJlZmxlY3QgdGhlIGRvdWJsZSB1c2UuCisgICAgICAgICAgICAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnR5U3RvcmFnZSA9IGNoaWxkRWRnZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXR1
cy5pc1NpbXBsZVJlcGxhY2UoKSB8fCBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0g
c3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdHVzLmlzU2ltcGxlUmVwbGFjZSgpIHx8IHN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFj
aXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9y
aWdpbiwgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNl
dChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgUmVmTm9kZSwgU3BlY05vbmUsIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKQEAgLTMwNSwxNyArMjk3LDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0
b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjTm9uZSwgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmln
aW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGls
ZEVkZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwg
U3BlY05vbmUsIEdldEJ1dHRlcmZseSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
T3JpZ2luLCBjaGlsZEVkZ2UpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hpbGRFZGdlKSkp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUs
IGNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIAogICAgICAgICAgICAgICAgICAgICAgICAg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0zNDgsNiArMzM4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKSB7CisgICAgICAgICAgICAg
ICAgLy8gR2V0TG9jYWxzIHdpdGhvdXQgYSBQaGkgY2hpbGQgYXJlIGd1YXJhbnRlZWQgZGVhZC4g
V2UgZG9uJ3QgaGF2ZSB0bworICAgICAgICAgICAgICAgIC8vIGRvIGFueXRoaW5nIGFib3V0IHRo
ZW0uCisgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgubV9mb3JtICE9IExvYWRTdG9yZSkgewogICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKQEAgLTM2
MCw4ICszNTUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoYW50b20gPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b21Mb2NhbCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlKSwgRWRn
ZShwaGkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBQaGFudG9tTG9jYWwsICBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh2YXJpYWJsZSksIEVkZ2UocGhpKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBibG9jay0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gcGhh
bnRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGFudG9tOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCkBAIC0zNzcsNyArMzcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
RG9udFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmln
aW4sIGNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQ
aGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC00MDYsMTggKzQwMSwxNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgewogICAgICAg
ICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBzcGVjdWxh
dGlvbkZyb21WYWx1ZShjZWxsKSwKLSAgICAgICAgICAgIFdlYWtKU0NvbnN0YW50LCBjb2RlT3Jp
Z2luLCBPcEluZm8oY2VsbCkpOworICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlv
bkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIGNvZGVPcmlnaW4sIE9wSW5mbyhjZWxs
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwg
RG9udFJlZk5vZGUsIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwKLSAg
ICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdl
KHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBjb2RlT3JpZ2luLAorICAg
ICAgICAgICAgICAgIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50
LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBSZWZD
aGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgY29kZU9yaWdp
biwKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBj
b2RlT3JpZ2luLAogICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNl
bGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CiAgICAgfQog
ICAgIApAQCAtNDU0LDggKzQ0OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBE
b250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRENFUGhhc2UuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRENFUGhhc2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIERDRVBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBEQ0VQaGFzZShH
cmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJkZWFkIGNvZGUgZWxpbWluYXRp
b24iKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAg
Ly8gRmlyc3QgcmVzZXQgdGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykKKyAgICAg
ICAgICAgICAgICBibG9jay0+YXQoaW5kZXhJbkJsb2NrKS0+c2V0UmVmQ291bnQoMCk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJ
bmRleC0tOykKKyAgICAgICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNldFJlZkNv
dW50KDApOworICAgICAgICB9CisgICAgCisgICAgICAgIC8vIE5vdyBmaW5kIHRoZSByb290czoK
KyAgICAgICAgLy8gLSBOb2RlcyB0aGF0IGFyZSBtdXN0LWdlbmVyYXRlLgorICAgICAgICAvLyAt
IE5vZGVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHR5cGUgY2hlY2tzLgorICAgICAgICAvLyAt
IE5vZGVzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIFNldExvY2Fscy4KKyAgICAgICAgLy8gU2V0
IHRoZWlyIHJlZiBjb3VudHMgdG8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0LgorICAg
ICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBo
Lm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBibG9jay0+c2l6ZSgpOyBpbmRleEluQmxvY2stLTsp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
CisgICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwg
ZmluZFR5cGVDaGVja1Jvb3QpOworICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkg
JiBOb2RlTXVzdEdlbmVyYXRlKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5wb3N0Zml4UmVmKCkpCisgICAgICAgICAgICAgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB3aGlsZSAoIW1fd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV93b3JrbGlzdC5sYXN0KCk7CisgICAgICAgICAgICBtX3dvcmtsaXN0
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgp
KTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2Vk
LgorICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgY291
bnRFZGdlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxv
Y2tJbmRleCkgeworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS5pc1Byb3ZlZCgpIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9z
c2liaWxpdHkgdGhhdCBVSW50MzJUb051bWJlciBpcyBkZWFkIGJ1dCBpdHMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoaWxkIGlzbid0OyBpZiBzbyB0aGVuIHdlIHNob3VsZCBNb3ZIaW50
IHRoZSBjaGlsZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
PnNob3VsZEdlbmVyYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5j
aGlsZDEoKS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMSgpLT5jaGlsZDEoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KFpvbWJpZUhpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgp
ID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoTW92SGludCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERl
ZmF1bHRGbGFncyhNb3ZIaW50QW5kQ2hlY2spOworICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2Fs
OgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gTGVhdmUgdGhlbSBhcyBub3Qgc2hvdWxkR2VuZXJhdGUuCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZUlycmVsZXZhbnRQaGFu
dG9tQ2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldFJlZkNvdW50
KDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5tX3JlZkNv
dW50U3RhdGUgPSBFeGFjdFJlZkNvdW50OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmluZFR5cGVDaGVja1Jvb3QoTm9kZSosIEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIFdlIG1heSBoYXZlIGFuICJ1bnByb3ZlZCIgdW50
eXBlZCB1c2UgZm9yIGNvZGUgdGhhdCBpcyB1bnJlYWNoYWJsZS4gVGhlIENGQQorICAgICAgICAv
LyB3aWxsIGp1c3Qgbm90IGhhdmUgZ290dGVuIGFyb3VuZCB0byBpdC4KKyAgICAgICAgaWYgKGVk
Z2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoIWVkZ2UtPnBvc3RmaXhSZWYoKSkKKyAgICAgICAgICAg
IG1fd29ya2xpc3QuYXBwZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b3VudEVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERvbid0IGNvdW50
IGVkZ2VzIHRoYXQgYXJlIGFscmVhZHkgY291bnRlZCBmb3IgdGhlaXIgdHlwZSBjaGVja3MuCisg
ICAgICAgIGlmICghKGVkZ2UuaXNQcm92ZWQoKSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChlZGdlLT5w
b3N0Zml4UmVmKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fd29ya2xpc3QuYXBw
ZW5kKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBlbGltaW5hdGVJcnJlbGV2
YW50UGhhbnRvbUNoaWxkcmVuKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKSB7CisgICAgICAgICAgICBF
ZGdlIGVkZ2UgPSBub2RlLT5jaGlsZHJlbi5jaGlsZChpKTsKKyAgICAgICAgICAgIGlmICghZWRn
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChlZGdlLm5lZWRz
Q2hlY2soKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGktLSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPE5vZGUqLCAxMjg+IG1fd29ya2xpc3Q7Cit9OworCitib29sIHBlcmZvcm1EQ0Uo
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
RENFIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPERDRVBoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHRENFUGhhc2VfaAorI2RlZmluZSBERkdEQ0VQaGFzZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Y2xhc3MgR3JhcGg7CisKKy8vIEdsb2JhbCBkZWFkIGNvZGUgZWxpbWluYXRpb24uIEVsaW1pbmF0
ZXMgYW55IG5vZGUgdGhhdCBpcyBub3QgTm9kZU11c3RHZW5lcmF0ZSwKKy8vIG5vdCB1c2VkIGJ5
IGFueSBvdGhlciBsaXZlIG5vZGUsIGFuZCBub3Qgc3ViamVjdCB0byBhbnkgdHlwZSBjaGVjay4K
KworYm9vbCBwZXJmb3JtRENFKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRENFUGhhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAx
NDQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJERkdDUFNSZXRocmVhZGluZ1Bo
YXNlLmgiCiAjaW5jbHVkZSAiREZHQ1NFUGhhc2UuaCIKICNpbmNsdWRlICJERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR0RDRVBoYXNlLmgiCiAjaW5jbHVkZSAiREZHRml4
dXBQaGFzZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHUHJl
ZGljdGlvbkluamVjdGlvblBoYXNlLmgiCkBAIC0xNDcsMTEgKzE0OCwxMyBAQCBpbmxpbmUgYm9v
bCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVh
ZGluZyhkZmcpOwogICAgIH0KICAgICAKKyAgICBpZiAobG9nQ29tcGlsYXRpb25DaGFuZ2VzKCkp
CisgICAgICAgIGRhdGFMb2dGKCJERkcgb3B0aW1pemF0aW9uIGZpeHBvaW50IGNvbnZlcmdlZCBp
biAldSBpdGVyYXRpb25zLlxuIiwgY250KTsKKwogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBG
aXhwb2ludENvbnZlcmdlZDsKICAgICBwZXJmb3JtQ1NFKGRmZyk7CiAgICAgcGVyZm9ybUNQU1Jl
dGhyZWFkaW5nKGRmZyk7IC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYSBuby1vcCBzaW5jZSBD
U0UgcmFyZWx5IGRldGhyZWFkcyB0aGUgZ3JhcGguCi0gICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hh
bmdlcygpKQotICAgICAgICBkYXRhTG9nRigiREZHIG9wdGltaXphdGlvbiBmaXhwb2ludCBjb252
ZXJnZWQgaW4gJXUgaXRlcmF0aW9ucy5cbiIsIGNudCk7CisgICAgcGVyZm9ybURDRShkZmcpOwog
ICAgIHBlcmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAKICAgICBHcmFwaER1
bXBNb2RlIG1vZGVGb3JGaW5hbFZhbGlkYXRlID0gRHVtcEdyYXBoOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDQ4MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCBuZWVkIHRvIGRvIHJlZidpbmcgb24gdGhlIGNoaWxkcmVuIGJlY2F1c2Ugd2UncmUgc3Rl
YWxpbmcgdGhlbSBmcm9tCiAgICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbmFsIGRpdmlzaW9u
LgogICAgICAgICAgICAgICAgIE5vZGUqIG5ld0RpdmlzaW9uID0gbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGls
ZHJlbiwgUmVmTm9kZSwgU3BlY0RvdWJsZSwgKm5vZGUpOworICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgU3BlY0RvdWJsZSwgKm5vZGUpOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wKERvdWJsZUFzSW50MzIpOwogICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLmluaXRpYWxpemUoRWRnZShuZXdEaXZpc2lvbiwgS25vd25OdW1iZXJV
c2UpLCBFZGdlKCksIEVkZ2UoKSk7CkBAIC01MTgsOCArNTE4LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBpZiAob2spIHsKICAgICAgICAgICAgICAgICAgICAgRWRnZSBuZXdDaGlsZEVk
Z2UgPSBsb2dpY2FsTm90LT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0No
aWxkRWRnZS0+aGFzQm9vbGVhblJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLnJlZihuZXdDaGlsZEVkZ2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5kZXJlZihsb2dpY2FsTm90KTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnNldENoaWxkMShuZXdDaGlsZEVkZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luZGV4IHRvQmVUYWtlbiA9IG5vZGUtPm5vdFRh
a2VuQmxvY2tJbmRleCgpOwpAQCAtNTU2LDggKzU1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHdvdWxkIGhhdmUgYWxyZWFkeSBleGl0ZWQgYnkgbm93LCBidXQgaW5zZXJ0
IGEgZm9yY2VkIGV4aXQganVzdCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBiZSBzYWZlLgog
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIERvbnRSZWZDaGlsZHJlbiwgRG9udFJlZk5v
ZGUsIFNwZWNOb25lLCBGb3JjZU9TUkV4aXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgRm9yY2VPU1JFeGl0LCBub2RlLT5jb2RlT3JpZ2luKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9J
TkRFWElOR19UWVBFUzoKQEAgLTYzOCw4ICs2MzUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkp
OwogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJh
eVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hl
Y2tTdHJ1Y3R1cmUsIG5vZGUtPmNvZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVj
dHVyZSgpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCkBAIC02NTAsMTAgKzY0Nyw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZmxhZ3MoKSAmIE5vZGVNdXN0R2VuZXJh
dGUpOwogICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRh
YmxlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihub2RlKTsKICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShhcnJheU1vZGUpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBzdG9yYWdlID0gY2hlY2tBcnJheShhcnJh
eU1vZGUsIG5vZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCwgbGVuZ3Ro
TmVlZHNTdG9yYWdlLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgICAgIE5vZGUq
IHN0b3JhZ2UgPSBjaGVja0FycmF5KGFycmF5TW9kZSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwLCBsZW5ndGhOZWVkc1N0b3JhZ2UpOwogICAgICAgICAgICAgaWYg
KCFzdG9yYWdlKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC03MzAs
NiArNzI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgog
ICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgTGFz
dE5vZGVUeXBlOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFu
ZENoZWNrOgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtODM3
LDcgKzgzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxv
Y2spOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBjaGVja0FycmF5KEFycmF5TW9kZSBhcnJheU1v
ZGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZSogYXJyYXksIE5vZGUqIGluZGV4LCBib29s
ICgqc3RvcmFnZUNoZWNrKShjb25zdCBBcnJheU1vZGUmKSA9IGNhbkNTRVN0b3JhZ2UsIGJvb2wg
c2hvdWxkR2VuZXJhdGUgPSB0cnVlKQorICAgIE5vZGUqIGNoZWNrQXJyYXkoQXJyYXlNb2RlIGFy
cmF5TW9kZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlKiBhcnJheSwgTm9kZSogaW5kZXgs
IGJvb2wgKCpzdG9yYWdlQ2hlY2spKGNvbnN0IEFycmF5TW9kZSYpID0gY2FuQ1NFU3RvcmFnZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChhcnJheU1vZGUuaXNTcGVjaWZpYygpKTsKICAgICAgICAg
CkBAIC04NTgsMjEgKzg1NywyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRyZW4sIERvbnRSZWZO
b2RlLCBTcGVjTm9uZSwgQXJyYXlpZnlUb1N0cnVjdHVyZSwgY29kZU9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBBcnJheWlmeVRvU3RydWN0dXJl
LCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgT3BJ
bmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIENlbGxVc2UpLCBpbmRleEVkZ2Up
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQXJyYXlpZnksIGNvZGVPcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdl
KGFycmF5LCBDZWxsVXNlKSwgaW5kZXhFZGdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgUmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIGNv
ZGVPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Q2hlY2tTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgRWRnZShhcnJheSwgQ2VsbFVzZSkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgUmVmQ2hpbGRy
ZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgY29kZU9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBjb2Rl
T3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwg
RWRnZShhcnJheSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04ODIs
MTcgKzg4MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKGFycmF5TW9kZS51
c2VzQnV0dGVyZmx5KCkpIHsKICAgICAgICAgICAgIHJldHVybiBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgICAg
IHNob3VsZEdlbmVyYXRlID8gUmVmQ2hpbGRyZW4gOiBEb250UmVmQ2hpbGRyZW4sCi0gICAgICAg
ICAgICAgICAgc2hvdWxkR2VuZXJhdGUgPyBSZWZOb2RlIDogRG9udFJlZk5vZGUsCi0gICAgICAg
ICAgICAgICAgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgRWRnZShhcnJheSwg
S25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25l
LCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLAotICAgICAgICAgICAgc2hvdWxkR2Vu
ZXJhdGUgPyBSZWZDaGlsZHJlbiA6IERvbnRSZWZDaGlsZHJlbiwKLSAgICAgICAgICAgIHNob3Vs
ZEdlbmVyYXRlID8gUmVmTm9kZSA6IERvbnRSZWZOb2RlLAotICAgICAgICAgICAgU3BlY05vbmUs
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdp
biwKKyAgICAgICAgICAgIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBL
bm93bkNlbGxVc2UpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBibGVzc0FycmF5T3BlcmF0aW9u
KEVkZ2UgYmFzZSwgRWRnZSBpbmRleCwgRWRnZSYgc3RvcmFnZUNoaWxkKQpAQCAtOTAyLDggKzg5
Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewogICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9u
dFJlZkNoaWxkcmVuLCBEb250UmVmTm9kZSwgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwKLSAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY05vbmUsIEZvcmNlT1NSRXhpdCwgbm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtOTgyLDcgKzk3NSw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIEVkZ2Ugb2xkRWRnZSA9IGVkZ2U7CiAgICAgICAgIEVkZ2UgbmV3RWRnZSA9IG5vZGUtPmNo
aWxkMSgpOwogICAgICAgICAKICAgICAgICAgaWYgKG5ld0VkZ2UudXNlS2luZCgpICE9IEludDMy
VXNlKSB7CkBAIC05OTIsOCArOTg0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQobmV3RWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKTsKICAgICAgICAgCi0gICAg
ICAgIG1fZ3JhcGgucmVmKG5ld0VkZ2UpOwotICAgICAgICBtX2dyYXBoLmRlcmVmKG9sZEVkZ2Up
OworICAgICAgICAvLyBDb21wbGV0ZWx5IGtpbGwgdGhlIFZhbHVlVG9JbnQzMi4gV2Ugd291bGRu
J3QgaGF2ZSB0byBkbyBjcmF6eSB0aGluZ3MgbGlrZSB0aGlzCisgICAgICAgIC8vIGlmIGl0IHdl
cmVuJ3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEyMzgu
CisgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKE5vcCk7CisgICAgICAgIG5vZGUt
PmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAKICAgICAgICAgZWRnZSA9IG5ld0VkZ2U7CiAg
ICAgfQpAQCAtMTAxNCw3ICsxMDA4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGluamVjdEludDMy
VG9Eb3VibGVOb2RlKEVkZ2UmIGVkZ2UsIFVzZUtpbmQgdXNlS2luZCA9IE51bWJlclVzZSwgU3Bl
Y3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQmFja3dhcmRTcGVjdWxhdGlvbikKICAgICB7
CiAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgRG9udFJlZkNoaWxkcmVuLCBSZWZOb2RlLCBTcGVjRG91
YmxlLAorICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNEb3VibGUsIAogICAgICAgICAg
ICAgZGlyZWN0aW9uID09IEJhY2t3YXJkU3BlY3VsYXRpb24gPyBJbnQzMlRvRG91YmxlIDogRm9y
d2FyZEludDMyVG9Eb3VibGUsCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
LCBFZGdlKGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKICAgICAgICAgCkBAIC0xMDM5LDkgKzEw
MzMsOCBAQCBwcml2YXRlOgogICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKEpTQzo6dG9JbnQzMih2
YWx1ZS5hc051bWJlcigpKSk7CiAgICAgICAgIEFTU0VSVCh2YWx1ZS5pc0ludDMyKCkpOwogICAg
ICAgICBlZGdlLnNldE5vZGUobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIFJlZk5vZGUsIFNwZWNJbnQzMiwgSlND
b25zdGFudCwKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhj
b2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOwotICAgICAgICBtX2dyYXBo
LmRlcmVmKG9sZE5vZGUpOworICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQzMiwg
SlNDb25zdGFudCwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgIE9wSW5m
byhjb2RlQmxvY2soKS0+YWRkT3JGaW5kQ29uc3RhbnQodmFsdWUpKSkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNlc3NhcnkoTm9kZSogbm9kZSwgQWRkU3Bl
Y3VsYXRpb25Nb2RlIG1vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTQ0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgR3JhcGg6OkdyYXBoKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQwogICAgICwgbV9maXhwb2ludFN0YXRlKEJlZm9yZUZp
eHBvaW50KQogICAgICwgbV9mb3JtKExvYWRTdG9yZSkKICAgICAsIG1fdW5pZmljYXRpb25TdGF0
ZShMb2NhbGx5VW5pZmllZCkKKyAgICAsIG1fcmVmQ291bnRTdGF0ZShFdmVyeXRoaW5nSXNMaXZl
KQogewogICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogfQpAQCAtMzEyLDcgKzMxMyw3IEBA
IHZvaWQgR3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYKIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBkYXRhTG9nKCJERkcgZm9yICIsIENvZGVCbG9j
a1dpdGhKSVRUeXBlKG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQpLCAiOlxuIik7Ci0gICAg
ZGF0YUxvZygiICBGaXhwb2ludCBzdGF0ZTogIiwgbV9maXhwb2ludFN0YXRlLCAiOyBGb3JtOiAi
LCBtX2Zvcm0sICI7IFVuaWZpY2F0aW9uIHN0YXRlOiAiLCBtX3VuaWZpY2F0aW9uU3RhdGUsICJc
biIpOworICAgIGRhdGFMb2coIiAgRml4cG9pbnQgc3RhdGU6ICIsIG1fZml4cG9pbnRTdGF0ZSwg
IjsgRm9ybTogIiwgbV9mb3JtLCAiOyBVbmlmaWNhdGlvbiBzdGF0ZTogIiwgbV91bmlmaWNhdGlv
blN0YXRlLCAiOyBSZWYgY291bnQgc3RhdGU6ICIsIG1fcmVmQ291bnRTdGF0ZSwgIlxuIik7CiAg
ICAgCiAgICAgTm9kZSogbGFzdE5vZGUgPSAwOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwg
bV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKQEAgLTM0NiwxNiArMzQ3LDYgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogICAgIH0KIH0KIAotdm9pZCBHcmFwaDo6cmVmQ2hpbGRy
ZW4oTm9kZSogb3ApCi17Ci0gICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4oKnRoaXMsIG9wLCBy
ZWYpOwotfQotCi12b2lkIEdyYXBoOjpkZXJlZkNoaWxkcmVuKE5vZGUqIG9wKQotewotICAgIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKCp0aGlzLCBvcCwgZGVyZWYpOwotfQotCiB2b2lkIEdyYXBo
OjpkZXRocmVhZCgpCiB7CiAgICAgaWYgKG1fZm9ybSA9PSBMb2FkU3RvcmUpCkBAIC0zOTAsNjcg
KzM4MSw2IEBAIHZvaWQgR3JhcGg6OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sKICAgICBz
dWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKIH0KIAotdm9pZCBH
cmFwaDo6Y29sbGVjdEdhcmJhZ2UoKQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgR2FyYmFnZSBDb2xsZWN0aW9uIik7Ci0gICAgCi0gICAgLy8gRmlyc3QgcmVzZXQg
dGhlIGNvdW50cyB0byAwIGZvciBhbGwgbm9kZXMuCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
LSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
LSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykK
LSAgICAgICAgICAgIGJsb2NrLT5hdChpbmRleEluQmxvY2spLT5zZXRSZWZDb3VudCgwKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5k
ZXgtLTspCi0gICAgICAgICAgICBibG9jay0+cGhpc1twaGlJbmRleF0tPnNldFJlZkNvdW50KDAp
OwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgZmluZCB0aGUgcm9vdHM6IHRoZSBub2RlcyB0aGF0
IGFyZSBtdXN0LWdlbmVyYXRlLiBTZXQgdGhlaXIgcmVmIGNvdW50cyB0bwotICAgIC8vIDEgYW5k
IHB1dCB0aGVtIG9uIHRoZSB3b3JrbGlzdC4KLSAgICBWZWN0b3I8Tm9kZSosIDEyOD4gd29ya2xp
c3Q7Ci0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJs
b2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVNdXN0R2VuZXJhdGUpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgbm9kZS0+c2V0UmVmQ291bnQoMSk7Ci0gICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQo
bm9kZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgd2hpbGUgKCF3b3JrbGlzdC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHdvcmtsaXN0Lmxhc3QoKTsKLSAgICAgICAg
d29ya2xpc3QucmVtb3ZlTGFzdCgpOwotICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSk7IC8vIEl0IHNob3VsZCBub3QgYmUgb24gdGhlIHdvcmtsaXN0IHVubGVzcyBpdCdzIHJl
ZidlZC4KLSAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgewotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKLSAg
ICAgICAgICAgICAgICBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSArIG5vZGUtPm51bUNo
aWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewotICAgICAgICAgICAgICAg
IGlmICghbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0pCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLm5vZGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLT5wb3N0
Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChjaGlsZE5vZGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKG5vZGUtPmNoaWxkMSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpLT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmNoaWxkMygpLT5wb3N0Zml4UmVmKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5hcHBlbmQobm9kZS0+Y2hpbGQzKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgR3JhcGg6OmRldGVy
bWluZVJlYWNoYWJpbGl0eSgpCiB7CiAgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlz
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE0NDgw
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtOTIsODMgKzkyLDM0IEBAIHB1YmxpYzoKICAgICBHcmFwaChKU0dsb2JhbERhdGEmLCBD
b2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+R3JhcGgoKTsKICAgICAKLSAgICAv
LyBNYXJrIGEgbm9kZSBhcyBiZWluZyByZWZlcmVuY2VkLgotICAgIE5vZGUqIHJlZihOb2RlKiBu
b2RlKQorICAgIHZvaWQgY2hhbmdlQ2hpbGQoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSkKICAg
ICB7Ci0gICAgICAgIC8vIElmIHRoZSB2YWx1ZSAoYmVmb3JlIGluY3JlbWVudGluZykgd2FzIGF0
IHJlZkNvdW50IHplcm8gdGhlbiB3ZSBuZWVkIHRvIHJlZiBpdHMgY2hpbGRyZW4uCi0gICAgICAg
IGlmICghbm9kZS0+cG9zdGZpeFJlZigpKQotICAgICAgICAgICAgcmVmQ2hpbGRyZW4obm9kZSk7
Ci0gICAgICAgIHJldHVybiBub2RlOwotICAgIH0KLSAgICBFZGdlIHJlZihFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICByZWYoZWRnZS5ub2RlKCkpOwotICAgICAgICByZXR1cm4gZWRnZTsKLSAg
ICB9Ci0gICAgRWRnZSByZWYoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZWYoZWRnZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZGVyZWYoTm9kZSogbm9kZSkKLSAg
ICB7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBpZiAoIW5vZGUtPnJlZkNvdW50KCkp
Ci0gICAgICAgICAgICBkdW1wKCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG5vZGUtPnBvc3RmaXhE
ZXJlZigpID09IDEpCi0gICAgICAgICAgICBkZXJlZkNoaWxkcmVuKG5vZGUpOwotICAgIH0KLSAg
ICB2b2lkIGRlcmVmKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGRlcmVmKGVkZ2Uubm9kZSgp
KTsKLSAgICB9Ci0gICAgdm9pZCBkZXJlZihOb2RlKiwgRWRnZSBlZGdlKQotICAgIHsKLSAgICAg
ICAgZGVyZWYoZWRnZSk7Ci0gICAgfQotICAgIAotICAgIC8vIFdoZW4gYSBub2RlJ3MgcmVmQ291
bnQgZ29lcyBmcm9tIDAgdG8gMSwgaXQgbXVzdCAobG9naWNhbGx5KSByZWN1cnNpdmVseSByZWYg
YWxsIG9mIGl0cyBjaGlsZHJlbiwgYW5kIHZpY2UgdmVyc2EuCi0gICAgdm9pZCByZWZDaGlsZHJl
bihOb2RlKik7Ci0gICAgdm9pZCBkZXJlZkNoaWxkcmVuKE5vZGUqKTsKLQotICAgIHZvaWQgY2hh
bmdlQ2hpbGQoRWRnZSYgZWRnZSwgTm9kZSogbmV3Tm9kZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVl
KQotICAgIHsKLSAgICAgICAgaWYgKGNoYW5nZVJlZikgewotICAgICAgICAgICAgcmVmKG5ld05v
ZGUpOwotICAgICAgICAgICAgZGVyZWYoZWRnZS5ub2RlKCkpOwotICAgICAgICB9CiAgICAgICAg
IGVkZ2Uuc2V0Tm9kZShuZXdOb2RlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjaGFuZ2VFZGdl
KEVkZ2UmIGVkZ2UsIEVkZ2UgbmV3RWRnZSwgYm9vbCBjaGFuZ2VSZWYgPSB0cnVlKQorICAgIHZv
aWQgY2hhbmdlRWRnZShFZGdlJiBlZGdlLCBFZGdlIG5ld0VkZ2UpCiAgICAgewotICAgICAgICBp
ZiAoY2hhbmdlUmVmKSB7Ci0gICAgICAgICAgICByZWYobmV3RWRnZSk7Ci0gICAgICAgICAgICBk
ZXJlZihlZGdlKTsKLSAgICAgICAgfQogICAgICAgICBlZGdlID0gbmV3RWRnZTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb21wYXJlQW5kU3dhcChFZGdlJiBlZGdlLCBOb2RlKiBvbGROb2RlLCBO
b2RlKiBuZXdOb2RlLCBib29sIGNoYW5nZVJlZikKKyAgICB2b2lkIGNvbXBhcmVBbmRTd2FwKEVk
Z2UmIGVkZ2UsIE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUpCiAgICAgewogICAgICAgICBp
ZiAoZWRnZS5ub2RlKCkgIT0gb2xkTm9kZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2hhbmdlQ2hpbGQoZWRnZSwgbmV3Tm9kZSwgY2hhbmdlUmVmKTsKKyAgICAgICAgY2hhbmdlQ2hp
bGQoZWRnZSwgbmV3Tm9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGFyZUFuZFN3YXAo
RWRnZSYgZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5ld0VkZ2UsIGJvb2wgY2hhbmdlUmVmKQor
ICAgIHZvaWQgY29tcGFyZUFuZFN3YXAoRWRnZSYgZWRnZSwgRWRnZSBvbGRFZGdlLCBFZGdlIG5l
d0VkZ2UpCiAgICAgewogICAgICAgICBpZiAoZWRnZSAhPSBvbGRFZGdlKQogICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBjaGFuZ2VFZGdlKGVkZ2UsIG5ld0VkZ2UsIGNoYW5nZVJlZik7Cisg
ICAgICAgIGNoYW5nZUVkZ2UoZWRnZSwgbmV3RWRnZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y2xlYXJBbmREZXJlZkNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZHJlbi5jaGlsZChpbmRleCkpCiAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGRlcmVmKG5vZGUtPmNoaWxkcmVuLmNoaWxkKGluZGV4KSk7CiAgICAgICAg
IG5vZGUtPmNoaWxkcmVuLnNldENoaWxkKGluZGV4LCBFZGdlKCkpOwogICAgIH0KICAgICB2b2lk
IGNsZWFyQW5kRGVyZWZDaGlsZDEoTm9kZSogbm9kZSkgeyBjbGVhckFuZERlcmVmQ2hpbGQobm9k
ZSwgMCk7IH0KQEAgLTE3NywxOCArMTI4LDE3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHBl
cmZvcm1TdWJzdGl0dXRpb24oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGJvb2wgc2hvdWxk
R2VuZXJhdGUgPSBub2RlLT5zaG91bGRHZW5lcmF0ZSgpOwogICAgICAgICBpZiAobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNoaWxk
SWR4ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZElkeCA8IG5vZGUtPmZpcnN0Q2hpbGQoKSAr
IG5vZGUtPm51bUNoaWxkcmVuKCk7IGNoaWxkSWR4KyspCi0gICAgICAgICAgICAgICAgcGVyZm9y
bVN1YnN0aXR1dGlvbkZvckVkZ2UobV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIHNob3VsZEdl
bmVyYXRlKTsKKyAgICAgICAgICAgICAgICBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShtX3Zh
ckFyZ0NoaWxkcmVuW2NoaWxkSWR4XSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
ZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSwgc2hvdWxkR2VuZXJhdGUp
OwotICAgICAgICAgICAgcGVyZm9ybVN1YnN0aXR1dGlvbkZvckVkZ2Uobm9kZS0+Y2hpbGQyKCks
IHNob3VsZEdlbmVyYXRlKTsKLSAgICAgICAgICAgIHBlcmZvcm1TdWJzdGl0dXRpb25Gb3JFZGdl
KG5vZGUtPmNoaWxkMygpLCBzaG91bGRHZW5lcmF0ZSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vi
c3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vi
c3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBwZXJmb3JtU3Vi
c3RpdHV0aW9uRm9yRWRnZShub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShFZGdlJiBjaGlsZCwgYm9vbCBh
ZGRSZWYpCisgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uRm9yRWRnZShFZGdlJiBjaGlsZCkK
ICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxseSB1bnVz
ZWQuCiAgICAgICAgIGlmICghY2hpbGQpCkBAIC0yMDQsMjIgKzE1NCwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIFRoZXJlIGlzIGRlZmluaXRlbHkgYSByZXBsYWNlbWVudC4gQXNzZXJ0IHRoYXQg
dGhlIHJlcGxhY2VtZW50IGRvZXMgbm90CiAgICAgICAgIC8vIGhhdmUgYSByZXBsYWNlbWVudC4K
ICAgICAgICAgQVNTRVJUKCFjaGlsZC0+cmVwbGFjZW1lbnQpOwotICAgICAgICAKLSAgICAgICAg
aWYgKGFkZFJlZikKLSAgICAgICAgICAgIHJlZihjaGlsZCk7CiAgICAgfQogICAgIAogI2RlZmlu
ZSBERkdfREVGSU5FX0FERF9OT0RFKHRlbXBsYXRlUHJlLCB0ZW1wbGF0ZVBvc3QsIHR5cGVQYXJh
bXMsIHZhbHVlUGFyYW1zQ29tbWEsIHZhbHVlUGFyYW1zLCB2YWx1ZUFyZ3MpIFwKLSAgICB0ZW1w
bGF0ZVByZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFJlZkNoaWxkcmVu
TW9kZSByZWZDaGlsZHJlbk1vZGUsIFJlZk5vZGVNb2RlIHJlZk5vZGVNb2RlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVQYXJhbXMpIFwKKyAgICB0ZW1wbGF0ZVBy
ZSB0eXBlUGFyYW1zIHRlbXBsYXRlUG9zdCBOb2RlKiBhZGROb2RlKFNwZWN1bGF0ZWRUeXBlIHR5
cGUgdmFsdWVQYXJhbXNDb21tYSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXAogICAgICAgICBOb2Rl
KiBub2RlID0gbmV3IChtX2FsbG9jYXRvcikgTm9kZSh2YWx1ZUFyZ3MpOyBcCiAgICAgICAgIG5v
ZGUtPnByZWRpY3QodHlwZSk7IFwKLSAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlTXVz
dEdlbmVyYXRlKSBcCi0gICAgICAgICAgICBub2RlLT5yZWYoKTsgXAotICAgICAgICBpZiAocmVm
Tm9kZU1vZGUgPT0gUmVmTm9kZSkgXAotICAgICAgICAgICAgbm9kZS0+cmVmKCk7IFwKLSAgICAg
ICAgaWYgKHJlZkNoaWxkcmVuTW9kZSA9PSBSZWZDaGlsZHJlbikgXAotICAgICAgICAgICAgcmVm
Q2hpbGRyZW4obm9kZSk7IFwKICAgICAgICAgcmV0dXJuIG5vZGU7IFwKICAgICB9CiAgICAgREZH
X1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfQUREX05PREUpCkBAIC0yMjcs
MTIgKzE2OCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKLSAgICAv
LyBDYWxsIHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG5v
ZGVzIHRoYXQgZGVhbCB3aXRoCi0gICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KLSAgICAvLyBj
eWNsZXMsIGFuZCBoZW5jZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbm90IGVub3VnaC4gVGhpcyB3
aWxsIHJlc2V0IHRoZQotICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNo
YWJpbGl0eS4KLSAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7Ci0gICAgCiAgICAgdm9pZCBjb252
ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKICAgICB7
CiAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQpAQCAtNjY5LDE5ICs2MDQsMTkg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkSWR4IDwgbm9kZS0+Zmlyc3RDaGlsZCgpICsgbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoISFtX3ZhckFyZ0No
aWxkcmVuW2NoaWxkSWR4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVBbmRTd2Fw
KG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLCBvbGRUaGluZywgbmV3VGhpbmcsIG5vZGUtPnNo
b3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAo
bV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0sIG9sZFRoaW5nLCBuZXdUaGluZyk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpLCBvbGRU
aGluZywgbmV3VGhpbmcsIG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICAgICAgY29t
cGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCksIG9sZFRoaW5nLCBuZXdUaGluZyk7
CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY29tcGFyZUFuZFN3YXAobm9kZS0+Y2hpbGRyZW4uY2hpbGQyKCks
IG9sZFRoaW5nLCBuZXdUaGluZywgbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAg
ICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSwgb2xkVGhpbmcsIG5ld1Ro
aW5nKTsKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQzKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBjb21wYXJlQW5kU3dhcChub2RlLT5jaGlsZHJlbi5jaGls
ZDMoKSwgb2xkVGhpbmcsIG5ld1RoaW5nLCBub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgIGNvbXBhcmVBbmRTd2FwKG5vZGUtPmNoaWxkcmVuLmNoaWxkMygpLCBvbGRUaGluZywg
bmV3VGhpbmcpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNzU1LDYgKzY5MCw3IEBAIHB1
YmxpYzoKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKICAg
ICBHcmFwaEZvcm0gbV9mb3JtOwogICAgIFVuaWZpY2F0aW9uU3RhdGUgbV91bmlmaWNhdGlvblN0
YXRlOworICAgIFJlZkNvdW50U3RhdGUgbV9yZWZDb3VudFN0YXRlOwogcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlz
dCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNp
b24gMTQ0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNzIsOSArNzIsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAjZGVm
aW5lIERGR19ERUZJTkVfSU5TRVJUX05PREUodGVtcGxhdGVQcmUsIHRlbXBsYXRlUG9zdCwgdHlw
ZVBhcmFtcywgdmFsdWVQYXJhbXNDb21tYSwgdmFsdWVQYXJhbXMsIHZhbHVlQXJncykgXAotICAg
IHRlbXBsYXRlUHJlIHR5cGVQYXJhbXMgdGVtcGxhdGVQb3N0IE5vZGUqIGluc2VydE5vZGUoc2l6
ZV90IGluZGV4LCBSZWZDaGlsZHJlbk1vZGUgcmVmQ2hpbGRyZW5Nb2RlLCBSZWZOb2RlTW9kZSBy
ZWZOb2RlTW9kZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSB2YWx1ZVBhcmFtc0NvbW1hIHZhbHVlUGFy
YW1zKSBcCisgICAgdGVtcGxhdGVQcmUgdHlwZVBhcmFtcyB0ZW1wbGF0ZVBvc3QgTm9kZSogaW5z
ZXJ0Tm9kZShzaXplX3QgaW5kZXgsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgdmFsdWVQYXJhbXNDb21t
YSB2YWx1ZVBhcmFtcykgXAogICAgIHsgXAotICAgICAgICByZXR1cm4gaW5zZXJ0KGluZGV4LCBt
X2dyYXBoLmFkZE5vZGUocmVmQ2hpbGRyZW5Nb2RlLCByZWZOb2RlTW9kZSwgdHlwZSB2YWx1ZVBh
cmFtc0NvbW1hIHZhbHVlQXJncykpOyBcCisgICAgICAgIHJldHVybiBpbnNlcnQoaW5kZXgsIG1f
Z3JhcGguYWRkTm9kZSh0eXBlIHZhbHVlUGFyYW1zQ29tbWEgdmFsdWVBcmdzKSk7IFwKICAgICB9
CiAgICAgREZHX1ZBUklBRElDX1RFTVBMQVRFX0ZVTkNUSU9OKERGR19ERUZJTkVfSU5TRVJUX05P
REUpCiAjdW5kZWYgREZHX0RFRklORV9JTlNFUlRfTk9ERQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAgICAgOiBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgY2hpbGRy
ZW4oY2hpbGRyZW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKLSAgICAgICAgLCBtX3JlZkNvdW50KDApCisgICAgICAgICwgbV9yZWZDb3VudCgx
KQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICB7CiAgICAgICAgIHNldE9w
QW5kRGVmYXVsdEZsYWdzKG9wKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFj
ZW5jeUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmly
dHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3Vu
dCgwKQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3Bl
Y05vbmUpCiAgICAgewogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CkBAIC0xMTQs
NyArMTE0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICA6IGNvZGVPcmlnaW4oY29kZU9yaWdp
bikKICAgICAgICAgLCBjaGlsZHJlbihBZGphY2VuY3lMaXN0OjpGaXhlZCwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQotICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEp
CiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCiAgICAgICAgICwgbV9wcmVkaWN0aW9u
KFNwZWNOb25lKQogICAgIHsKQEAgLTEyNyw3ICsxMjcsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIGNoaWxkcmVuKEFkamFjZW5j
eUxpc3Q6OkZpeGVkLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICwgbV9yZWZDb3VudCgw
KQorICAgICAgICAsIG1fcmVmQ291bnQoMSkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCiAgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVkPihpbW0yLm1fdmFsdWUp
KQogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKQEAgLTE0MSw3ICsxNDEsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIDogY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAs
IGNoaWxkcmVuKEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLCBmaXJzdENoaWxkLCBudW1DaGlsZHJl
bikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQot
ICAgICAgICAsIG1fcmVmQ291bnQoMCkKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQogICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1
bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUp
CkBAIC0yNzIsOCArMjcyLDYgQEAgc3RydWN0IE5vZGUgewogICAgIHZvaWQgY29udmVydFRvQ29u
c3RhbnQodW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewogICAgICAgICBtX29wID0gSlND
b25zdGFudDsKLSAgICAgICAgaWYgKG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAgICAg
ICAgICAgbV9yZWZDb3VudC0tOwogICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CiAgICAgICAgIG1fb3BJ
bmZvID0gY29uc3RhbnROdW1iZXI7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CkBAIC0yODIs
OCArMjgwLDYgQEAgc3RydWN0IE5vZGUgewogICAgIHZvaWQgY29udmVydFRvR2V0TG9jYWxVbmxp
bmtlZChWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCiAgICAgewogICAgICAgICBtX29wID0gR2V0TG9j
YWxVbmxpbmtlZDsKLSAgICAgICAgaWYgKG1fZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQotICAg
ICAgICAgICAgbV9yZWZDb3VudC0tOwogICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CiAgICAgICAgIG1f
b3BJbmZvID0gbG9jYWw7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CkBAIC0zODYsMTEgKzM4
MiwyNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBjb250YWluc01vdkhpbnQoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7Cisg
ICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmFyaWFibGVBY2Nlc3NEYXRh
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAg
IGNhc2UgTW92SGludEFuZENoZWNrOgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAg
IGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIEZsdXNo
OgpAQCAtOTUyLDYgKzk2NCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAgICAgICAgIHN3aXRj
aCAob3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICBjYXNlIE1vdkhpbnQ6
CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
CiAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKICAgICAgICAgY2FzZSBGb3J3YXJkSW50MzJU
b0RvdWJsZToKICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CkBAIC05NzMsMTIgKzk4OCw2IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQ7CiAgICAgfQogCi0gICAg
Tm9kZSogcmVmKCkKLSAgICB7Ci0gICAgICAgIG1fcmVmQ291bnQrKzsKLSAgICAgICAgcmV0dXJu
IHRoaXM7Ci0gICAgfQotCiAgICAgdW5zaWduZWQgcG9zdGZpeFJlZigpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9yZWZDb3VudCsrOwpAQCAtOTk0LDE4ICsxMDAzLDYgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZGVyZWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOwotICAgICAgICAtLW1f
cmVmQ291bnQ7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIHBvc3RmaXhEZXJlZigpCi0gICAg
ewotICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7Ci0gICAgICAgIHJldHVybiBtX3JlZkNvdW50
LS07Ci0gICAgfQotICAgIAogICAgIEVkZ2UmIGNoaWxkMSgpCiAgICAgewogICAgICAgICBBU1NF
UlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFyZ3MpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOSBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nlc3NE
YXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhHZXRM
b2NhbCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIE5vZGVFeGl0c0Zvcndh
cmQpIFwKKyAgICBtYWNybyhNb3ZIaW50QW5kQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
RXhpdHNGb3J3YXJkKSBcCisgICAgbWFjcm8oTW92SGludCwgTm9kZURvZXNOb3RFeGl0KSBcCisg
ICAgbWFjcm8oWm9tYmllSGludCwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oUGhhbnRv
bSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKE5vcCwgTm9kZURvZXNOb3RFeGl0KSBc
CiAgICAgbWFjcm8oUGhpLCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVsZXZhbnRUb09TUikgXApA
QCAtNzYsNyArNzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyog
SGludCB0aGF0IGlubGluaW5nIGJlZ2lucyBoZXJlLiBObyBjb2RlIGlzIGdlbmVyYXRlZCBmb3Ig
dGhpcyBub2RlLiBJdCdzIG9ubHkgKi9cCiAgICAgLyogdXNlZCBmb3IgY29weWluZyBPU1IgZGF0
YSBpbnRvIGlubGluZSBmcmFtZSBkYXRhLCB0byBzdXBwb3J0IHJlaWZpY2F0aW9uIG9mICovXAog
ICAgIC8qIGNhbGwgZnJhbWVzIG9mIGlubGluZWQgZnVuY3Rpb25zLiAqL1wKLSAgICBtYWNybyhJ
bmxpbmVTdGFydCwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKElubGluZVN0YXJ0
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAogICAgIC8qIE5v
ZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICovXAogICAgIG1hY3JvKEJpdEFuZCwgTm9kZVJl
c3VsdEludDMyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAocHJlZGljdGlvbikKICAgICAgICAgICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihwcmVkaWN0aW9uKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2hhbmdlZCB8PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlRmxhZ3Mo
ZmxhZ3MgJiB+Tm9kZVVzZWRBc0ludExvY2FsbHkpOworICAgICAgICAgICAgLy8gQXNzdW1lIGNv
bnNlcnZhdGl2ZWx5IHRoYXQgYSBTZXRMb2NhbCBpbXBsaWVzIHRoYXQgdGhlIHZhbHVlIG1heSBm
bG93IHRocm91Z2ggYSBsb29wLAorICAgICAgICAgICAgLy8gYW5kIHNvIHdlIHdvdWxkIGhhdmUg
b3ZlcmZsb3cgbGVhZGluZyB0byB0aGUgcHJvZ3JhbSAib2JzZXJ2aW5nIiBudW1iZXJzIGV2ZW4g
aWYgYWxsCisgICAgICAgICAgICAvLyB1c2VycyBvZiB0aGUgdmFsdWUgYXJlIGRvaW5nIHRvSW50
MzIuIEl0IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gcmV2aXNpdCB0aGlzIGF0IHNvbWUKKyAgICAg
ICAgICAgIC8vIHBvaW50IGFuZCBhY3R1YWxseSBjaGVjayBpZiB0aGUgZGF0YSBmbG93IGludm9s
dmVzIGxvb3BzLCBidXQgcmlnaHQgbm93IEkgZG9uJ3QgdGhpbmsKKyAgICAgICAgICAgIC8vIHdl
IGhhdmUgZXZpZGVuY2UgdGhhdCB0aGlzIHdvdWxkIGJlIGJlbmVmaWNpYWwgZm9yIGJlbmNobWFy
a3MuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5tZXJnZUZsYWdzKChmbGFncyAmIH5Ob2RlVXNlZEFzSW50TG9jYWxseSkgfCBOb2RlVXNl
ZEFzTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTIxNCwxMiArMjIwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAg
ICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdChub2RlLT5j
aGlsZDEoKS0+cHJlZGljdGlvbigpKTsKIAotICAgICAgICAgICAgLy8gQXNzdW1lIGNvbnNlcnZh
dGl2ZWx5IHRoYXQgYSBTZXRMb2NhbCBpbXBsaWVzIHRoYXQgdGhlIHZhbHVlIG1heSBmbG93IHRo
cm91Z2ggYSBsb29wLAotICAgICAgICAgICAgLy8gYW5kIHNvIHdlIHdvdWxkIGhhdmUgb3ZlcmZs
b3cgbGVhZGluZyB0byB0aGUgcHJvZ3JhbSAib2JzZXJ2aW5nIiBudW1iZXJzIGV2ZW4gaWYgYWxs
Ci0gICAgICAgICAgICAvLyB1c2VycyBvZiB0aGUgdmFsdWUgYXJlIGRvaW5nIHRvSW50MzIuIEl0
IG1pZ2h0IGJlIHdvcnRod2hpbGUgdG8gcmV2aXNpdCB0aGlzIGF0IHNvbWUKLSAgICAgICAgICAg
IC8vIHBvaW50IGFuZCBhY3R1YWxseSBjaGVjayBpZiB0aGUgZGF0YSBmbG93IGludm9sdmVzIGxv
b3BzLCBidXQgcmlnaHQgbm93IEkgZG9uJ3QgdGhpbmsKLSAgICAgICAgICAgIC8vIHdlIGhhdmUg
ZXZpZGVuY2UgdGhhdCB0aGlzIHdvdWxkIGJlIGJlbmVmaWNpYWwgZm9yIGJlbmNobWFya3MuCi0g
ICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKHZhcmlhYmxl
QWNjZXNzRGF0YS0+ZmxhZ3MoKSB8IE5vZGVVc2VkQXNOdW1iZXIpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBub2RlLT5jaGlsZDEoKS0+bWVyZ2VGbGFncyh2YXJpYWJsZUFjY2Vzc0RhdGEtPmZs
YWdzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
NzM3LDcgKzczOCwxMCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAg
ICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAg
ICAgICAgY2FzZSBJZGVudGl0eTogeworICAgICAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBj
YXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgorICAgICAgICBjYXNl
IFpvbWJpZUhpbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUg
dmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAg
Ly8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAg
ICAgICAgQ1JBU0goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTQ0ODAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAyMiw2ICsyMDIyLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6IHsKKyAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjayhub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElubGluZVN0YXJ0OiB7CisgICAgICAg
IGNvbXBpbGVJbmxpbmVTdGFydChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFNl
dExvY2FsOiB7CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdo
ZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKICAgICAgICAgLy8gYXMgYSBzcGVjdWxhdGlv
biBwb2ludC4gU28gYmVmb3JlIHdlIHNwZWN1bGF0ZSBtYWtlIHN1cmUgdGhhdCB3ZQpAQCAtNDk0
Miw3ICs0OTU4LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIElubGlu
ZVN0YXJ0OgogICAgIGNhc2UgTm9wOgogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNDQ4MDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTY4LDYgKzE5NjgsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBNb3ZIaW50QW5k
Q2hlY2s6IHsKKyAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjayhub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIElubGluZVN0YXJ0OiB7CisgICAgICAg
IGNvbXBpbGVJbmxpbmVTdGFydChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Y2FzZSBNb3ZIaW50OgorICAgIGNhc2UgWm9tYmllSGludDogeworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiAKICAgICBjYXNlIFNl
dExvY2FsOiB7CiAgICAgICAgIC8vIFNldExvY2FsIGRvdWJsZXMgYXMgYSBoaW50IGFzIHRvIHdo
ZXJlIGEgbm9kZSB3aWxsIGJlIHN0b3JlZCBhbmQKQEAgLTQ3ODgsNyArNDgwNCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICBjYXNlIElubGluZVN0YXJ0OgogICAg
IGNhc2UgTm9wOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcnRMYXN0T1NSRXhpdFQKICAgICBpZiAoIXZh
bHVlUmVjb3ZlcnkpIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQg
bm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKICAgICAgICAg
Ly8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbi4KLSAgICAgICAgaWYgKG1fY3Vy
cmVudE5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnROb2Rl
LT5jb250YWluc01vdkhpbnQoKSkgewogICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBtX2pp
dC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLT5hdChtX2luZGV4SW5CbG9jayAtIDEpOwotICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPm9wKCkgPT0gU2V0TG9j
YWwpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRh
aW5zTW92SGludCgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExv
Y2FsLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjcyLDcgKzI3Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbnZl
cnRMYXN0T1NSRXhpdFQKICAgICAgICAgQVNTRVJUKHNldExvY2FsLT5jaGlsZDEoKS0+Y2hpbGQx
KCkgPT0gbV9jdXJyZW50Tm9kZSk7CiAgICAgZWxzZQogICAgICAgICBBU1NFUlQoc2V0TG9jYWwt
PmNoaWxkMSgpID09IG1fY3VycmVudE5vZGUpOwotICAgIEFTU0VSVChzZXRMb2NhbC0+b3AoKSA9
PSBTZXRMb2NhbCk7CisgICAgQVNTRVJUKHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7CiAg
ICAgQVNTRVJUKHNldExvY2FsLT5jb2RlT3JpZ2luID09IG1fY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pOwogCiAgICAgTm9kZSogbmV4dE5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxv
Y2tdLT5hdChzZXRMb2NhbEluZGV4SW5CbG9jayArIDEpOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZQogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTW92SGludChOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFNldExvY2FsKTsKKyAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYg
bm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0g
bm9kZS0+bG9jYWwoKTsKIApAQCAtMTU4MCw2ICsxNTgwLDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUKICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlh
YmxlRXZlbnQ6Om1vdkhpbnQoTWluaWZpZWRJRChjaGlsZCksIG5vZGUtPmxvY2FsKCkpKTsKIH0K
IAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnRBbmRDaGVjayhOb2RlKiBub2Rl
KQoreworICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgIHNwZWN1bGF0ZShub2RlLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVJbmxpbmVTdGFydChOb2RlKiBub2RlKQoreworICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gbm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Cisg
ICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpOworICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG5vZGUt
PmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKKyAg
ICAgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXND
YXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCisgICAgICAgICAgICByZWNvdmVyeSA9IFZh
bHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBBcmd1bWVudFBvc2l0aW9uJiBhcmd1bWVudFBvc2l0aW9uID0KKyAgICAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0
ICsgaV07CisgICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgICAg
IGlmICghYXJndW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9zc2libGUoKSkKKyAgICAgICAg
ICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkp
CisgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3Rh
Y2spOworICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFyZ3VtZW50UG9z
aXRpb24ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVl
U291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1
bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spOworICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkp
KQorICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNT
dGFjayk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1
dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBU
aGUgcmVjb3Zlcnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhpbmcgdGhhdCBoYXMgYWxy
ZWFkeSBiZWVuCisgICAgICAgIC8vIHN0b3JlZCBpbnRvIHRoZSBzdGFjayBhdCB0aGUgcmlnaHQg
cGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCisgICAgICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMg
Y29kZSBpc24ndCBzbWFydCBlbm91Z2ggdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCisgICAgICAg
IC8vIFRoZSBleGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJl
YWxseSBuZWVkIHRvIGJlCisgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KKyNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIGRhdGFMb2dGKCJcblJlY292ZXJ5IGZvciBhcmd1
bWVudCAlZDogIiwgaSk7CisgICAgICAgIHJlY292ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
KyNlbmRpZgorICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5
OworICAgIH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBi
bG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xNjc4LDUwICsxNzI2LDE5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTW92SGlu
dDoKICAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChtX2N1cnJlbnROb2RlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBJbmxpbmVTdGFydDogewotICAg
ICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9jdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgICAgICAgICAgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1f
Y3VycmVudE5vZGUtPmFyZ3VtZW50UG9zaXRpb25TdGFydCgpOwotICAgICAgICAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUo
aW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeSByZWNvdmVyeTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+
aXNDYXB0dXJlZChhcmd1bWVudFRvT3BlcmFuZChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJbkpTU3RhY2soKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudFBvc2l0
aW9uJiBhcmd1bWVudFBvc2l0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLm1fYXJndW1lbnRQb3NpdGlvbnNbYXJndW1lbnRQb3NpdGlvblN0YXJ0ICsgaV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJndW1lbnRQb3NpdGlvbi5zaG91bGRVbmJveElmUG9z
c2libGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVl
U291cmNlKFZhbHVlSW5KU1N0YWNrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGFyZ3VtZW50UG9zaXRpb24uc2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2sp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKGFy
Z3VtZW50UG9zaXRpb24ucHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKGFyZ3VtZW50UG9zaXRpb24u
cHJlZGljdGlvbigpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9
IFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYXJndW1lbnRQb3NpdGlvbi5wcmVkaWN0aW9uKCkp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2Uo
Qm9vbGVhbkluSlNTdGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNT
dGFjayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyeSA9IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKHZhbHVlU291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGUgcmVjb3Zlcnkgc2hvdWxkIHJlZmVyIGVpdGhlciB0byBzb21ldGhp
bmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCi0gICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlZCBp
bnRvIHRoZSBzdGFjayBhdCB0aGUgcmlnaHQgcGxhY2UsIG9yIHRvIGEgY29uc3RhbnQsCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBBcmd1bWVudHMgY29kZSBpc24ndCBzbWFydCBl
bm91Z2ggdG8gaGFuZGxlIGFueXRoaW5nIGVsc2UuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRo
ZSBleGNlcHRpb24gaXMgdGhlIHRoaXMgYXJndW1lbnQsIHdoaWNoIHdlIGRvbid0IHJlYWxseSBu
ZWVkIHRvIGJlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFibGUgdG8gcmVjb3Zlci4KLSNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJc
blJlY292ZXJ5IGZvciBhcmd1bWVudCAlZDogIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
Y292ZXJ5LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1tpXSA9IHJlY292ZXJ5OwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDogewor
ICAgICAgICAgICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBtX2N1cnJlbnROb2RlLT5sb2NhbCgp
OworICAgICAgICAgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6
c2V0TG9jYWwobV9jdXJyZW50Tm9kZS0+bG9jYWwoKSwgRGF0YUZvcm1hdERlYWQpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoYmVsb25nc0luTWluaWZpZWRH
cmFwaChtX2N1cnJlbnROb2RlLT5vcCgpKSkKICAgICAgICAgICAgICAgICAgICAgbV9taW5pZmll
ZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxNDQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBjb21waWxlKE5vZGUqKTsKICAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGUq
KTsKLSAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGUoQmFz
aWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTY4Miw2ICs2
ODEsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGFzdE5vZGUtPm9wKCkgPT0gQnJhbmNo
ICYmIGxhc3ROb2RlLT5jaGlsZDEoKSA9PSBtX2N1cnJlbnROb2RlID8gYmxvY2stPnNpemUoKSAt
IDEgOiBVSU5UX01BWDsKICAgICB9CiAgICAgCisgICAgdm9pZCBjb21waWxlTW92SGludChOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVJbmxpbmVTdGFydChOb2RlKik7CisKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlVUludDMy
VG9OdW1iZXIoTm9kZSopOwogCiAjaWYgVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsOSArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IGNoaWxkLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPnZvdGUo
Vm90ZVN0cnVjdHVyZUNoZWNrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5p
c0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzQ2VsbFNwZWN1bGF0aW9uKHZhcmlhYmxlLT5wcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNob3VsZENvbnNpZGVyRm9ySG9pc3RpbmcodmFyaWFibGUpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVj
dHVyZUNoZWNrKHZhcmlhYmxlLCBub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTE4LDkgKzExNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBjaGlsZC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+dm90ZShWb3RlT3RoZXIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkgfHwgdmFyaWFibGUtPnN0cnVj
dHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDZWxsU3BlY3VsYXRpb24odmFy
aWFibGUtPnByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3Vs
ZENvbnNpZGVyRm9ySG9pc3RpbmcodmFyaWFibGUpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2so
dmFyaWFibGUsIDApOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzIsOSArMTI4LDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyB3ZSdyZSBub3QgaG9pc3RpbmcgYSBjaGVj
ayB0aGF0IHdvdWxkIGNvbnRyYXZlbmUgY2hlY2tzIHRoYXQgYXJlCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGFscmVhZHkgYmVpbmcgcGVyZm9ybWVkLgogICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8IHZhcmlhYmxl
LT5zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2YXJp
YWJsZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzaG91bGRDb25z
aWRlckZvckhvaXN0aW5nKHZhcmlhYmxlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBzb3VyY2UgPSBub2RlLT5jaGlsZDEoKS5ub2Rl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgc3ViSW5kZXhJbkJsb2NrID0g
MDsgc3ViSW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytzdWJJbmRleEluQmxvY2spIHsK
QEAgLTI4OCwxMSArMjgyLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGdldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBEb250UmVm
Q2hpbGRyZW4sIERvbnRSZWZOb2RlLCB2YXJpYWJsZS0+cHJlZGljdGlvbigpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgR2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSksIEVk
Z2Uobm9kZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgdmFy
aWFibGUtPnByZWRpY3Rpb24oKSwgR2V0TG9jYWwsIGNvZGVPcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICBPcEluZm8odmFyaWFibGUpLCBFZGdlKG5vZGUpKTsKICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2sgKyAxLCBSZWZDaGlsZHJlbiwgRG9udFJlZk5vZGUsIFNwZWNOb25lLCBDaGVj
a1N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4sIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIENoZWNrU3RydWN0
dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKGdldExvY2FsLCBDZWxsVXNlKSk7CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkg
PT0gbm9kZSkKQEAgLTMyMCwxNCArMzE0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgRWRnZSBjaGlsZDEgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBEb250UmVmQ2hpbGRyZW4sIERvbnRSZWZOb2RlLCBT
cGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8odmFyaWFibGUpLCBjaGlsZDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgU2V0TG9jYWwsIGNvZGVPcmlnaW4sIE9wSW5mbyh2YXJpYWJsZSks
IGNoaWxkMSk7CiAKICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIGEgRm9yd2FyZENoZWNrU3Ry
dWN0dXJlIHRvIGluZGljYXRlIHRoYXQgd2Ugc2hvdWxkIGV4aXQgdG8gdGhlCiAgICAgICAgICAg
ICAgICAgICAgIC8vIG5leHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24gcmF0aGVyIHRoYW4gcmVleGVj
dXRpbmcgdGhlIGN1cnJlbnQgb25lLgogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgUmVmQ2hp
bGRyZW4sIERvbnRSZWZOb2RlLCBTcGVjTm9uZSwgRm9yd2FyZENoZWNrU3RydWN0dXJlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0
dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2Vs
bFVzZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Rm9yd2FyZENoZWNrU3RydWN0dXJlLCBjb2RlT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJl
KSksCisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2Up
KTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0Myw2ICszMzcsMTcgQEAgcHVibGlj
OgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBib29sIHNob3VsZENvbnNpZGVyRm9ySG9pc3Rpbmco
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSkKKyAgICB7CisgICAgICAgIGlmICghdmFyaWFi
bGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAodmFyaWFibGUtPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih2
YXJpYWJsZS0+cHJlZGljdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQgbm90aWNlU3RydWN0dXJlQ2hl
Y2soVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIENoZWNrRGF0YT46OkFk
ZFJlc3VsdCByZXN1bHQgPQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE0NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsMTAgKzE0NywxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgbm9kZXNJblRoaXNCbG9jay5hZGQobm9kZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGJsb2NrLT5pc1BoaUluZGV4KGkpKQogICAgICAgICAgICAgICAgICAgICBw
aGlzSW5UaGlzQmxvY2suYWRkKG5vZGUpOwotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBUaHJlYWRlZENQUyB8fCAhbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpCisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291
bnQpCiAgICAgICAgICAgICAgICAgICAgIFZfRVFVQUwoKG5vZGUpLCBteVJlZkNvdW50cy5nZXQo
bm9kZSksIG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG15UmVmQ291bnRzLmdldChub2Rl
KSA/IG5vZGUtPmFkanVzdGVkUmVmQ291bnQoKSA6IHRydWUpOworICAgICAgICAgICAgICAgICAg
ICBWX0VRVUFMKChub2RlKSwgbm9kZS0+cmVmQ291bnQoKSwgMSk7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7ICsraikg
ewogICAgICAgICAgICAgICAgICAgICBFZGdlIGVkZ2UgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIGop
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UpCkBAIC0xNzgsNyArMTc4LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtPm9wKCkgPT0gU2V0TG9jYWwKICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gU2V0QXJndW1lbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gRmx1c2gKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8IGVkZ2UtPm9wKCkgPT0gUGhpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBlZGdlLT5v
cCgpID09IFpvbWJpZUhpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkg
PT0gTW92SGludAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBNb3ZI
aW50QW5kQ2hlY2spOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHBoaXNJblRoaXNCbG9jay5jb250YWlucyhlZGdlLm5vZGUoKSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTE4Nyw2ICsxOTAsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bm9kZSwgZWRnZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0+b3AoKSA9PSBT
ZXRMb2NhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gWm9t
YmllSGludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92
SGludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0gTW92SGlu
dEFuZENoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZWRnZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGVkZ2UtPm9wKCkgPT0g
Rmx1c2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjAsNiArMjI2LDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGxvY2FsLCBibG9jay0+bV9wcmVkZWNlc3NvcnNba10sIHByZXZOb2RlKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2Tm9kZS0+b3AoKSA9PSBTZXRMb2NhbAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHByZXZOb2RlLT5vcCgpID09IE1vdkhpbnQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9PSBNb3ZIaW50
QW5kQ2hlY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9kZS0+b3AoKSA9
PSBab21iaWVIaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgcHJldk5vZGUtPm9w
KCkgPT0gU2V0QXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwcmV2Tm9k
ZS0+b3AoKSA9PSBQaGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZOb2RlID09
IGVkZ2Uubm9kZSgpKSB7CkBAIC0yODcsNiArMjk2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgR2V0TG9jYWwncyB0aGF0IHdlIGtu
b3cgdG8gYmUgZGVhZCwgYnV0IHRoYXQgdGhlIGdyYXBoCisgICAgICAgICAgICAgICAgICAgIC8v
IGRvZXNuJ3QgeWV0IGtub3cgdG8gYmUgZGVhZC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFt
eVJlZkNvdW50cy5nZXQobm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFRocmVhZGVkQ1BTKQogICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUsIGJsb2NrSW5kZXgpLCBnZXRMb2Nh
bFBvc2l0aW9ucy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID09IG5vdFNldCk7CiAgICAgICAgICAg
ICAgICAgICAgIGdldExvY2FsUG9zaXRpb25zLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBpOwo=
</data>
<flag name="review"
          id="212549"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>