<?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>90420</bug_id>
          
          <creation_ts>2012-07-02 18:20:33 -0700</creation_ts>
          <short_desc>JSC: Add ability to symbolically set and dump JSC VM options</short_desc>
          <delta_ts>2012-07-03 12:19:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wingo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>661858</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 18:20:33 -0700</bug_when>
    <thetext>It would be nice to be able to set VM options (and verify them) from the jsc command line.  This will make it easier to adjust VM heuristics for testing and tuning purposes without having to recompile JSC.

For example, to do a test run with the DFG disabled, one should be run jsc from the command line as follows:
$ jsc --useDFGJIT=false

Another example, to shows the default values for the VM settings:
$ jsc --options
JSC runtime options:
   useJIT: true
   useDFGJIT: true
   showDisassembly: false
   showDFGDisassembly: false
   maximumOptimizationCandidateInstructionCount: 10000
   maximumFunctionForCallInlineCandidateInstructionCount: 180
   maximumFunctionForConstructInlineCandidateInstructionCount: 100
   maximumInliningDepth: 5
   thresholdForJITAfterWarmUp: 100
   thresholdForJITSoon: 100
   thresholdForOptimizeAfterWarmUp: 1000
   thresholdForOptimizeAfterLongWarmUp: 5000
   thresholdForOptimizeSoon: 1000
   executionCounterIncrementForLoop: 1
   executionCounterIncrementForReturn: 15
   randomizeExecutionCountsBetweenCheckpoints: false
   maximumExecutionCountsBetweenCheckpoints: 1000
   likelyToTakeSlowCaseThreshold: 0.150000
   couldTakeSlowCaseThreshold: 0.050000
   likelyToTakeSlowCaseMinimumCount: 100
   couldTakeSlowCaseMinimumCount: 10
   osrExitProminenceForFrequentExitSite: 0.300000
   osrExitCountForReoptimization: 100
   osrExitCountForReoptimizationFromLoop: 5
   reoptimizationRetryCounterMax: 18
   reoptimizationRetryCounterStep: 1
   minimumOptimizationDelay: 1
   maximumOptimizationDelay: 5
   desiredProfileLivenessRate: 0.750000
   desiredProfileFullnessRate: 0.350000
   doubleVoteRatioForDoubleFormat: 2.000000
   minimumNumberOfScansBetweenRebalance: 100
   gcMarkStackSegmentSize: 4096
   numberOfGCMarkers: 7
   opaqueRootMergeThreshold: 1000
   forceWeakRandomSeed: false
   forcedWeakRandomSeed: 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661878</commentid>
    <comment_count>1</comment_count>
      <attachid>150516</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 18:58:48 -0700</bug_when>
    <thetext>Created attachment 150516
Fix.

In addition to refactoring the options system, I also added a &quot;useDFGJIT&quot; option (true buy default) and removed the &quot;thresholdForOptimizeNextInvocation&quot; option.  The latter was already not being used anywhere previously.  Also added comments about how the options work at the top of runtime/Options.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661880</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 19:02:51 -0700</bug_when>
    <thetext>Attachment 150516 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/Options.h:162:  int32_tVal is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 22 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>661884</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 19:06:30 -0700</bug_when>
    <thetext>FYI, the &quot;int32_tVal&quot; field was named that way so that I can do some macro magic for concatinating the &quot;int32_t&quot; type with &quot;Val&quot; to form the field name.  I&apos;m requesting that we let this instance be an exception to the style rule.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661885</commentid>
    <comment_count>4</comment_count>
      <attachid>150516</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-02 19:09:30 -0700</bug_when>
    <thetext>Comment on attachment 150516
Fix.

Attachment 150516 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13126331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661886</commentid>
    <comment_count>5</comment_count>
      <attachid>150516</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-02 19:17:54 -0700</bug_when>
    <thetext>Comment on attachment 150516
Fix.

Attachment 150516 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13125337</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661889</commentid>
    <comment_count>6</comment_count>
      <attachid>150518</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 19:21:43 -0700</bug_when>
    <thetext>Created attachment 150518
Rev 1: fixed OptionID operator++ complaint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661894</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 19:24:46 -0700</bug_when>
    <thetext>Attachment 150518 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/Options.h:162:  int32_tVal is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 22 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>661898</commentid>
    <comment_count>8</comment_count>
      <attachid>150518</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-02 19:49:49 -0700</bug_when>
    <thetext>Comment on attachment 150518
Rev 1: fixed OptionID operator++ complaint.

Attachment 150518 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13137229</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661914</commentid>
    <comment_count>9</comment_count>
      <attachid>150523</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 20:41:01 -0700</bug_when>
    <thetext>Created attachment 150523
rev 2: Need to include &lt;wtf/StringExtras.h&gt; to get the windows build to be happy for strcasecmp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661917</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-02 20:44:21 -0700</bug_when>
    <thetext>Attachment 150523 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/runtime/Options.h:162:  int32_tVal is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 22 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>661927</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 21:03:54 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; FYI, the &quot;int32_tVal&quot; field was named that way so that I can do some macro magic for concatinating the &quot;int32_t&quot; type with &quot;Val&quot; to form the field name.  I&apos;m requesting that we let this instance be an exception to the style rule.  Thanks.

Yeah, in general we make lots of exceptions like this.  I think this is sensible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661928</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 21:04:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=150523) [details]
&gt; rev 2: Need to include &lt;wtf/StringExtras.h&gt; to get the windows build to be happy for strcasecmp.

Is this meant to be r? cq?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661930</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 21:05:50 -0700</bug_when>
    <thetext>Waiting for the windows build bot to confirm my build fix.  Will r? cq? after.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661935</commentid>
    <comment_count>14</comment_count>
      <attachid>150523</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 21:09:19 -0700</bug_when>
    <thetext>Comment on attachment 150523
rev 2: Need to include &lt;wtf/StringExtras.h&gt; to get the windows build to be happy for strcasecmp.

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

I&apos;m happy with this patch!  Please consider the suggestions though, and mark as r? cq? when you&apos;re ready.

&gt; Source/JavaScriptCore/jsc.cpp:618
&gt; +    fprintf(stderr, &quot;  --options                  Dumps all JSC VM options and exits\n&quot;);

Typo: &quot;and exit&quot;

&gt; Source/JavaScriptCore/jsc.cpp:619
&gt; +    fprintf(stderr, &quot;  --dumpOptions              Dumps all JSC VM options before continuing\n&quot;);

Is this option needed?

&gt; Source/JavaScriptCore/runtime/Options.h:34
&gt; +// How JSC VM options work?

Typo: &quot;How do JSC VM options work?&quot;

&gt; Source/JavaScriptCore/runtime/Options.h:153
&gt; +        TYPE_bool,
&gt; +        TYPE_unsigned,
&gt; +        TYPE_double,
&gt; +        TYPE_int32_t

I realize that there&apos;s no good way of making these follow naming conventions due to the need to macro-concatenate things, but it would be better to at least follow the rule that all-caps is reserved for the names of macros.  As such, I think it would be better to use &quot;Type_bool&quot; than &quot;TYPE_bool&quot;.

&gt;&gt; Source/JavaScriptCore/runtime/Options.h:162
&gt;&gt; +            bool boolVal;
&gt;&gt; +            unsigned unsignedVal;
&gt;&gt; +            double doubleVal;
&gt;&gt; +            int32_t int32_tVal;
&gt; 
&gt; int32_tVal is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

One way to make this nicer would be to make these Val_bool rather than boolVal.  Then, the naming here would match the naming of types.  Would that work with the macro magic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661937</commentid>
    <comment_count>15</comment_count>
      <attachid>150523</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-02 21:14:34 -0700</bug_when>
    <thetext>Comment on attachment 150523
rev 2: Need to include &lt;wtf/StringExtras.h&gt; to get the windows build to be happy for strcasecmp.

Attachment 150523 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13133281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661994</commentid>
    <comment_count>16</comment_count>
      <attachid>150544</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 23:24:33 -0700</bug_when>
    <thetext>Created attachment 150544
rev 3: Used typedef trick to eliminate the &apos;_&apos; altogether + addressed Filip&apos;s comments.

The windows build seemed to refuse to build because the style checker had complained about the &apos;_&apos; in the var names.  I&apos;ve applied Gavin&apos;s typedef trick to alias int32_t as int32 inside the Option class so as to workaround this issue.

Regarding Filip&apos;s comments:

&gt;&gt; Source/JavaScriptCore/jsc.cpp:618
&gt;&gt;+    fprintf(stderr, &quot;  --options                  Dumps all JSC VM options and exits\n&quot;);
&gt;
&gt;Typo: &quot;and exit&quot;

The comment says &quot;Dumps ... and exits&quot;.  This is consistent in being 3rd person singular, which many of the pre-existing comments were also.  A quick survey of 3rd person singular forms of &quot;exit&quot; on the net seems to agree that &quot;exits&quot; is the proper form.  So, I&apos;m leaving it as is.

&gt;&gt;Source/JavaScriptCore/jsc.cpp:619
&gt;&gt;+    fprintf(stderr, &quot;  --dumpOptions              Dumps all JSC VM options before continuing\n&quot;);
&gt;
&gt;Is this option needed?

Addressed in previous comment.  It&apos;s useful when we want to invoke a test with some options, and wanting the options documented in the output of the test in one swoop.  Plus, it&apos;s just a  few lines of code.  I would prefer to keep it.

The other issues are all now fixed.  Will set flags to r? cq? when the build bot are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662000</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-02 23:29:29 -0700</bug_when>
    <thetext>Oops, I never did publish my original response about &quot;--dumpOptions&quot;.  Hence, there is no &quot;previous comment&quot; unlike what I said.  Anyway, the rational is that these command line flags are meant to make it convenient to run the VM with difference heuristic values for testing and tuning.  Adding the &quot;--dumpOptions&quot; flag will allow us to keep the options dump together with the test output dump from the same run for easier tracking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662001</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 23:33:29 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Oops, I never did publish my original response about &quot;--dumpOptions&quot;.  Hence, there is no &quot;previous comment&quot; unlike what I said.  Anyway, the rational is that these command line flags are meant to make it convenient to run the VM with difference heuristic values for testing and tuning.  Adding the &quot;--dumpOptions&quot; flag will allow us to keep the options dump together with the test output dump from the same run for easier tracking.

Ah, that does sound useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662029</commentid>
    <comment_count>19</comment_count>
      <attachid>150544</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-03 01:09:06 -0700</bug_when>
    <thetext>Comment on attachment 150544
rev 3: Used typedef trick to eliminate the &apos;_&apos; altogether + addressed Filip&apos;s comments.

Attachment 150544 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13126395</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662046</commentid>
    <comment_count>20</comment_count>
      <attachid>150544</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-03 01:23:01 -0700</bug_when>
    <thetext>Comment on attachment 150544
rev 3: Used typedef trick to eliminate the &apos;_&apos; altogether + addressed Filip&apos;s comments.

Attachment 150544 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13137294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662047</commentid>
    <comment_count>21</comment_count>
      <attachid>150556</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-03 01:23:13 -0700</bug_when>
    <thetext>Created attachment 150556
rev 4: one more change to defer option dumping and exiting till after all options have been parsed.

This last change (rev 4) is to defer the dumping of options and exiting till after other options have been parsed.  Otherwise, the options being dumped may not reflect all the options that being set (from the command line args) for the current run (which what a user would expect).

The windows build still seems to be failing but the cause is unknown.  I&apos;m sub</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662056</commentid>
    <comment_count>22</comment_count>
      <attachid>150559</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-03 01:42:23 -0700</bug_when>
    <thetext>Created attachment 150559
rev 5: Added missing #include &quot;JSExportMacros.h&quot; in Options.h.

Previous build reports were complaining of unresolved exported values.  The missing #include of JSExportMacros.h would explain this.  This is now fixed in rev5 of the patch.  Submitting for EWS test.   Will submit for r? cq? if build bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662075</commentid>
    <comment_count>23</comment_count>
      <attachid>150559</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-07-03 02:38:11 -0700</bug_when>
    <thetext>Comment on attachment 150559
rev 5: Added missing #include &quot;JSExportMacros.h&quot; in Options.h.

Attachment 150559 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13130407</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662085</commentid>
    <comment_count>24</comment_count>
    <who name="Andy Wingo">wingo</who>
    <bug_when>2012-07-03 02:57:11 -0700</bug_when>
    <thetext>See also bug 72960.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662086</commentid>
    <comment_count>25</comment_count>
      <attachid>150559</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-07-03 02:57:36 -0700</bug_when>
    <thetext>Comment on attachment 150559
rev 5: Added missing #include &quot;JSExportMacros.h&quot; in Options.h.

Attachment 150559 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13127435</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662305</commentid>
    <comment_count>26</comment_count>
      <attachid>150630</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-03 09:42:31 -0700</bug_when>
    <thetext>Created attachment 150630
rev 6: + mods to vcproj&apos;s .def to satisfy Windows. Also removed an unrelated file from previous patch. 

rev 6: Will wait for build bots to green light before r? cq?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662372</commentid>
    <comment_count>27</comment_count>
      <attachid>150630</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2012-07-03 11:01:35 -0700</bug_when>
    <thetext>Comment on attachment 150630
rev 6: + mods to vcproj&apos;s .def to satisfy Windows. Also removed an unrelated file from previous patch. 

The bots are green.  Ready to review and commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662429</commentid>
    <comment_count>28</comment_count>
      <attachid>150630</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 12:19:40 -0700</bug_when>
    <thetext>Comment on attachment 150630
rev 6: + mods to vcproj&apos;s .def to satisfy Windows. Also removed an unrelated file from previous patch. 

Clearing flags on attachment: 150630

Committed r121798: &lt;http://trac.webkit.org/changeset/121798&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662430</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-03 12:19:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150516</attachid>
            <date>2012-07-02 18:58:48 -0700</date>
            <delta_ts>2012-07-02 19:21:43 -0700</delta_ts>
            <desc>Fix.</desc>
            <filename>bug-90420.patch</filename>
            <type>text/plain</type>
            <size>49088</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTY2Miw2ICs2NjcsMjUgQEAg
c3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYQogICAgICAgICB9CiAgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi1oIikgfHwgIXN0cmNtcChhcmcsICItLWhlbHAiKSkKICAg
ICAgICAgICAgIHByaW50VXNhZ2VTdGF0ZW1lbnQodHJ1ZSk7CisKKyAgICAgICAgaWYgKCFzdHJj
bXAoYXJnLCAiLS1vcHRpb25zIikpIHsKKyAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFs
bE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLWR1bXBPcHRpb25zIikpIHsKKyAgICAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VlIGlmIHRoZSAtLSBvcHRpb24g
aXMgYSBKU0MgVk0gb3B0aW9uLgorICAgICAgICAvLyBOT1RFOiBBdCB0aGlzIHBvaW50LCB3ZSBr
bm93IHRoYXQgdGhlIGFyZyBzdGFydHMgd2l0aCAiLS0iLiBTa2lwIGl0LgorICAgICAgICBpZiAo
SlNDOjpPcHRpb25zOjpzZXRPcHRpb24oJmFyZ1syXSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBh
cmcgd2FzIHJlY29nbml6ZWQgYXMgYSBWTSBvcHRpb24gYW5kIGhhcyBiZWVuIHBhcnNlZC4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBKdXN0IGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYXJnLiAK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgYXJnIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRo
ZSBWTSBub3IgYnkganNjLiBQYXNzIGl0IG9uIHRvIHRoZQorICAgICAgICAvLyBzY3JpcHQuCiAg
ICAgICAgIG9wdGlvbnMuc2NyaXB0cy5hcHBlbmQoU2NyaXB0KHRydWUsIGFyZ3ZbaV0pKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBMaW5r
QnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplCiAKIExpbmtCdWZmZXI6OkNvZGVS
ZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKQogewotICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0
aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KTsKKyAgICBBU1NFUlQoT3B0aW9uczo6c2hvd0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpOwogICAgIAogICAgIENv
ZGVSZWYgcmVzdWx0ID0gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBwcml2YXRlOgogLy8gaXMg
dHJ1ZSwgc28geW91IGNhbiBoaWRlIGV4cGVuc2l2ZSBkaXNhc3NlbWJseS1vbmx5IGNvbXB1dGF0
aW9ucyBpbnNpZGUgdGhlcmUuCiAKICNkZWZpbmUgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyUmVm
ZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGluZykgIFwKLSAgICBGSU5BTElaRV9DT0RF
X0lGKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxv
Z0FyZ3VtZW50c0ZvckhlYWRpbmcpCisgICAgRklOQUxJWkVfQ09ERV9JRihPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxvZ0FyZ3VtZW50c0Zvckhl
YWRpbmcpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3NzEsNyArMjc3MSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAg
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKKyAgICBp
ZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXph
dGlvbkRlbGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHVuc2lnbmVkIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKQEAgLTI3ODIsOSArMjc4Miw5IEBA
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAgZGF0YUxvZygiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoIW51bWJlck9mVmFsdWVQcm9m
aWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVz
c1JhdGUpCi0gICAgICAgICYmICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91
YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFBy
b2ZpbGVGdWxsbmVzc1JhdGUpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1pbmltdW1PcHRpbWl6YXRp
b25EZWxheSkKKyAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCisgICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKKyAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEyMTcxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYg
KCFudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50ICYmIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9u
czo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02
NzksNyArNjc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9m
UmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0g
T3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6
Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2Fz
ZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNjk5
LDcgKzY5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKCFudW1iZXJPZlJh
cmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAg
ICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHNwZWNpYWxGYXN0Q2Fz
ZUNvdW50KSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291bnQpIC8gbV9leGVjdXRpb25FbnRyeUNv
dW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKGlu
dCBieXRlY29kZU9mZnNldCkKQEAgLTcwOSw3ICs3MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2ln
bmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWdu
ZWQgdmFsdWUgPSBzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291
bnQgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKQEAgLTcxOSw3ICs3MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNw
ZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSBzbG93Q2FzZUNvdW50ICsgc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQg
JiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0g
T3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1
cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAm
JiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBP
cHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBleGVjdXRpb25FbnRyeUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9leGVjdXRpb25FbnRyeUNvdW50OyB9CkBAIC05NDEsMTIgKzk0MSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCB0aGlzKTsKKyAgICAgICAgICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgaml0U29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7Cisg
ICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckpJVFNvb24oKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNvbnN0IEV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdApA
QCAtOTc3LDI1ICs5NzcsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRvIGF2b2lk
IHRocmFzaGluZy4KICAgICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKTsKICAgICAgICAgICAgIHJldHVybiBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Ci0gICAgICAgICAgICBpZiAobV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4
KQotICAgICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXJNYXgoKSkKKyAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0g
T3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJXYXJtVXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkg
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6
ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAg
ICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQpAQCAtMTA3NSw3
ICsxMDc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBj
b2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9wdGltaXplU29vbiA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKKyAg
ICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplU29vbigpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCks
IHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBvc3JFeGl0Q291
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KQEAgLTExMDQsMTIgKzEx
MDQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRG
b3JSZW9wdGltaXphdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRU
aHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uRnJvbUxvb3AoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6
YXRpb25Gcm9tTG9vcCk7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJl
c2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUIHRocmVzaG9sZCkKICAgICB7CiAgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFu
ZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50czsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpKQorICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJl
c2hvbGQgPSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
OworICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhy
ZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcz
LDcgKzEyNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAg
ICAgdW5zaWduZWQgZGVwdGggPSAwOwogICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkg
PSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKICAg
ICAgICAgKytkZXB0aDsKLSAgICAgICAgaWYgKGRlcHRoID49IE9wdGlvbnM6Om1heGltdW1Jbmxp
bmluZ0RlcHRoKQorICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5n
RGVwdGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGVwdGggZXhjZWVkZWQuCiAg
ICAgICAgIAogICAgICAgICBpZiAoZW50cnktPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZp
c2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyOSArNDEsMjkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogLy8gY2hlY2sgb3Bjb2Rlcy4KIGlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0
aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudCgpOwogfQogCiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNv
bnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTIxNzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDcgKzEzNiw3IEBAIGVudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEZpeHBvaW4K
IAogaW5saW5lIGJvb2wgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsKLSAgICByZXR1cm4gT3B0
aW9uczo6c2hvd0Rpc2Fzc2VtYmx5IHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseTsKKyAg
ICByZXR1cm4gT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rp
c2Fzc2VtYmx5KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC02MCw3ICs2MSwxMCBAQCBpbmxpbmUgYm9vbCBjb21w
aWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAK
KworICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJERkcgY29tcGls
aW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBPU1JFeGl0OjpkdW1w
KEZJTEUqIG91dCkgY29uc3QKIAogYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCiB7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBk
ZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVu
Y2VGb3JGcmVxdWVudEV4aXRTaXRlKQorICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291
bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQ
cm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTIx
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiB2b3RlZCB0byBiZWNvbWUgYSBkb3Vi
bGUsIHRoZW4gbWFrZSBpdCBhCiAgICAgICAgIC8vIGRvdWJsZS4KLSAgICAgICAgaWYgKGRvdWJs
ZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdCkK
KyAgICAgICAgaWYgKGRvdWJsZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRp
b0ZvckRvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgTWFya1N0
YWNrU2VnbWVudCogTWFya1N0YWNrU2VnbWVudEFsbG9jYQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZUFuZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFu
ZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpKTsKIH0KIAogdm9pZCBN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpyZWxlYXNlKE1hcmtTdGFja1NlZ21lbnQqIHNlZ21l
bnQpCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpz
aHJpbmtSZQogICAgIHdoaWxlIChzZWdtZW50cykgewogICAgICAgICBNYXJrU3RhY2tTZWdtZW50
KiB0b0ZyZWUgPSBzZWdtZW50czsKICAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy0+bV9wcmV2
aW91czsKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh0b0ZyZWUsIE9w
dGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVj
b21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSgp
KTsKICAgICB9CiB9CiAKIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheShNYXJrU3RhY2tT
ZWdtZW50QWxsb2NhdG9yJiBhbGxvY2F0b3IpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3Ip
Ci0gICAgLCBtX3NlZ21lbnRDYXBhY2l0eShNYXJrU3RhY2tTZWdtZW50OjpjYXBhY2l0eUZyb21T
aXplKE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpKQorICAgICwgbV9zZWdtZW50Q2Fw
YWNpdHkoTWFya1N0YWNrU2VnbWVudDo6Y2FwYWNpdHlGcm9tU2l6ZShPcHRpb25zOjpnY01hcmtT
dGFja1NlZ21lbnRTaXplKCkpKQogICAgICwgbV90b3AoMCkKICAgICAsIG1fbnVtYmVyT2ZQcmV2
aW91c1NlZ21lbnRzKDApCiB7CkBAIC0yNjIsNyArMjYyLDcgQEAgTWFya1N0YWNrVGhyZWFkU2hh
cmVkRGF0YTo6TWFya1N0YWNrVGhyZQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
KGZhbHNlKQogewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnM7ICsraSkgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKICAg
ICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yID0gbmV3IFNsb3RWaXNpdG9yKCp0aGlzKTsK
ICAgICAgICAgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5hcHBlbmQoc2xvdFZpc2l0b3IpOwog
ICAgICAgICBtX21hcmtpbmdUaHJlYWRzLmFwcGVuZChjcmVhdGVUaHJlYWQobWFya2luZ1RocmVh
ZFN0YXJ0RnVuYywgc2xvdFZpc2l0b3IsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
ICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29u
LCBhbmQgZG9uYXRlLgogICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQubV9z
aGFyZWRNYXJrU3RhY2spOwogCi0gICAgaWYgKG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycykKKyAgICBpZiAobV9zaGFy
ZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkpCiAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3Qo
KTsKIH0KIApAQCAtMzc3LDEwICszNzcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQog
ICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgCiAjaWYgRU5BQkxFKFBBUkFMTEVM
X0dDKQotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDEpIHsKKyAgICBpZiAo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDEpIHsKICAgICAgICAgd2hpbGUgKCFtX3N0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlOyBtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24t
LTspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmlt
dW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbigqdGhpcywg
bV9zdGFjay5yZW1vdmVMYXN0KCkpOwogICAgICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgp
OwogICAgICAgICB9CkBAIC00MDEsMTQgKzQwMSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFp
bkZyb21TaGFyZWQoU2hhcmVkCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAg
ICAgCi0gICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKTsKKyAgICBBU1NFUlQo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZVBh
cmFsbGVsOwogCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHNob3VsZEJlUGFyYWxsZWwg
PSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDE7CisgICAgc2hvdWxkQmVQYXJhbGxlbCA9
IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAxOwogI2Vsc2UKLSAgICBBU1NFUlQoT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMgPT0gMSk7CisgICAgQVNTRVJUKE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCkgPT0gMSk7CiAgICAgc2hvdWxkQmVQYXJhbGxlbCA9IGZhbHNlOwogI2Vu
ZGlmCiAgICAgCkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwor
ICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwogICAg
ICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2ssIGlkbGVUaHJlYWRDb3VudCk7CiAgICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcgKzMwNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVy
Z2VUaHJlc2hvbGQpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3Bh
cXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsK
ICAgICAgICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGlu
ZSB2b2lkIE1hcmtTdGFjazo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQogICAgIHsKICNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vy
cyA9PSAxKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEp
IHsKICAgICAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4K
ICAgICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRvbmF0ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09IDEpCisgICAgICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sg
PyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCA6IE9wdGlvbnM6OmV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRp
bWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrID8gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKICAgICBpZiAo
a2luZCA9PSBFbnRlck9wdGltaXphdGlvbkNoZWNrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9u
IDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpp
bml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgT3B0aW9u
czo6aW5pdGlhbGl6ZU9wdGlvbnMoKTsKKyAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJz
Ojppbml0aWFsaXplKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBleHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBF
TkFCTEUoTExJTlQpKQogc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxv
Y2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCiB7Ci0gICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9uczo6dXNlSklUKQorICAgIGlmICghZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkKCkgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2
b2lkCiBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUq
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQogICAgICwgbV9nbG9iYWxT
Y29wZUNoYWluKCkKLSAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21T
ZWVkID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQgOiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
ICsgMS4wKSkpCisgICAgLCBtX3dlYWtSYW5kb20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2Vl
ZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgKyAxLjApKSkKICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2NyArMzcsMTMgQEAKIC8vIFNldCB0byAxIHRvIGNvbnRyb2wgdGhlIGhldXJpc3RpY3Mg
dXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVV
UklTVElDUyAwCiAKLSNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIE9wdGlvbnMgewotCi1ib29sIHVzZUpJVDsKLQotYm9vbCBzaG93RGlzYXNzZW1ibHk7Ci1i
b29sIHNob3dERkdEaXNhc3NlbWJseTsKLQotdW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci0KLXVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotdW5zaWduZWQgbWF4aW11bUZ1bmN0
aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQotdW5zaWdu
ZWQgbWF4aW11bUlubGluaW5nRGVwdGg7Ci0KLWludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0KLWludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcDsKLWludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKLQotaW50MzJf
dCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWludDMyX3QgZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvclJldHVybjsKIAotYm9vbCByYW5kb21pemVFeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHM7Ci1pbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHM7CituYW1lc3BhY2UgSlNDIHsKIAotZG91YmxlIGxpa2VseVRvVGFrZVNsb3dD
YXNlVGhyZXNob2xkOwotZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwotdW5zaWdu
ZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci11bnNpZ25lZCBjb3VsZFRha2VT
bG93Q2FzZU1pbmltdW1Db3VudDsKLQotZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVl
bnRFeGl0U2l0ZTsKLXVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uOwotdW5z
aWduZWQgb3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcDsKLQotdW5zaWduZWQg
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXg7Ci11bnNpZ25lZCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlclN0ZXA7Ci0KLXVuc2lnbmVkIG1pbmltdW1PcHRpbWl6YXRpb25EZWxheTsKLXVu
c2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25EZWxheTsKLWRvdWJsZSBkZXNpcmVkUHJvZmlsZUxp
dmVuZXNzUmF0ZTsKLWRvdWJsZSBkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZTsKLQotZG91Ymxl
IGRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdDsKLQotdW5zaWduZWQgbWluaW11bU51bWJl
ck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlOwotdW5zaWduZWQgZ2NNYXJrU3RhY2tTZWdtZW50U2l6
ZTsKLXVuc2lnbmVkIG51bWJlck9mR0NNYXJrZXJzOwotdW5zaWduZWQgb3BhcXVlUm9vdE1lcmdl
VGhyZXNob2xkOwotCi1ib29sIGZvcmNlV2Vha1JhbmRvbVNlZWQ7Ci11bnNpZ25lZCBmb3JjZWRX
ZWFrUmFuZG9tU2VlZDsKLQotI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNTKQogc3RhdGlj
IGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBib29sJiB2YWx1ZSkKIHsKICAgICBpZiAo
IXN0cmNhc2VjbXAoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInllcyIp
IHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7CkBAIC0xMjYsMjcgKzcyLDIyIEBAIHN0YXRpYyBi
b29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgZG8KICAgICByZXR1cm4gc3NjYW5mKHN0cmlu
ZywgIiVsZiIsICZ2YWx1ZSkgPT0gMTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLXZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lLCBV
IHZhbHVlKQorI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNTKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgb3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiBuYW1lKQogewogICAgIGNvbnN0IGNoYXIqIHN0cmluZ1ZhbHVlID0gZ2V0ZW52KG5h
bWUpOwotICAgIGlmICghc3RyaW5nVmFsdWUpIHsKLSAgICAgICAgdmFyaWFibGUgPSBzYWZlQ2Fz
dDxUPih2YWx1ZSk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KICAgICAKICAgICBpZiAocGFyc2Uoc3RyaW5nVmFsdWUsIHZhcmlhYmxlKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBh
cnNlICVzPSVzXG4iLCBuYW1lLCBzdHJpbmdWYWx1ZSk7Ci0gICAgdmFyaWFibGUgPSBzYWZlQ2Fz
dDxUPih2YWx1ZSk7CiB9Ci0KLSNkZWZpbmUgU0VUKHZhcmlhYmxlLCB2YWx1ZSkgc2V0SGV1cmlz
dGljKHZhcmlhYmxlLCAiSlNDXyIgI3ZhcmlhYmxlLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIFNF
VCh2YXJpYWJsZSwgdmFsdWUpIHZhcmlhYmxlID0gdmFsdWUKICNlbmRpZgogCisKIHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoaW50IG1heE51bWJlck9mR0NNYXJrZXJz
KQogewogICAgIGludCBjcHVzVG9Vc2UgPSAxOwpAQCAtMTYzLDc2ICsxMDQsMTE0IEBAIHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMKICAgICByZXR1cm4gY3B1c1RvVXNl
OwogfQogCi12b2lkIGluaXRpYWxpemVPcHRpb25zKCkKLXsKLSAgICBTRVQodXNlSklULCB0cnVl
KTsKLSAgICAKLSAgICBTRVQoc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSk7Ci0gICAgU0VUKHNob3dE
RkdEaXNhc3NlbWJseSwgZmFsc2UpOyAvLyBERkcgZGlzYXNzZW1ibHkgaXMgc2hvd24gaWYgc2hv
d0Rpc2Fzc2VtYmx5IHx8IHNob3dERkdEaXNhc3NlbWJseQotICAgIAotICAgIFNFVChtYXhpbXVt
T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApOwotICAgIAotICAg
IFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCwgMTgwKTsKLSAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKLSAgICAKLSAgICBTRVQobWF4aW11bUlubGluaW5n
RGVwdGgsIDUpOwogCi0gICAgU0VUKHRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCAgICAgMTAw
KTsKLSAgICBTRVQodGhyZXNob2xkRm9ySklUU29vbiwgICAgICAgICAgICAxMDApOworT3B0aW9u
czo6RW50cnkgT3B0aW9uczo6c19vcHRpb25zW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc107CiAK
LSAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIDEwMDApOwotICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgNTAwMCk7Ci0gICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgICAgICAgICAgICAxMDAwKTsKLQotICAgIFNFVChl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgICAxKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpOwotICAgIAotICAgIFNFVChyYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlKTsKLSAgICBTRVQobWF4aW11
bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCk7CisvLyBSZWFsaXplIHRo
ZSBuYW1lcyBmb3IgZWFjaCBvZiB0aGUgb3B0aW9uczoKK2NvbnN0IE9wdGlvbnM6OkVudHJ5SW5m
byBPcHRpb25zOjpzX29wdGlvbnNJbmZvW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc10gPSB7Cisj
ZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAg
ICB7ICNuYW1lXywgT3B0aW9uczo6VFlQRV8jI3R5cGVfIH0sCisgICAgSlNDX09QVElPTlMoRk9S
X0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorfTsKKwordm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKK3sKKyAgICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMg
d2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVf
LCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIG5hbWVfKCkgPSBkZWZhdWx0VmFsdWVfOwor
ICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04K
KworICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZhcnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBh
cHBsaWNhYmxlLgorICAgIC8vIFRoZSBldm4gdmFyIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUg
b3B0aW9uIHByZWZpeGVkIHdpdGgKKyAgICAvLyAiSlNDXyIuCisjaWYgRU5BQkxFKFJVTl9USU1F
X0hFVVJJU1RJQ1MpCisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1
bHRWYWx1ZV8pIFwKKyAgICBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMobmFtZV8oKSwgIkpT
Q18iICNuYW1lXyk7CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZP
Ul9FQUNIX09QVElPTgorICAgIAorI2VuZGlmIC8vIFJVTl9USU1FX0hFVVJJU1RJQ1MKKworICAg
IC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8g
dGhlIG9wdGlvbnM6CisgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKKyAgICBBU1NFUlQo
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbigpKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49
IDApOwogCi0gICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAwLjE1KTsK
LSAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91
bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cg
Y2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KLSAgICBTRVQobGlrZWx5
VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50LCAgICAxMCk7Ci0gICAgCi0gICAgU0VUKG9zckV4aXRQcm9taW5lbmNl
Rm9yRnJlcXVlbnRFeGl0U2l0ZSwgIDAuMyk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uLCAgICAgICAgIDEwMCk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1p
emF0aW9uRnJvbUxvb3AsIDUpOwotCi0gICAgU0VUKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
U3RlcCwgMSk7Ci0KLSAgICBTRVQobWluaW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDEpOwotICAg
IFNFVChtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksICAgNSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9m
aWxlTGl2ZW5lc3NSYXRlLCAwLjc1KTsKLSAgICBTRVQoZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1Jh
dGUsIDAuMzUpOwotICAgIAotICAgIFNFVChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQs
IDIpOwotICAgIAotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Us
IDEwMCk7Ci0gICAgU0VUKGdjTWFya1N0YWNrU2VnbWVudFNpemUsICAgICAgICAgICAgICAgcGFn
ZVNpemUoKSk7Ci0gICAgU0VUKG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCwgICAgICAgICAgICAg
MTAwMCk7Ci0gICAgU0VUKG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtl
cnMoNykpOyAvLyBXZSBkb24ndCBzY2FsZSBzbyB3ZWxsIGJleW9uZCA3LgotCi0gICAgQVNTRVJU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwID49IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKHRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAgPj0gMCk7Ci0gICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4
aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBz
aW1wbHkKICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxv
dyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlm
dCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFs
dWUgZW5kcwogICAgIC8vIHVwIGJlaW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJp
YmxlOyBpdCBwcm9iYWJseSB0YWtlcyB1cCB+MTAwIGN5Y2xlcwogICAgIC8vIHRvdGFsIG9uIGEg
MzItYml0IHByb2Nlc3Nvci4KLSAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7
Ci0gICAgd2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpIDw9
IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkKLSAgICAgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKLSAgICAKLSAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPiAwKTsKLSAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKLSAgICAKLSAgICBT
RVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOwotICAgIFNFVChmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCk7CisgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSA9IDA7CisgICAg
d2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCgpKSA8PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSArIDEpKSA8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
CisgICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkrKzsKKworICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXAoKSkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkgPiAwKTsKKyAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpIDw9IHN0YXRpY19jYXN0
PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7Cit9CisKKy8v
IFBhcnNlcyBhIHNpbmdsZSBjb21tYW5kIGxpbmUgb3B0aW9uIGluIHRoZSBmb3JtYXQgIjxvcHRp
b25OYW1lPj08dmFsdWU+IgorLy8gKG5vIHNwYWNlcyBhbGxvd2VkKSBhbmQgc2V0IHRoZSBzcGVj
aWZpZWQgb3B0aW9uIGlmIGFwcHJvcHJpYXRlLgorYm9vbCBPcHRpb25zOjpzZXRPcHRpb24oY29u
c3QgY2hhciogYXJnKQoreworICAgIC8vIGFyZyBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisgICAg
Ly8gICA8anNjT3B0aW9uTmFtZT49PGFwcHJvcHJpYXRlIHZhbHVlPgorICAgIGNvbnN0IGNoYXIq
IGVxdWFsU3RyID0gc3RyY2hyKGFyZywgJz0nKTsKKyAgICBpZiAoIWVxdWFsU3RyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVN0ciA9IGVxdWFsU3RyICsg
MTsKKworICAgIC8vIEZvciBlYWNoIG9wdGlvbiwgY2hlY2sgaWYgdGhlIHNwZWNpZnkgYXJnIGlz
IGEgbWF0Y2guIElmIHNvLCBzZXQgdGhlIGFyZworICAgIC8vIGlmIHRoZSB2YWx1ZSBtYWtlcyBz
ZW5zZS4gT3RoZXJ3aXNlLCBtb3ZlIG9uIHRvIGNoZWNraW5nIHRoZSBuZXh0IG9wdGlvbi4KKyNk
ZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgICAgXAor
ICAgIGlmICghc3RybmNtcChhcmcsICNuYW1lXywgZXF1YWxTdHIgLSBhcmcpKSB7ICAgICAgICBc
CisgICAgICAgIHR5cGVfIHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2UodmFsdWVTdHIsIHZhbHVlKTsgICAgICAg
ICAgXAorICAgICAgICBpZiAoc3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBuYW1lXygpID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04p
CisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBv
cHRpb24gbWF0Y2hlZC4KIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlvbnMKK3ZvaWQg
T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoRklMRSogc3RyZWFtKQoreworICAgIGZwcmludGYoc3Ry
ZWFtLCAiSlNDIHJ1bnRpbWUgb3B0aW9uczpcbiIpOworICAgIGZvciAoT3B0aW9uSUQgaWQgPSBz
dGF0aWNfY2FzdDxPcHRpb25JRD4oMCk7IGlkIDwgbnVtYmVyT2ZPcHRpb25zOyBpZCsrKQorICAg
ICAgICBkdW1wT3B0aW9uKGlkLCBzdHJlYW0sICIgICAiLCAiXG4iKTsKK30KKwordm9pZCBPcHRp
b25zOjpkdW1wT3B0aW9uKE9wdGlvbklEIGlkLCBGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGhl
YWRlciwgY29uc3QgY2hhciogZm9vdGVyKQoreworICAgIGlmIChpZCA+PSBudW1iZXJPZk9wdGlv
bnMpCisgICAgICAgIHJldHVybjsgLy8gSWxsZWdhbCBvcHRpb24uCisKKyAgICBmcHJpbnRmKHN0
cmVhbSwgIiVzJXM6ICIsIGhlYWRlciwgc19vcHRpb25zSW5mb1tpZF0ubmFtZSk7CisgICAgc3dp
dGNoIChzX29wdGlvbnNJbmZvW2lkXS50eXBlKSB7CisgICAgY2FzZSBUWVBFX2Jvb2w6CisgICAg
ICAgIGZwcmludGYoc3RyZWFtLCAiJXMiLCBzX29wdGlvbnNbaWRdLnUuYm9vbFZhbD8idHJ1ZSI6
ImZhbHNlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlQRV91bnNpZ25lZDoKKyAgICAg
ICAgZnByaW50ZihzdHJlYW0sICIldSIsIHNfb3B0aW9uc1tpZF0udS51bnNpZ25lZFZhbCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVFlQRV9kb3VibGU6CisgICAgICAgIGZwcmludGYoc3Ry
ZWFtLCAiJWxmIiwgc19vcHRpb25zW2lkXS51LmRvdWJsZVZhbCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVFlQRV9pbnQzMl90OgorICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVkIiwgc19v
cHRpb25zW2lkXS51LmludDMyX3RWYWwpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZnBy
aW50ZihzdHJlYW0sICIlcyIsIGZvb3Rlcik7Cit9CiAKK30gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxMjE3
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDY1ICsyNywxNjEgQEAKICNkZWZpbmUgT3B0aW9uc19oCiAKICNpbmNsdWRl
IDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIE9wdGlvbnMgeworbmFtZXNwYWNlIEpTQyB7CiAKLWV4dGVybiBib29sIHVzZUpJVDsKKy8v
IEhvdyBKU0MgVk0gb3B0aW9ucyB3b3JrPworLy8gPT09PT09PT09PT09PT09PT09PT09PT09Cisv
LyBUaGUgSlNDX09QVElPTlMoKSBtYWNybyBiZWxvdyBkZWZpbmVzIGEgbGlzdCBvZiBhbGwgSlND
IG9wdGlvbnMgaW4gdXNlLAorLy8gYWxvbmcgd2l0aCB0aGVpciB0eXBlcyBhbmQgZGVmYXVsdCB2
YWx1ZXMuIFRoZSBvcHRpb25zIHZhbHVlcyBhcmUgYWN0dWFsbHkKKy8vIHJlYWxpemVkIGFzIGFu
IGFycmF5IG9mIE9wdGlvbnM6OkVudHJ5IGVsZW1lbnRzLgorLy8KKy8vICAgICBPcHRpb25zOjpp
bml0aWFsaXplKCkgd2lsbCBpbml0aWFsaXplIHRoZSBhcnJheSBvZiBvcHRpb25zIHZhbHVlcyB3
aXRoCisvLyB0aGUgZGVmYXVsdHMgc3BlY2lmaWVkIGluIEpTQ19PUFRJT05TKCkgYmVsb3cuIEFm
dGVyIHRoYXQsIHRoZSB2YWx1ZXMgY2FuCisvLyBiZSBwcm9ncmFtbWF0aWNhbGx5IHJlYWQgYW5k
IHdyaXR0ZW4gdG8gdXNpbmcgYW4gYWNjZXNzb3IgbWV0aG9kIHdpdGggdGhlCisvLyBzYW1lIG5h
bWUgYXMgdGhlIG9wdGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBvcHRpb24gInVzZUpJVCIgY2FuIGJl
IHJlYWQgYW5kCisvLyBzZXQgbGlrZSBzbzoKKy8vCisvLyAgICAgYm9vbCBqaXRJc09uID0gT3B0
aW9uczo6dXNlSklUKCk7ICAvLyBHZXQgdGhlIG9wdGlvbiB2YWx1ZS4KKy8vICAgICBPcHRpb25z
Ojp1c2VKSVQoKSA9IGZhbHNlOyAgICAgICAgIC8vIFNldHMgdGhlIG9wdGlvbiB2YWx1ZS4KKy8v
CisvLyAgICAgSWYgeW91IHdhbnQgdG8gdHdlYWsgYW55IG9mIHRoZXNlIHZhbHVlcyBwcm9ncmFt
bWF0aWNhbGx5IGZvciB0ZXN0aW5nCisvLyBwdXJwb3NlcywgeW91IGNhbiBkbyBzbyBpbiBPcHRp
b25zOjppbml0aWFsaXplKCkgYWZ0ZXIgdGhlIGRlZmF1bHQgdmFsdWVzCisvLyBhcmUgc2V0Lgor
Ly8KKy8vICAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGVuYWJsZSBSVU5fVElNRV9IRVVSSVNU
SUNTIHdoaWNoIHdpbGwgYWxsb3cgeW91CisvLyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1
ZXMgYnkgc3BlY2lmeWluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhlCisvLyBmb3JtOiBK
U0NfPG5hbWUgb2YgSlNDIG9wdGlvbj4uCisvLworLy8gTm90ZTogT3B0aW9uczo6aW5pdGlhbGl6
ZSgpIHRyaWVzIHRvIGVuc3VyZSBzb21lIHNhbml0eSBvbiB0aGUgb3B0aW9uIHZhbHVlcworLy8g
d2hpY2ggYXJlIHNldCBieSBkb2luZyBzb21lIHJhbmdlIGNoZWNrcywgYW5kIHZhbHVlIGNvcnJl
Y3Rpb25zLiBUaGVzZQorLy8gY2hlY2tzIGFyZSBkb25lIGFmdGVyIHRoZSBvcHRpb24gdmFsdWVz
IGFyZSBzZXQuIElmIHlvdSBhbHRlciB0aGUgb3B0aW9uCisvLyB2YWx1ZXMgYWZ0ZXIgdGhlIHNh
bml0eSBjaGVja3MgKGZvciB5b3VyIG93biB0ZXN0aW5nKSwgdGhlbiB5b3UncmUgbGlhYmxlIHRv
CisvLyBlbnN1cmUgdGhhdCB0aGUgbmV3IHZhbHVlcyBzZXQgYXJlIHNhbmUgYW5kIHJlYXNvbmFi
bGUgZm9yIHlvdXIgb3duIHJ1bi4KKworCisjZGVmaW5lIEpTQ19PUFRJT05TKHYpIFwKKyAgICB2
KGJvb2wsIHVzZUpJVCwgICAgdHJ1ZSkgXAorICAgIHYoYm9vbCwgdXNlREZHSklULCB0cnVlKSBc
CisgICAgXAorICAgIC8qIHNob3dEaXNhc3NlbWJseSBpbXBsaWVzIHNob3dERkdEaXNhc3NlbWJs
eS4gKi8gXAorICAgIHYoYm9vbCwgc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSkgXAorICAgIHYoYm9v
bCwgc2hvd0RGR0Rpc2Fzc2VtYmx5LCBmYWxzZSkgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCBt
YXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApIFwKKyAg
ICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQsIDE4MCkgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1GdW5jdGlv
bkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCkgXAorICAg
IFwKKyAgICAvKiBEZXB0aCBvZiBpbmxpbmUgc3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9
IG9uZSBsZXZlbCwgZXRjLiAqLyBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bUlubGluaW5nRGVw
dGgsIDUpIFwKKyAgICBcCisgICAgdihpbnQzMl90LCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1V
cCwgMTAwKSBcCisgICAgdihpbnQzMl90LCB0aHJlc2hvbGRGb3JKSVRTb29uLCAxMDApIFwKKyAg
ICBcCisgICAgdihpbnQzMl90LCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAxMDAw
KSBcCisgICAgdihpbnQzMl90LCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwg
NTAwMCkgXAorICAgIHYoaW50MzJfdCwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAxMDAwKSBc
CisgICAgXAorICAgIHYoaW50MzJfdCwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3As
IDEpIFwKKyAgICB2KGludDMyX3QsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4s
IDE1KSBcCisgICAgXAorICAgIHYoYm9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2Vl
bkNoZWNrcG9pbnRzLCBmYWxzZSkgXAorICAgIHYoaW50MzJfdCwgbWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCkgXAorICAgIFwKKyAgICB2KGRvdWJsZSwgbGlr
ZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMTUpIFwKKyAgICB2KGRvdWJsZSwgY291bGRU
YWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMDUpIFwKKyAgICB2KHVuc2lnbmVkLCBsaWtlbHlUb1Rh
a2VTbG93Q2FzZU1pbmltdW1Db3VudCwgMTAwKSBcCisgICAgdih1bnNpZ25lZCwgY291bGRUYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwKSBcCisgICAgXAorICAgIHYoZG91YmxlLCBvc3JFeGl0
UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUsIDAuMykgXAorICAgIHYodW5zaWduZWQsIG9z
ckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uLCAxMDApIFwKKyAgICB2KHVuc2lnbmVkLCBvc3JF
eGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wLCA1KSBcCisgICAgXAorICAgIHYodW5z
aWduZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4LCAwKSAgXAorICAgIHYodW5zaWdu
ZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3RlcCwgMSkgXAorICAgIFwKKyAgICB2KHVu
c2lnbmVkLCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXksIDEpIFwKKyAgICB2KHVuc2lnbmVkLCBt
YXhpbXVtT3B0aW1pemF0aW9uRGVsYXksIDUpIFwKKyAgICB2KGRvdWJsZSwgZGVzaXJlZFByb2Zp
bGVMaXZlbmVzc1JhdGUsIDAuNzUpIFwKKyAgICB2KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVGdWxs
bmVzc1JhdGUsIDAuMzUpIFwKKyAgICBcCisgICAgdihkb3VibGUsIGRvdWJsZVZvdGVSYXRpb0Zv
ckRvdWJsZUZvcm1hdCwgMikgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtaW5pbXVtTnVtYmVy
T2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEwMCkgXAorICAgIHYodW5zaWduZWQsIGdjTWFya1N0
YWNrU2VnbWVudFNpemUsIHBhZ2VTaXplKCkpIFwKKyAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkdD
TWFya2VycywgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDcpKSBcCisgICAgdih1bnNpZ25lZCwg
b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAxMDAwKSBcCisgICAgXAorICAgIHYoYm9vbCwgZm9y
Y2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKKyAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFu
ZG9tU2VlZCwgMCkKKworCitjbGFzcyBPcHRpb25zIHsKK3B1YmxpYzoKKyAgICAvLyBEZWNsYXJl
IHRoZSBvcHRpb24gSURzOgorICAgIGVudW0gT3B0aW9uSUQgeworI2RlZmluZSBGT1JfRUFDSF9P
UFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSBcCisgICAgICAgIE9QVF8jI25hbWVf
LAorICAgICAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hf
T1BUSU9OCisgICAgICAgIG51bWJlck9mT3B0aW9ucworICAgIH07CisKKworICAgIHN0YXRpYyB2
b2lkIGluaXRpYWxpemUoKTsKKworICAgIC8vIFBhcnNlcyBhIHNpbmdsZSBjb21tYW5kIGxpbmUg
b3B0aW9uIGluIHRoZSBmb3JtYXQgIjxvcHRpb25OYW1lPj08dmFsdWU+IgorICAgIC8vIChubyBz
cGFjZXMgYWxsb3dlZCkgYW5kIHNldCB0aGUgc3BlY2lmaWVkIG9wdGlvbiBpZiBhcHByb3ByaWF0
ZS4KKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBzZXRPcHRpb24oY29uc3QgY2hh
ciogYXJnKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkdW1wQWxsT3B0aW9u
cyhGSUxFKiBzdHJlYW0gPSBzdGRvdXQpOworICAgIHN0YXRpYyB2b2lkIGR1bXBPcHRpb24oT3B0
aW9uSUQgaWQsIEZJTEUqIHN0cmVhbSA9IHN0ZG91dCwgY29uc3QgY2hhciogaGVhZGVyID0gIiIs
IGNvbnN0IGNoYXIqIGZvb3RlciA9ICIiKTsKKworICAgIC8vIERlY2xhcmUgYWNjZXNzb3JzIGZv
ciBlYWNoIG9wdGlvbjoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVm
YXVsdFZhbHVlXykgXAorICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHR5cGVfJiBuYW1lXygpIHsg
cmV0dXJuIHNfb3B0aW9uc1tPUFRfIyNuYW1lX10udS50eXBlXyMjVmFsOyB9CisKKyAgICBKU0Nf
T1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKK3ByaXZh
dGU6CisgICAgZW51bSBFbnRyeVR5cGUgeworICAgICAgICBUWVBFX2Jvb2wsCisgICAgICAgIFRZ
UEVfdW5zaWduZWQsCisgICAgICAgIFRZUEVfZG91YmxlLAorICAgICAgICBUWVBFX2ludDMyX3QK
KyAgICB9OworCisgICAgLy8gRm9yIHN0b3JpbmcgZm9yIGFuIG9wdGlvbiB2YWx1ZToKKyAgICBz
dHJ1Y3QgRW50cnkgeworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBib29sIGJvb2xWYWw7
CisgICAgICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbDsKKyAgICAgICAgICAgIGRvdWJsZSBk
b3VibGVWYWw7CisgICAgICAgICAgICBpbnQzMl90IGludDMyX3RWYWw7CisgICAgICAgIH0gdTsK
KyAgICB9OworCisgICAgLy8gRm9yIHN0b3JpbmcgY29uc3RhbnQgbWV0YSBkYXRhIGFib3V0IGVh
Y2ggb3B0aW9uOgorICAgIHN0cnVjdCBFbnRyeUluZm8geworICAgICAgICBjb25zdCBjaGFyKiBu
YW1lOworICAgICAgICBFbnRyeVR5cGUgdHlwZTsKKyAgICB9OworCisgICAgT3B0aW9ucygpOwor
CisgICAgLy8gRGVjbGFyZSB0aGUgb3B0aW9uczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5
cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIHR5cGVfIG1fIyNuYW1lXzsKKyAgICBK
U0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAg
ICAvLyBEZWNsYXJlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG9wdGlvbnMgc3RvcmU6
CisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgRW50cnkgc19vcHRpb25zW251bWJlck9mT3B0aW9u
c107CisgICAgc3RhdGljIGNvbnN0IEVudHJ5SW5mbyBzX29wdGlvbnNJbmZvW251bWJlck9mT3B0
aW9uc107Cit9OwogCi1leHRlcm4gYm9vbCBzaG93RGlzYXNzZW1ibHk7Ci1leHRlcm4gYm9vbCBz
aG93REZHRGlzYXNzZW1ibHk7IC8vIHNob3dEaXNhc3NlbWJseSBpbXBsaWVzIHNob3dERkdEaXNh
c3NlbWJseS4KLQotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OwotCi1leHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2Fs
bElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQot
ZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOyAvLyBEZXB0aCBvZiBpbmxpbmUg
c3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9IG9uZSBsZXZlbCwgZXRjLgotCi1leHRlcm4g
aW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVz
aG9sZEZvckpJVFNvb247Ci0KLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKLWV4dGVybiBp
bnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEludm9jYXRpb247Ci0KLWV4dGVybiBpbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwotZXh0ZXJuIGludDMyX3QgZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKLQotZXh0ZXJuIGJvb2wgcmFuZG9taXpl
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOwotZXh0ZXJuIGludDMyX3QgbWF4aW11
bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKLQotZXh0ZXJuIGRvdWJsZSBsaWtl
bHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKLWV4dGVybiBkb3VibGUgY291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQ7Ci1leHRlcm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQ7Ci1leHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0K
LWV4dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlOwotZXh0
ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uOwotZXh0ZXJuIHVuc2ln
bmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3A7Ci0KLWV4dGVybiB1bnNp
Z25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKLWV4dGVybiB1bnNpZ25lZCByZW9w
dGltaXphdGlvblJldHJ5Q291bnRlclN0ZXA7Ci0KLWV4dGVybiB1bnNpZ25lZCBtaW5pbXVtT3B0
aW1pemF0aW9uRGVsYXk7Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5
OwotZXh0ZXJuIGRvdWJsZSBkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZTsKLWV4dGVybiBkb3Vi
bGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0KLWV4dGVybiBkb3VibGUgZG91YmxlVm90
ZVJhdGlvRm9yRG91YmxlRm9ybWF0OwotCi1leHRlcm4gdW5zaWduZWQgbWluaW11bU51bWJlck9m
U2NhbnNCZXR3ZWVuUmViYWxhbmNlOwotZXh0ZXJuIHVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVu
dFNpemU7Ci1KU19FWFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsK
LUpTX0VYUE9SVERBVEEgZXh0ZXJuIHVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsK
LQotZXh0ZXJuIGJvb2wgZm9yY2VXZWFrUmFuZG9tU2VlZDsKLWV4dGVybiB1bnNpZ25lZCBmb3Jj
ZWRXZWFrUmFuZG9tU2VlZDsKLQotdm9pZCBpbml0aWFsaXplT3B0aW9ucygpOwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6T3B0aW9ucworfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBP
cHRpb25zX2gKLQo=
</data>
<flag name="commit-queue"
          id="158772"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150518</attachid>
            <date>2012-07-02 19:21:43 -0700</date>
            <delta_ts>2012-07-02 20:41:01 -0700</delta_ts>
            <desc>Rev 1: fixed OptionID operator++ complaint.</desc>
            <filename>bug-90420-rev1.patch</filename>
            <type>text/plain</type>
            <size>49083</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTY2Miw2ICs2NjcsMjUgQEAg
c3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYQogICAgICAgICB9CiAgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi1oIikgfHwgIXN0cmNtcChhcmcsICItLWhlbHAiKSkKICAg
ICAgICAgICAgIHByaW50VXNhZ2VTdGF0ZW1lbnQodHJ1ZSk7CisKKyAgICAgICAgaWYgKCFzdHJj
bXAoYXJnLCAiLS1vcHRpb25zIikpIHsKKyAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFs
bE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLWR1bXBPcHRpb25zIikpIHsKKyAgICAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VlIGlmIHRoZSAtLSBvcHRpb24g
aXMgYSBKU0MgVk0gb3B0aW9uLgorICAgICAgICAvLyBOT1RFOiBBdCB0aGlzIHBvaW50LCB3ZSBr
bm93IHRoYXQgdGhlIGFyZyBzdGFydHMgd2l0aCAiLS0iLiBTa2lwIGl0LgorICAgICAgICBpZiAo
SlNDOjpPcHRpb25zOjpzZXRPcHRpb24oJmFyZ1syXSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBh
cmcgd2FzIHJlY29nbml6ZWQgYXMgYSBWTSBvcHRpb24gYW5kIGhhcyBiZWVuIHBhcnNlZC4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBKdXN0IGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYXJnLiAK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgYXJnIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRo
ZSBWTSBub3IgYnkganNjLiBQYXNzIGl0IG9uIHRvIHRoZQorICAgICAgICAvLyBzY3JpcHQuCiAg
ICAgICAgIG9wdGlvbnMuc2NyaXB0cy5hcHBlbmQoU2NyaXB0KHRydWUsIGFyZ3ZbaV0pKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBMaW5r
QnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplCiAKIExpbmtCdWZmZXI6OkNvZGVS
ZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKQogewotICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0
aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KTsKKyAgICBBU1NFUlQoT3B0aW9uczo6c2hvd0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpOwogICAgIAogICAgIENv
ZGVSZWYgcmVzdWx0ID0gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBwcml2YXRlOgogLy8gaXMg
dHJ1ZSwgc28geW91IGNhbiBoaWRlIGV4cGVuc2l2ZSBkaXNhc3NlbWJseS1vbmx5IGNvbXB1dGF0
aW9ucyBpbnNpZGUgdGhlcmUuCiAKICNkZWZpbmUgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyUmVm
ZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGluZykgIFwKLSAgICBGSU5BTElaRV9DT0RF
X0lGKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxv
Z0FyZ3VtZW50c0ZvckhlYWRpbmcpCisgICAgRklOQUxJWkVfQ09ERV9JRihPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxvZ0FyZ3VtZW50c0Zvckhl
YWRpbmcpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3NzEsNyArMjc3MSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAg
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKKyAgICBp
ZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXph
dGlvbkRlbGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHVuc2lnbmVkIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKQEAgLTI3ODIsOSArMjc4Miw5IEBA
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAgZGF0YUxvZygiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoIW51bWJlck9mVmFsdWVQcm9m
aWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVz
c1JhdGUpCi0gICAgICAgICYmICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91
YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFBy
b2ZpbGVGdWxsbmVzc1JhdGUpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1pbmltdW1PcHRpbWl6YXRp
b25EZWxheSkKKyAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCisgICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKKyAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEyMTcxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYg
KCFudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50ICYmIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9u
czo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02
NzksNyArNjc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9m
UmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0g
T3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6
Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2Fz
ZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNjk5
LDcgKzY5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKCFudW1iZXJPZlJh
cmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAg
ICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHNwZWNpYWxGYXN0Q2Fz
ZUNvdW50KSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291bnQpIC8gbV9leGVjdXRpb25FbnRyeUNv
dW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKGlu
dCBieXRlY29kZU9mZnNldCkKQEAgLTcwOSw3ICs3MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2ln
bmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWdu
ZWQgdmFsdWUgPSBzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291
bnQgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKQEAgLTcxOSw3ICs3MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNw
ZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSBzbG93Q2FzZUNvdW50ICsgc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQg
JiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0g
T3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1
cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAm
JiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBP
cHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBleGVjdXRpb25FbnRyeUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9leGVjdXRpb25FbnRyeUNvdW50OyB9CkBAIC05NDEsMTIgKzk0MSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCB0aGlzKTsKKyAgICAgICAgICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgaml0U29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7Cisg
ICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckpJVFNvb24oKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNvbnN0IEV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdApA
QCAtOTc3LDI1ICs5NzcsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRvIGF2b2lk
IHRocmFzaGluZy4KICAgICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKTsKICAgICAgICAgICAgIHJldHVybiBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Ci0gICAgICAgICAgICBpZiAobV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4
KQotICAgICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXJNYXgoKSkKKyAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0g
T3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJXYXJtVXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkg
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6
ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAg
ICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQpAQCAtMTA3NSw3
ICsxMDc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBj
b2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9wdGltaXplU29vbiA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKKyAg
ICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplU29vbigpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCks
IHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBvc3JFeGl0Q291
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KQEAgLTExMDQsMTIgKzEx
MDQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRG
b3JSZW9wdGltaXphdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRU
aHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uRnJvbUxvb3AoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6
YXRpb25Gcm9tTG9vcCk7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJl
c2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUIHRocmVzaG9sZCkKICAgICB7CiAgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFu
ZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50czsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpKQorICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJl
c2hvbGQgPSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
OworICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhy
ZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcz
LDcgKzEyNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAg
ICAgdW5zaWduZWQgZGVwdGggPSAwOwogICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkg
PSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKICAg
ICAgICAgKytkZXB0aDsKLSAgICAgICAgaWYgKGRlcHRoID49IE9wdGlvbnM6Om1heGltdW1Jbmxp
bmluZ0RlcHRoKQorICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5n
RGVwdGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGVwdGggZXhjZWVkZWQuCiAg
ICAgICAgIAogICAgICAgICBpZiAoZW50cnktPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZp
c2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyOSArNDEsMjkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogLy8gY2hlY2sgb3Bjb2Rlcy4KIGlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0
aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudCgpOwogfQogCiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNv
bnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTIxNzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDcgKzEzNiw3IEBAIGVudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEZpeHBvaW4K
IAogaW5saW5lIGJvb2wgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsKLSAgICByZXR1cm4gT3B0
aW9uczo6c2hvd0Rpc2Fzc2VtYmx5IHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseTsKKyAg
ICByZXR1cm4gT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rp
c2Fzc2VtYmx5KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC02MCw3ICs2MSwxMCBAQCBpbmxpbmUgYm9vbCBjb21w
aWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAK
KworICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJERkcgY29tcGls
aW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBPU1JFeGl0OjpkdW1w
KEZJTEUqIG91dCkgY29uc3QKIAogYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCiB7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBk
ZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVu
Y2VGb3JGcmVxdWVudEV4aXRTaXRlKQorICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291
bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQ
cm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTIx
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiB2b3RlZCB0byBiZWNvbWUgYSBkb3Vi
bGUsIHRoZW4gbWFrZSBpdCBhCiAgICAgICAgIC8vIGRvdWJsZS4KLSAgICAgICAgaWYgKGRvdWJs
ZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdCkK
KyAgICAgICAgaWYgKGRvdWJsZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRp
b0ZvckRvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgTWFya1N0
YWNrU2VnbWVudCogTWFya1N0YWNrU2VnbWVudEFsbG9jYQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZUFuZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFu
ZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpKTsKIH0KIAogdm9pZCBN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpyZWxlYXNlKE1hcmtTdGFja1NlZ21lbnQqIHNlZ21l
bnQpCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpz
aHJpbmtSZQogICAgIHdoaWxlIChzZWdtZW50cykgewogICAgICAgICBNYXJrU3RhY2tTZWdtZW50
KiB0b0ZyZWUgPSBzZWdtZW50czsKICAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy0+bV9wcmV2
aW91czsKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh0b0ZyZWUsIE9w
dGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVj
b21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSgp
KTsKICAgICB9CiB9CiAKIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheShNYXJrU3RhY2tT
ZWdtZW50QWxsb2NhdG9yJiBhbGxvY2F0b3IpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3Ip
Ci0gICAgLCBtX3NlZ21lbnRDYXBhY2l0eShNYXJrU3RhY2tTZWdtZW50OjpjYXBhY2l0eUZyb21T
aXplKE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpKQorICAgICwgbV9zZWdtZW50Q2Fw
YWNpdHkoTWFya1N0YWNrU2VnbWVudDo6Y2FwYWNpdHlGcm9tU2l6ZShPcHRpb25zOjpnY01hcmtT
dGFja1NlZ21lbnRTaXplKCkpKQogICAgICwgbV90b3AoMCkKICAgICAsIG1fbnVtYmVyT2ZQcmV2
aW91c1NlZ21lbnRzKDApCiB7CkBAIC0yNjIsNyArMjYyLDcgQEAgTWFya1N0YWNrVGhyZWFkU2hh
cmVkRGF0YTo6TWFya1N0YWNrVGhyZQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
KGZhbHNlKQogewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnM7ICsraSkgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKICAg
ICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yID0gbmV3IFNsb3RWaXNpdG9yKCp0aGlzKTsK
ICAgICAgICAgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5hcHBlbmQoc2xvdFZpc2l0b3IpOwog
ICAgICAgICBtX21hcmtpbmdUaHJlYWRzLmFwcGVuZChjcmVhdGVUaHJlYWQobWFya2luZ1RocmVh
ZFN0YXJ0RnVuYywgc2xvdFZpc2l0b3IsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
ICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29u
LCBhbmQgZG9uYXRlLgogICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQubV9z
aGFyZWRNYXJrU3RhY2spOwogCi0gICAgaWYgKG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycykKKyAgICBpZiAobV9zaGFy
ZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkpCiAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3Qo
KTsKIH0KIApAQCAtMzc3LDEwICszNzcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQog
ICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgCiAjaWYgRU5BQkxFKFBBUkFMTEVM
X0dDKQotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDEpIHsKKyAgICBpZiAo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDEpIHsKICAgICAgICAgd2hpbGUgKCFtX3N0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlOyBtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24t
LTspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmlt
dW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbigqdGhpcywg
bV9zdGFjay5yZW1vdmVMYXN0KCkpOwogICAgICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgp
OwogICAgICAgICB9CkBAIC00MDEsMTQgKzQwMSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFp
bkZyb21TaGFyZWQoU2hhcmVkCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAg
ICAgCi0gICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKTsKKyAgICBBU1NFUlQo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZVBh
cmFsbGVsOwogCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHNob3VsZEJlUGFyYWxsZWwg
PSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDE7CisgICAgc2hvdWxkQmVQYXJhbGxlbCA9
IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAxOwogI2Vsc2UKLSAgICBBU1NFUlQoT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMgPT0gMSk7CisgICAgQVNTRVJUKE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCkgPT0gMSk7CiAgICAgc2hvdWxkQmVQYXJhbGxlbCA9IGZhbHNlOwogI2Vu
ZGlmCiAgICAgCkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwor
ICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwogICAg
ICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2ssIGlkbGVUaHJlYWRDb3VudCk7CiAgICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcgKzMwNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVy
Z2VUaHJlc2hvbGQpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3Bh
cXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsK
ICAgICAgICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGlu
ZSB2b2lkIE1hcmtTdGFjazo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQogICAgIHsKICNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vy
cyA9PSAxKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEp
IHsKICAgICAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4K
ICAgICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRvbmF0ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09IDEpCisgICAgICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sg
PyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCA6IE9wdGlvbnM6OmV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRp
bWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrID8gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKICAgICBpZiAo
a2luZCA9PSBFbnRlck9wdGltaXphdGlvbkNoZWNrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9u
IDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpp
bml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgT3B0aW9u
czo6aW5pdGlhbGl6ZU9wdGlvbnMoKTsKKyAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJz
Ojppbml0aWFsaXplKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBleHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBF
TkFCTEUoTExJTlQpKQogc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxv
Y2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCiB7Ci0gICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9uczo6dXNlSklUKQorICAgIGlmICghZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkKCkgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2
b2lkCiBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUq
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQogICAgICwgbV9nbG9iYWxT
Y29wZUNoYWluKCkKLSAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21T
ZWVkID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQgOiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
ICsgMS4wKSkpCisgICAgLCBtX3dlYWtSYW5kb20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2Vl
ZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgKyAxLjApKSkKICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2NyArMzcsMTMgQEAKIC8vIFNldCB0byAxIHRvIGNvbnRyb2wgdGhlIGhldXJpc3RpY3Mg
dXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgogI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVV
UklTVElDUyAwCiAKLSNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKICNpbmNsdWRlIDxz
dGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIE9wdGlvbnMgewotCi1ib29sIHVzZUpJVDsKLQotYm9vbCBzaG93RGlzYXNzZW1ibHk7Ci1i
b29sIHNob3dERkdEaXNhc3NlbWJseTsKLQotdW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci0KLXVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotdW5zaWduZWQgbWF4aW11bUZ1bmN0
aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQotdW5zaWdu
ZWQgbWF4aW11bUlubGluaW5nRGVwdGg7Ci0KLWludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0KLWludDMyX3QgdGhyZXNob2xk
Rm9yT3B0aW1pemVBZnRlcldhcm1VcDsKLWludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKLQotaW50MzJf
dCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWludDMyX3QgZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvclJldHVybjsKIAotYm9vbCByYW5kb21pemVFeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHM7Ci1pbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHM7CituYW1lc3BhY2UgSlNDIHsKIAotZG91YmxlIGxpa2VseVRvVGFrZVNsb3dD
YXNlVGhyZXNob2xkOwotZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwotdW5zaWdu
ZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci11bnNpZ25lZCBjb3VsZFRha2VT
bG93Q2FzZU1pbmltdW1Db3VudDsKLQotZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVl
bnRFeGl0U2l0ZTsKLXVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uOwotdW5z
aWduZWQgb3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcDsKLQotdW5zaWduZWQg
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXg7Ci11bnNpZ25lZCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlclN0ZXA7Ci0KLXVuc2lnbmVkIG1pbmltdW1PcHRpbWl6YXRpb25EZWxheTsKLXVu
c2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25EZWxheTsKLWRvdWJsZSBkZXNpcmVkUHJvZmlsZUxp
dmVuZXNzUmF0ZTsKLWRvdWJsZSBkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZTsKLQotZG91Ymxl
IGRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdDsKLQotdW5zaWduZWQgbWluaW11bU51bWJl
ck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlOwotdW5zaWduZWQgZ2NNYXJrU3RhY2tTZWdtZW50U2l6
ZTsKLXVuc2lnbmVkIG51bWJlck9mR0NNYXJrZXJzOwotdW5zaWduZWQgb3BhcXVlUm9vdE1lcmdl
VGhyZXNob2xkOwotCi1ib29sIGZvcmNlV2Vha1JhbmRvbVNlZWQ7Ci11bnNpZ25lZCBmb3JjZWRX
ZWFrUmFuZG9tU2VlZDsKLQotI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNTKQogc3RhdGlj
IGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBib29sJiB2YWx1ZSkKIHsKICAgICBpZiAo
IXN0cmNhc2VjbXAoc3RyaW5nLCAidHJ1ZSIpIHx8ICFzdHJjYXNlY21wKHN0cmluZywgInllcyIp
IHx8ICFzdHJjbXAoc3RyaW5nLCAiMSIpKSB7CkBAIC0xMjYsMjcgKzcyLDIyIEBAIHN0YXRpYyBi
b29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgZG8KICAgICByZXR1cm4gc3NjYW5mKHN0cmlu
ZywgIiVsZiIsICZ2YWx1ZSkgPT0gMTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4KLXZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lLCBV
IHZhbHVlKQorI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNTKQordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3ZvaWQgb3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25z
dCBjaGFyKiBuYW1lKQogewogICAgIGNvbnN0IGNoYXIqIHN0cmluZ1ZhbHVlID0gZ2V0ZW52KG5h
bWUpOwotICAgIGlmICghc3RyaW5nVmFsdWUpIHsKLSAgICAgICAgdmFyaWFibGUgPSBzYWZlQ2Fz
dDxUPih2YWx1ZSk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KICAgICAKICAgICBpZiAocGFyc2Uoc3RyaW5nVmFsdWUsIHZhcmlhYmxlKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIGZwcmludGYoc3RkZXJyLCAiV0FSTklORzogZmFpbGVkIHRvIHBh
cnNlICVzPSVzXG4iLCBuYW1lLCBzdHJpbmdWYWx1ZSk7Ci0gICAgdmFyaWFibGUgPSBzYWZlQ2Fz
dDxUPih2YWx1ZSk7CiB9Ci0KLSNkZWZpbmUgU0VUKHZhcmlhYmxlLCB2YWx1ZSkgc2V0SGV1cmlz
dGljKHZhcmlhYmxlLCAiSlNDXyIgI3ZhcmlhYmxlLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIFNF
VCh2YXJpYWJsZSwgdmFsdWUpIHZhcmlhYmxlID0gdmFsdWUKICNlbmRpZgogCisKIHN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoaW50IG1heE51bWJlck9mR0NNYXJrZXJz
KQogewogICAgIGludCBjcHVzVG9Vc2UgPSAxOwpAQCAtMTYzLDc2ICsxMDQsMTE0IEBAIHN0YXRp
YyB1bnNpZ25lZCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMKICAgICByZXR1cm4gY3B1c1RvVXNl
OwogfQogCi12b2lkIGluaXRpYWxpemVPcHRpb25zKCkKLXsKLSAgICBTRVQodXNlSklULCB0cnVl
KTsKLSAgICAKLSAgICBTRVQoc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSk7Ci0gICAgU0VUKHNob3dE
RkdEaXNhc3NlbWJseSwgZmFsc2UpOyAvLyBERkcgZGlzYXNzZW1ibHkgaXMgc2hvd24gaWYgc2hv
d0Rpc2Fzc2VtYmx5IHx8IHNob3dERkdEaXNhc3NlbWJseQotICAgIAotICAgIFNFVChtYXhpbXVt
T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwMDApOwotICAgIAotICAg
IFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCwgMTgwKTsKLSAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKLSAgICAKLSAgICBTRVQobWF4aW11bUlubGluaW5n
RGVwdGgsIDUpOwogCi0gICAgU0VUKHRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCAgICAgMTAw
KTsKLSAgICBTRVQodGhyZXNob2xkRm9ySklUU29vbiwgICAgICAgICAgICAxMDApOworT3B0aW9u
czo6RW50cnkgT3B0aW9uczo6c19vcHRpb25zW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc107CiAK
LSAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIDEwMDApOwotICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgNTAwMCk7Ci0gICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgICAgICAgICAgICAxMDAwKTsKLQotICAgIFNFVChl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgICAxKTsKLSAgICBTRVQoZXhlY3V0aW9u
Q291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpOwotICAgIAotICAgIFNFVChyYW5kb21pemVF
eGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlKTsKLSAgICBTRVQobWF4aW11
bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCk7CisvLyBSZWFsaXplIHRo
ZSBuYW1lcyBmb3IgZWFjaCBvZiB0aGUgb3B0aW9uczoKK2NvbnN0IE9wdGlvbnM6OkVudHJ5SW5m
byBPcHRpb25zOjpzX29wdGlvbnNJbmZvW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc10gPSB7Cisj
ZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAg
ICB7ICNuYW1lXywgT3B0aW9uczo6VFlQRV8jI3R5cGVfIH0sCisgICAgSlNDX09QVElPTlMoRk9S
X0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorfTsKKwordm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKK3sKKyAgICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMg
d2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVf
LCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIG5hbWVfKCkgPSBkZWZhdWx0VmFsdWVfOwor
ICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04K
KworICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZhcnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBh
cHBsaWNhYmxlLgorICAgIC8vIFRoZSBldm4gdmFyIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUg
b3B0aW9uIHByZWZpeGVkIHdpdGgKKyAgICAvLyAiSlNDXyIuCisjaWYgRU5BQkxFKFJVTl9USU1F
X0hFVVJJU1RJQ1MpCisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1
bHRWYWx1ZV8pIFwKKyAgICBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMobmFtZV8oKSwgIkpT
Q18iICNuYW1lXyk7CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZP
Ul9FQUNIX09QVElPTgorICAgIAorI2VuZGlmIC8vIFJVTl9USU1FX0hFVVJJU1RJQ1MKKworICAg
IC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8g
dGhlIG9wdGlvbnM6CisgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKKyAgICBBU1NFUlQo
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbigpKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49
IDApOwogCi0gICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAwLjE1KTsK
LSAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91
bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cg
Y2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KLSAgICBTRVQobGlrZWx5
VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50LCAgICAxMCk7Ci0gICAgCi0gICAgU0VUKG9zckV4aXRQcm9taW5lbmNl
Rm9yRnJlcXVlbnRFeGl0U2l0ZSwgIDAuMyk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uLCAgICAgICAgIDEwMCk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1p
emF0aW9uRnJvbUxvb3AsIDUpOwotCi0gICAgU0VUKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
U3RlcCwgMSk7Ci0KLSAgICBTRVQobWluaW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDEpOwotICAg
IFNFVChtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksICAgNSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9m
aWxlTGl2ZW5lc3NSYXRlLCAwLjc1KTsKLSAgICBTRVQoZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1Jh
dGUsIDAuMzUpOwotICAgIAotICAgIFNFVChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQs
IDIpOwotICAgIAotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Us
IDEwMCk7Ci0gICAgU0VUKGdjTWFya1N0YWNrU2VnbWVudFNpemUsICAgICAgICAgICAgICAgcGFn
ZVNpemUoKSk7Ci0gICAgU0VUKG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCwgICAgICAgICAgICAg
MTAwMCk7Ci0gICAgU0VUKG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtl
cnMoNykpOyAvLyBXZSBkb24ndCBzY2FsZSBzbyB3ZWxsIGJleW9uZCA3LgotCi0gICAgQVNTRVJU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwID49IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKHRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAgPj0gMCk7Ci0gICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4
aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBz
aW1wbHkKICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxv
dyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlm
dCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFs
dWUgZW5kcwogICAgIC8vIHVwIGJlaW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJp
YmxlOyBpdCBwcm9iYWJseSB0YWtlcyB1cCB+MTAwIGN5Y2xlcwogICAgIC8vIHRvdGFsIG9uIGEg
MzItYml0IHByb2Nlc3Nvci4KLSAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7
Ci0gICAgd2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpIDw9
IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkKLSAgICAgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKLSAgICAKLSAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPiAwKTsKLSAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKLSAgICAKLSAgICBT
RVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOwotICAgIFNFVChmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCk7CisgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSA9IDA7CisgICAg
d2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCgpKSA8PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSArIDEpKSA8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkp
CisgICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkrKzsKKworICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJt
VXAoKSkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkgPiAwKTsKKyAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpIDw9IHN0YXRpY19jYXN0
PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7Cit9CisKKy8v
IFBhcnNlcyBhIHNpbmdsZSBjb21tYW5kIGxpbmUgb3B0aW9uIGluIHRoZSBmb3JtYXQgIjxvcHRp
b25OYW1lPj08dmFsdWU+IgorLy8gKG5vIHNwYWNlcyBhbGxvd2VkKSBhbmQgc2V0IHRoZSBzcGVj
aWZpZWQgb3B0aW9uIGlmIGFwcHJvcHJpYXRlLgorYm9vbCBPcHRpb25zOjpzZXRPcHRpb24oY29u
c3QgY2hhciogYXJnKQoreworICAgIC8vIGFyZyBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisgICAg
Ly8gICA8anNjT3B0aW9uTmFtZT49PGFwcHJvcHJpYXRlIHZhbHVlPgorICAgIGNvbnN0IGNoYXIq
IGVxdWFsU3RyID0gc3RyY2hyKGFyZywgJz0nKTsKKyAgICBpZiAoIWVxdWFsU3RyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVN0ciA9IGVxdWFsU3RyICsg
MTsKKworICAgIC8vIEZvciBlYWNoIG9wdGlvbiwgY2hlY2sgaWYgdGhlIHNwZWNpZnkgYXJnIGlz
IGEgbWF0Y2guIElmIHNvLCBzZXQgdGhlIGFyZworICAgIC8vIGlmIHRoZSB2YWx1ZSBtYWtlcyBz
ZW5zZS4gT3RoZXJ3aXNlLCBtb3ZlIG9uIHRvIGNoZWNraW5nIHRoZSBuZXh0IG9wdGlvbi4KKyNk
ZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgICAgXAor
ICAgIGlmICghc3RybmNtcChhcmcsICNuYW1lXywgZXF1YWxTdHIgLSBhcmcpKSB7ICAgICAgICBc
CisgICAgICAgIHR5cGVfIHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2UodmFsdWVTdHIsIHZhbHVlKTsgICAgICAg
ICAgXAorICAgICAgICBpZiAoc3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBuYW1lXygpID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04p
CisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBv
cHRpb24gbWF0Y2hlZC4KIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlvbnMKK3ZvaWQg
T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoRklMRSogc3RyZWFtKQoreworICAgIGZwcmludGYoc3Ry
ZWFtLCAiSlNDIHJ1bnRpbWUgb3B0aW9uczpcbiIpOworICAgIGZvciAoaW50IGlkID0gMDsgaWQg
PCBudW1iZXJPZk9wdGlvbnM7IGlkKyspCisgICAgICAgIGR1bXBPcHRpb24oc3RhdGljX2Nhc3Q8
T3B0aW9uSUQ+KGlkKSwgc3RyZWFtLCAiICAgIiwgIlxuIik7Cit9CisKK3ZvaWQgT3B0aW9uczo6
ZHVtcE9wdGlvbihPcHRpb25JRCBpZCwgRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBoZWFkZXIs
IGNvbnN0IGNoYXIqIGZvb3RlcikKK3sKKyAgICBpZiAoaWQgPj0gbnVtYmVyT2ZPcHRpb25zKQor
ICAgICAgICByZXR1cm47IC8vIElsbGVnYWwgb3B0aW9uLgorCisgICAgZnByaW50ZihzdHJlYW0s
ICIlcyVzOiAiLCBoZWFkZXIsIHNfb3B0aW9uc0luZm9baWRdLm5hbWUpOworICAgIHN3aXRjaCAo
c19vcHRpb25zSW5mb1tpZF0udHlwZSkgeworICAgIGNhc2UgVFlQRV9ib29sOgorICAgICAgICBm
cHJpbnRmKHN0cmVhbSwgIiVzIiwgc19vcHRpb25zW2lkXS51LmJvb2xWYWw/InRydWUiOiJmYWxz
ZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRZUEVfdW5zaWduZWQ6CisgICAgICAgIGZw
cmludGYoc3RyZWFtLCAiJXUiLCBzX29wdGlvbnNbaWRdLnUudW5zaWduZWRWYWwpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFRZUEVfZG91YmxlOgorICAgICAgICBmcHJpbnRmKHN0cmVhbSwg
IiVsZiIsIHNfb3B0aW9uc1tpZF0udS5kb3VibGVWYWwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFRZUEVfaW50MzJfdDoKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIlZCIsIHNfb3B0aW9u
c1tpZF0udS5pbnQzMl90VmFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZwcmludGYo
c3RyZWFtLCAiJXMiLCBmb290ZXIpOworfQogCit9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIxNzExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNyw2NSArMjcsMTYxIEBACiAjZGVmaW5lIE9wdGlvbnNfaAogCiAjaW5jbHVkZSA8c3Rk
aW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBP
cHRpb25zIHsKK25hbWVzcGFjZSBKU0MgewogCi1leHRlcm4gYm9vbCB1c2VKSVQ7CisvLyBIb3cg
SlNDIFZNIG9wdGlvbnMgd29yaz8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhl
IEpTQ19PUFRJT05TKCkgbWFjcm8gYmVsb3cgZGVmaW5lcyBhIGxpc3Qgb2YgYWxsIEpTQyBvcHRp
b25zIGluIHVzZSwKKy8vIGFsb25nIHdpdGggdGhlaXIgdHlwZXMgYW5kIGRlZmF1bHQgdmFsdWVz
LiBUaGUgb3B0aW9ucyB2YWx1ZXMgYXJlIGFjdHVhbGx5CisvLyByZWFsaXplZCBhcyBhbiBhcnJh
eSBvZiBPcHRpb25zOjpFbnRyeSBlbGVtZW50cy4KKy8vCisvLyAgICAgT3B0aW9uczo6aW5pdGlh
bGl6ZSgpIHdpbGwgaW5pdGlhbGl6ZSB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB2YWx1ZXMgd2l0aAor
Ly8gdGhlIGRlZmF1bHRzIHNwZWNpZmllZCBpbiBKU0NfT1BUSU9OUygpIGJlbG93LiBBZnRlciB0
aGF0LCB0aGUgdmFsdWVzIGNhbgorLy8gYmUgcHJvZ3JhbW1hdGljYWxseSByZWFkIGFuZCB3cml0
dGVuIHRvIHVzaW5nIGFuIGFjY2Vzc29yIG1ldGhvZCB3aXRoIHRoZQorLy8gc2FtZSBuYW1lIGFz
IHRoZSBvcHRpb24uIEZvciBleGFtcGxlLCB0aGUgb3B0aW9uICJ1c2VKSVQiIGNhbiBiZSByZWFk
IGFuZAorLy8gc2V0IGxpa2Ugc286CisvLworLy8gICAgIGJvb2wgaml0SXNPbiA9IE9wdGlvbnM6
OnVzZUpJVCgpOyAgLy8gR2V0IHRoZSBvcHRpb24gdmFsdWUuCisvLyAgICAgT3B0aW9uczo6dXNl
SklUKCkgPSBmYWxzZTsgICAgICAgICAvLyBTZXRzIHRoZSBvcHRpb24gdmFsdWUuCisvLworLy8g
ICAgIElmIHlvdSB3YW50IHRvIHR3ZWFrIGFueSBvZiB0aGVzZSB2YWx1ZXMgcHJvZ3JhbW1hdGlj
YWxseSBmb3IgdGVzdGluZworLy8gcHVycG9zZXMsIHlvdSBjYW4gZG8gc28gaW4gT3B0aW9uczo6
aW5pdGlhbGl6ZSgpIGFmdGVyIHRoZSBkZWZhdWx0IHZhbHVlcworLy8gYXJlIHNldC4KKy8vCisv
LyAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBlbmFibGUgUlVOX1RJTUVfSEVVUklTVElDUyB3
aGljaCB3aWxsIGFsbG93IHlvdQorLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIGJ5
IHNwZWNpZnlpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZQorLy8gZm9ybTogSlNDXzxu
YW1lIG9mIEpTQyBvcHRpb24+LgorLy8KKy8vIE5vdGU6IE9wdGlvbnM6OmluaXRpYWxpemUoKSB0
cmllcyB0byBlbnN1cmUgc29tZSBzYW5pdHkgb24gdGhlIG9wdGlvbiB2YWx1ZXMKKy8vIHdoaWNo
IGFyZSBzZXQgYnkgZG9pbmcgc29tZSByYW5nZSBjaGVja3MsIGFuZCB2YWx1ZSBjb3JyZWN0aW9u
cy4gVGhlc2UKKy8vIGNoZWNrcyBhcmUgZG9uZSBhZnRlciB0aGUgb3B0aW9uIHZhbHVlcyBhcmUg
c2V0LiBJZiB5b3UgYWx0ZXIgdGhlIG9wdGlvbgorLy8gdmFsdWVzIGFmdGVyIHRoZSBzYW5pdHkg
Y2hlY2tzIChmb3IgeW91ciBvd24gdGVzdGluZyksIHRoZW4geW91J3JlIGxpYWJsZSB0bworLy8g
ZW5zdXJlIHRoYXQgdGhlIG5ldyB2YWx1ZXMgc2V0IGFyZSBzYW5lIGFuZCByZWFzb25hYmxlIGZv
ciB5b3VyIG93biBydW4uCisKKworI2RlZmluZSBKU0NfT1BUSU9OUyh2KSBcCisgICAgdihib29s
LCB1c2VKSVQsICAgIHRydWUpIFwKKyAgICB2KGJvb2wsIHVzZURGR0pJVCwgdHJ1ZSkgXAorICAg
IFwKKyAgICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICov
IFwKKyAgICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIHNo
b3dERkdEaXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11
bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKSBcCisgICAgXAor
ICAgIHYodW5zaWduZWQsIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50LCAxODApIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDApIFwKKyAgICBcCisg
ICAgLyogRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUg
bGV2ZWwsIGV0Yy4gKi8gXAorICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0RlcHRoLCA1
KSBcCisgICAgXAorICAgIHYoaW50MzJfdCwgdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAsIDEw
MCkgXAorICAgIHYoaW50MzJfdCwgdGhyZXNob2xkRm9ySklUU29vbiwgMTAwKSBcCisgICAgXAor
ICAgIHYoaW50MzJfdCwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgMTAwMCkgXAor
ICAgIHYoaW50MzJfdCwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIDUwMDAp
IFwKKyAgICB2KGludDMyX3QsIHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgMTAwMCkgXAorICAg
IFwKKyAgICB2KGludDMyX3QsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAxKSBc
CisgICAgdihpbnQzMl90LCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSkg
XAorICAgIFwKKyAgICB2KGJvb2wsIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50cywgZmFsc2UpIFwKKyAgICB2KGludDMyX3QsIG1heGltdW1FeGVjdXRpb25Db3VudHNC
ZXR3ZWVuQ2hlY2twb2ludHMsIDEwMDApIFwKKyAgICBcCisgICAgdihkb3VibGUsIGxpa2VseVRv
VGFrZVNsb3dDYXNlVGhyZXNob2xkLCAwLjE1KSBcCisgICAgdihkb3VibGUsIGNvdWxkVGFrZVNs
b3dDYXNlVGhyZXNob2xkLCAwLjA1KSBcCisgICAgdih1bnNpZ25lZCwgbGlrZWx5VG9UYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQsIDEwMCkgXAorICAgIHYodW5zaWduZWQsIGNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50LCAxMCkgXAorICAgIFwKKyAgICB2KGRvdWJsZSwgb3NyRXhpdFByb21p
bmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlLCAwLjMpIFwKKyAgICB2KHVuc2lnbmVkLCBvc3JFeGl0
Q291bnRGb3JSZW9wdGltaXphdGlvbiwgMTAwKSBcCisgICAgdih1bnNpZ25lZCwgb3NyRXhpdENv
dW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCwgNSkgXAorICAgIFwKKyAgICB2KHVuc2lnbmVk
LCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCwgMCkgIFwKKyAgICB2KHVuc2lnbmVkLCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlclN0ZXAsIDEpIFwKKyAgICBcCisgICAgdih1bnNpZ25l
ZCwgbWluaW11bU9wdGltaXphdGlvbkRlbGF5LCAxKSBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11
bU9wdGltaXphdGlvbkRlbGF5LCA1KSBcCisgICAgdihkb3VibGUsIGRlc2lyZWRQcm9maWxlTGl2
ZW5lc3NSYXRlLCAwLjc1KSBcCisgICAgdihkb3VibGUsIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NS
YXRlLCAwLjM1KSBcCisgICAgXAorICAgIHYoZG91YmxlLCBkb3VibGVWb3RlUmF0aW9Gb3JEb3Vi
bGVGb3JtYXQsIDIpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlLCAxMDApIFwKKyAgICB2KHVuc2lnbmVkLCBnY01hcmtTdGFja1Nl
Z21lbnRTaXplLCBwYWdlU2l6ZSgpKSBcCisgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZHQ01hcmtl
cnMsIGNvbXB1dGVOdW1iZXJPZkdDTWFya2Vycyg3KSkgXAorICAgIHYodW5zaWduZWQsIG9wYXF1
ZVJvb3RNZXJnZVRocmVzaG9sZCwgMTAwMCkgXAorICAgIFwKKyAgICB2KGJvb2wsIGZvcmNlV2Vh
a1JhbmRvbVNlZWQsIGZhbHNlKSBcCisgICAgdih1bnNpZ25lZCwgZm9yY2VkV2Vha1JhbmRvbVNl
ZWQsIDApCisKKworY2xhc3MgT3B0aW9ucyB7CitwdWJsaWM6CisgICAgLy8gRGVjbGFyZSB0aGUg
b3B0aW9uIElEczoKKyAgICBlbnVtIE9wdGlvbklEIHsKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9O
KHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgICAgICBPUFRfIyNuYW1lXywKKyAg
ICAgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElP
TgorICAgICAgICBudW1iZXJPZk9wdGlvbnMKKyAgICB9OworCisKKyAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplKCk7CisKKyAgICAvLyBQYXJzZXMgYSBzaW5nbGUgY29tbWFuZCBsaW5lIG9wdGlv
biBpbiB0aGUgZm9ybWF0ICI8b3B0aW9uTmFtZT49PHZhbHVlPiIKKyAgICAvLyAobm8gc3BhY2Vz
IGFsbG93ZWQpIGFuZCBzZXQgdGhlIHNwZWNpZmllZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUuCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0T3B0aW9uKGNvbnN0IGNoYXIqIGFy
Zyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcEFsbE9wdGlvbnMoRklM
RSogc3RyZWFtID0gc3Rkb3V0KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wT3B0aW9uKE9wdGlvbklE
IGlkLCBGSUxFKiBzdHJlYW0gPSBzdGRvdXQsIGNvbnN0IGNoYXIqIGhlYWRlciA9ICIiLCBjb25z
dCBjaGFyKiBmb290ZXIgPSAiIik7CisKKyAgICAvLyBEZWNsYXJlIGFjY2Vzc29ycyBmb3IgZWFj
aCBvcHRpb246CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRW
YWx1ZV8pIFwKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB0eXBlXyYgbmFtZV8oKSB7IHJldHVy
biBzX29wdGlvbnNbT1BUXyMjbmFtZV9dLnUudHlwZV8jI1ZhbDsgfQorCisgICAgSlNDX09QVElP
TlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorCitwcml2YXRlOgor
ICAgIGVudW0gRW50cnlUeXBlIHsKKyAgICAgICAgVFlQRV9ib29sLAorICAgICAgICBUWVBFX3Vu
c2lnbmVkLAorICAgICAgICBUWVBFX2RvdWJsZSwKKyAgICAgICAgVFlQRV9pbnQzMl90CisgICAg
fTsKKworICAgIC8vIEZvciBzdG9yaW5nIGZvciBhbiBvcHRpb24gdmFsdWU6CisgICAgc3RydWN0
IEVudHJ5IHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgYm9vbCBib29sVmFsOworICAg
ICAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWw7CisgICAgICAgICAgICBkb3VibGUgZG91Ymxl
VmFsOworICAgICAgICAgICAgaW50MzJfdCBpbnQzMl90VmFsOworICAgICAgICB9IHU7CisgICAg
fTsKKworICAgIC8vIEZvciBzdG9yaW5nIGNvbnN0YW50IG1ldGEgZGF0YSBhYm91dCBlYWNoIG9w
dGlvbjoKKyAgICBzdHJ1Y3QgRW50cnlJbmZvIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZTsK
KyAgICAgICAgRW50cnlUeXBlIHR5cGU7CisgICAgfTsKKworICAgIE9wdGlvbnMoKTsKKworICAg
IC8vIERlY2xhcmUgdGhlIG9wdGlvbnM6CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywg
bmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICB0eXBlXyBtXyMjbmFtZV87CisgICAgSlNDX09Q
VElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorCisgICAgLy8g
RGVjbGFyZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBvcHRpb25zIHN0b3JlOgorICAg
IEpTX0VYUE9SVERBVEEgc3RhdGljIEVudHJ5IHNfb3B0aW9uc1tudW1iZXJPZk9wdGlvbnNdOwor
ICAgIHN0YXRpYyBjb25zdCBFbnRyeUluZm8gc19vcHRpb25zSW5mb1tudW1iZXJPZk9wdGlvbnNd
OworfTsKIAotZXh0ZXJuIGJvb2wgc2hvd0Rpc2Fzc2VtYmx5OwotZXh0ZXJuIGJvb2wgc2hvd0RG
R0Rpc2Fzc2VtYmx5OyAvLyBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1i
bHkuCi0KLWV4dGVybiB1bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudDsKLQotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxp
bmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5j
dGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci0KLWV4dGVy
biB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNr
LCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KLQotZXh0ZXJuIGludDMy
X3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRG
b3JKSVRTb29uOwotCi1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwOwotZXh0ZXJuIGludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7
Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb247Ci1leHRlcm4gaW50MzJf
dCB0aHJlc2hvbGRGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uOwotCi1leHRlcm4gaW50MzJfdCBl
eGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm47Ci0KLWV4dGVybiBib29sIHJhbmRvbWl6ZUV4ZWN1
dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKLWV4dGVybiBpbnQzMl90IG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Ci0KLWV4dGVybiBkb3VibGUgbGlrZWx5VG9U
YWtlU2xvd0Nhc2VUaHJlc2hvbGQ7Ci1leHRlcm4gZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhy
ZXNob2xkOwotZXh0ZXJuIHVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
OwotZXh0ZXJuIHVuc2lnbmVkIGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotCi1leHRl
cm4gZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZTsKLWV4dGVybiB1
bnNpZ25lZCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbjsKLWV4dGVybiB1bnNpZ25lZCBv
c3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wOwotCi1leHRlcm4gdW5zaWduZWQg
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXg7Ci1leHRlcm4gdW5zaWduZWQgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJTdGVwOwotCi1leHRlcm4gdW5zaWduZWQgbWluaW11bU9wdGltaXph
dGlvbkRlbGF5OwotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25EZWxheTsKLWV4
dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGU7Ci1leHRlcm4gZG91YmxlIGRl
c2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOwotCi1leHRlcm4gZG91YmxlIGRvdWJsZVZvdGVSYXRp
b0ZvckRvdWJsZUZvcm1hdDsKLQotZXh0ZXJuIHVuc2lnbmVkIG1pbmltdW1OdW1iZXJPZlNjYW5z
QmV0d2VlblJlYmFsYW5jZTsKLWV4dGVybiB1bnNpZ25lZCBnY01hcmtTdGFja1NlZ21lbnRTaXpl
OwotSlNfRVhQT1JUREFUQSBleHRlcm4gdW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7Ci1KU19F
WFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQ7Ci0KLWV4
dGVybiBib29sIGZvcmNlV2Vha1JhbmRvbVNlZWQ7Ci1leHRlcm4gdW5zaWduZWQgZm9yY2VkV2Vh
a1JhbmRvbVNlZWQ7Ci0KLXZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKTsKLQotfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Ok9wdGlvbnMKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3B0aW9u
c19oCi0K
</data>
<flag name="review"
          id="158776"
          type_id="1"
          status="-"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="158777"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150523</attachid>
            <date>2012-07-02 20:41:01 -0700</date>
            <delta_ts>2012-07-02 23:24:33 -0700</delta_ts>
            <desc>rev 2: Need to include &lt;wtf/StringExtras.h&gt; to get the windows build to be happy for strcasecmp.</desc>
            <filename>bug-90420-rev2.patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="158789"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150544</attachid>
            <date>2012-07-02 23:24:33 -0700</date>
            <delta_ts>2012-07-03 01:23:13 -0700</delta_ts>
            <desc>rev 3: Used typedef trick to eliminate the &apos;_&apos; altogether + addressed Filip&apos;s comments.</desc>
            <filename>bug-90420-rev3.patch</filename>
            <type>text/plain</type>
            <size>49988</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTY2Miw2ICs2NjcsMjUgQEAg
c3RhdGljIHZvaWQgcGFyc2VBcmd1bWVudHMoaW50IGFyZ2MsIGNoYQogICAgICAgICB9CiAgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi1oIikgfHwgIXN0cmNtcChhcmcsICItLWhlbHAiKSkKICAg
ICAgICAgICAgIHByaW50VXNhZ2VTdGF0ZW1lbnQodHJ1ZSk7CisKKyAgICAgICAgaWYgKCFzdHJj
bXAoYXJnLCAiLS1vcHRpb25zIikpIHsKKyAgICAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFs
bE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXN0cmNtcChhcmcsICItLWR1bXBPcHRpb25zIikpIHsKKyAgICAg
ICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoc3RkZXJyKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2VlIGlmIHRoZSAtLSBvcHRpb24g
aXMgYSBKU0MgVk0gb3B0aW9uLgorICAgICAgICAvLyBOT1RFOiBBdCB0aGlzIHBvaW50LCB3ZSBr
bm93IHRoYXQgdGhlIGFyZyBzdGFydHMgd2l0aCAiLS0iLiBTa2lwIGl0LgorICAgICAgICBpZiAo
SlNDOjpPcHRpb25zOjpzZXRPcHRpb24oJmFyZ1syXSkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBh
cmcgd2FzIHJlY29nbml6ZWQgYXMgYSBWTSBvcHRpb24gYW5kIGhhcyBiZWVuIHBhcnNlZC4KKyAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBKdXN0IGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYXJnLiAK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFRoaXMgYXJnIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRo
ZSBWTSBub3IgYnkganNjLiBQYXNzIGl0IG9uIHRvIHRoZQorICAgICAgICAvLyBzY3JpcHQuCiAg
ICAgICAgIG9wdGlvbnMuc2NyaXB0cy5hcHBlbmQoU2NyaXB0KHRydWUsIGFyZ3ZbaV0pKTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBMaW5r
QnVmZmVyOjpDb2RlUmVmIExpbmtCdWZmZXI6OmZpbmFsaXplCiAKIExpbmtCdWZmZXI6OkNvZGVS
ZWYgTGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlV2l0aERpc2Fzc2VtYmx5KGNvbnN0IGNoYXIqIGZv
cm1hdCwgLi4uKQogewotICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0
aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KTsKKyAgICBBU1NFUlQoT3B0aW9uczo6c2hvd0Rpc2Fz
c2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5KCkpOwogICAgIAogICAgIENv
ZGVSZWYgcmVzdWx0ID0gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw3ICsyNzksNyBAQCBwcml2YXRlOgogLy8gaXMg
dHJ1ZSwgc28geW91IGNhbiBoaWRlIGV4cGVuc2l2ZSBkaXNhc3NlbWJseS1vbmx5IGNvbXB1dGF0
aW9ucyBpbnNpZGUgdGhlcmUuCiAKICNkZWZpbmUgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyUmVm
ZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGluZykgIFwKLSAgICBGSU5BTElaRV9DT0RF
X0lGKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxv
Z0FyZ3VtZW50c0ZvckhlYWRpbmcpCisgICAgRklOQUxJWkVfQ09ERV9JRihPcHRpb25zOjpzaG93
RGlzYXNzZW1ibHkoKSwgbGlua0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxvZ0FyZ3VtZW50c0Zvckhl
YWRpbmcpCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3NzEsNyArMjc3MSw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAg
ICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyID49IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKKyAgICBp
ZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXph
dGlvbkRlbGF5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHVuc2lnbmVkIG51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlczsKQEAgLTI3ODIsOSArMjc4Miw5IEBA
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAgZGF0YUxvZygiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSwgKGRvdWJsZSludW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoIW51bWJlck9mVmFsdWVQcm9m
aWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVz
c1JhdGUpCi0gICAgICAgICYmICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91
YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVj
a2V0cyAvIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFBy
b2ZpbGVGdWxsbmVzc1JhdGUpCi0gICAgICAgICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcikgKyAxID49IE9wdGlvbnM6Om1pbmltdW1PcHRpbWl6YXRp
b25EZWxheSkKKyAgICBpZiAoKCFudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IE9wdGlvbnM6OmRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlKCkpCisgICAgICAgICYm
ICghdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIHRvdGFsTnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUo
KSkKKyAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIEFTU0VSVChtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlciA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEyMTcxMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYg
KCFudW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50ICYmIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3Rh
dGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9u
czo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02
NzksNyArNjc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9m
UmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0g
T3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6Y291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6
Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZh
bHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2Fz
ZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2Zp
bGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNjk5
LDcgKzY5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYgKCFudW1iZXJPZlJh
cmVDYXNlUHJvZmlsZXMoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAg
ICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHNwZWNpYWxGYXN0Q2Fz
ZUNvdW50KSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291bnQpIC8gbV9leGVjdXRpb25FbnRyeUNv
dW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKGlu
dCBieXRlY29kZU9mZnNldCkKQEAgLTcwOSw3ICs3MDksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRl
Y29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2ln
bmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWdu
ZWQgdmFsdWUgPSBzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291
bnQgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3Vu
dCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKQEAgLTcxOSw3ICs3MTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNw
ZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWUgPSBzbG93Q2FzZUNvdW50ICsgc3BlY2lhbEZhc3RDYXNlQ291bnQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQg
JiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0g
T3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1
cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAm
JiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBP
cHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB1bnNpZ25lZCBleGVjdXRpb25FbnRyeUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9leGVjdXRpb25FbnRyeUNvdW50OyB9CkBAIC05NDEsMTIgKzk0MSwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgaml0QWZ0ZXJXYXJtVXAoKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9w
dGlvbnM6OnRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCB0aGlzKTsKKyAgICAgICAgICAgIG1f
bGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXAoKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgaml0U29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbiwgdGhpcyk7Cisg
ICAgICAgICAgICBtX2xsaW50RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6
OnRocmVzaG9sZEZvckpJVFNvb24oKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNvbnN0IEV4ZWN1dGlvbkNvdW50ZXImIGxsaW50RXhlY3V0ZUNvdW50ZXIoKSBjb25zdApA
QCAtOTc3LDI1ICs5NzcsMjUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRvIGF2b2lk
IHRocmFzaGluZy4KICAgICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlciA8PSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKTsKICAgICAgICAgICAgIHJldHVybiBt
X3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQogICAgICAgICB7CiAgICAgICAgICAgICBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Ci0gICAgICAgICAgICBpZiAobV9yZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA+IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4
KQotICAgICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25z
OjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXJNYXgoKSkKKyAgICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0g
T3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9w
dGltaXplQWZ0ZXJXYXJtVXAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkg
PDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBPcHRpb25zOjp0aHJlc2hvbGRGb3JPcHRpbWl6
ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAg
ICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKQpAQCAtMTA3NSw3
ICsxMDc1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBj
b2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRocmVzaG9sZEZv
ck9wdGltaXplU29vbiA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCB0aGlzKTsKKyAg
ICAgICAgICAgIG1faml0RXhlY3V0ZUNvdW50ZXIuc2V0TmV3VGhyZXNob2xkKE9wdGlvbnM6OnRo
cmVzaG9sZEZvck9wdGltaXplU29vbigpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCks
IHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBvc3JFeGl0Q291
bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3NyRXhpdENvdW50ZXI7IH0KQEAgLTExMDQsMTIgKzEx
MDQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB1aW50MzJfdCBleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbigpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRG
b3JSZW9wdGltaXphdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRU
aHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb24oKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJl
b3B0aW1pemF0aW9uRnJvbUxvb3AoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6
YXRpb25Gcm9tTG9vcCk7CisgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWRFeGl0Q291bnRUaHJl
c2hvbGQoT3B0aW9uczo6b3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZU5vdygpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVj
dXRpb25Db3VudGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIFQgY2xpcHBlZFRocmVzaG9sZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBUIHRocmVzaG9sZCkKICAgICB7CiAgICAgICAgIGludDMyX3QgbWF4VGhyZXNob2xkOwot
ICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNr
cG9pbnRzKQotICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2JqZWN0LT53ZWFrUmFu
ZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVj
a3BvaW50czsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0Jl
dHdlZW5DaGVja3BvaW50cygpKQorICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gZ2xvYmFsT2Jq
ZWN0LT53ZWFrUmFuZG9tSW50ZWdlcigpICUgT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXhUaHJl
c2hvbGQgPSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
OworICAgICAgICAgICAgbWF4VGhyZXNob2xkID0gT3B0aW9uczo6bWF4aW11bUV4ZWN1dGlvbkNv
dW50c0JldHdlZW5DaGVja3BvaW50cygpOwogICAgICAgICBpZiAodGhyZXNob2xkID4gbWF4VGhy
ZXNob2xkKQogICAgICAgICAgICAgdGhyZXNob2xkID0gbWF4VGhyZXNob2xkOwogICAgICAgICBy
ZXR1cm4gdGhyZXNob2xkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcz
LDcgKzEyNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAg
ICAgdW5zaWduZWQgZGVwdGggPSAwOwogICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkg
PSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKICAg
ICAgICAgKytkZXB0aDsKLSAgICAgICAgaWYgKGRlcHRoID49IE9wdGlvbnM6Om1heGltdW1Jbmxp
bmluZ0RlcHRoKQorICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5n
RGVwdGgoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGVwdGggZXhjZWVkZWQuCiAg
ICAgICAgIAogICAgICAgICBpZiAoZW50cnktPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZp
c2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyOSArNDEsMjkgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogLy8gY2hlY2sgb3Bjb2Rlcy4KIGlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0
aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAg
cmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpOwogfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudCgpOwogfQogCiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNv
bnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKQogICAgICAgICAmJiAhY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bmVlZHNBY3RpdmF0aW9uKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTIxNzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDcgKzEzNiw3IEBAIGVudW0gT3B0aW1pemF0aW9uRml4cG9pbnRTdGF0ZSB7IEZpeHBvaW4K
IAogaW5saW5lIGJvb2wgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkKIHsKLSAgICByZXR1cm4gT3B0
aW9uczo6c2hvd0Rpc2Fzc2VtYmx5IHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseTsKKyAg
ICByZXR1cm4gT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5KCkgfHwgT3B0aW9uczo6c2hvd0RGR0Rp
c2Fzc2VtYmx5KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkRGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC02MCw3ICs2MSwxMCBAQCBpbmxpbmUgYm9vbCBjb21w
aWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0
ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICAK
KworICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICBkYXRhTG9nKCJERkcgY29tcGls
aW5nIGNvZGUgYmxvY2sgJXAoJXApIGZvciBleGVjdXRhYmxlICVwLCBudW1iZXIgb2YgaW5zdHJ1
Y3Rpb25zID0gJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBPU1JFeGl0OjpkdW1w
KEZJTEUqIG91dCkgY29uc3QKIAogYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCiB7Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBk
ZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVu
Y2VGb3JGcmVxdWVudEV4aXRTaXRlKQorICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291
bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQ
cm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTIx
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBoYXMgYmVlbiB2b3RlZCB0byBiZWNvbWUgYSBkb3Vi
bGUsIHRoZW4gbWFrZSBpdCBhCiAgICAgICAgIC8vIGRvdWJsZS4KLSAgICAgICAgaWYgKGRvdWJs
ZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdCkK
KyAgICAgICAgaWYgKGRvdWJsZVZvdGVSYXRpbygpID49IE9wdGlvbnM6OmRvdWJsZVZvdGVSYXRp
b0ZvckRvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtTdGFjay5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgTWFya1N0
YWNrU2VnbWVudCogTWFya1N0YWNrU2VnbWVudEFsbG9jYQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVz
ZXJ2ZUFuZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hcmtTdGFja1NlZ21lbnQqPihPU0FsbG9jYXRvcjo6cmVzZXJ2ZUFu
ZENvbW1pdChPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpKTsKIH0KIAogdm9pZCBN
YXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpyZWxlYXNlKE1hcmtTdGFja1NlZ21lbnQqIHNlZ21l
bnQpCkBAIC04NiwxMyArODYsMTMgQEAgdm9pZCBNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9yOjpz
aHJpbmtSZQogICAgIHdoaWxlIChzZWdtZW50cykgewogICAgICAgICBNYXJrU3RhY2tTZWdtZW50
KiB0b0ZyZWUgPSBzZWdtZW50czsKICAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy0+bV9wcmV2
aW91czsKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSh0b0ZyZWUsIE9w
dGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpOworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVj
b21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSgp
KTsKICAgICB9CiB9CiAKIE1hcmtTdGFja0FycmF5OjpNYXJrU3RhY2tBcnJheShNYXJrU3RhY2tT
ZWdtZW50QWxsb2NhdG9yJiBhbGxvY2F0b3IpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3Ip
Ci0gICAgLCBtX3NlZ21lbnRDYXBhY2l0eShNYXJrU3RhY2tTZWdtZW50OjpjYXBhY2l0eUZyb21T
aXplKE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpKQorICAgICwgbV9zZWdtZW50Q2Fw
YWNpdHkoTWFya1N0YWNrU2VnbWVudDo6Y2FwYWNpdHlGcm9tU2l6ZShPcHRpb25zOjpnY01hcmtT
dGFja1NlZ21lbnRTaXplKCkpKQogICAgICwgbV90b3AoMCkKICAgICAsIG1fbnVtYmVyT2ZQcmV2
aW91c1NlZ21lbnRzKDApCiB7CkBAIC0yNjIsNyArMjYyLDcgQEAgTWFya1N0YWNrVGhyZWFkU2hh
cmVkRGF0YTo6TWFya1N0YWNrVGhyZQogICAgICwgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0
KGZhbHNlKQogewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnM7ICsraSkgeworICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKICAg
ICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yID0gbmV3IFNsb3RWaXNpdG9yKCp0aGlzKTsK
ICAgICAgICAgbV9tYXJraW5nVGhyZWFkc01hcmtTdGFjay5hcHBlbmQoc2xvdFZpc2l0b3IpOwog
ICAgICAgICBtX21hcmtpbmdUaHJlYWRzLmFwcGVuZChjcmVhdGVUaHJlYWQobWFya2luZ1RocmVh
ZFN0YXJ0RnVuYywgc2xvdFZpc2l0b3IsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpKTsKQEAg
LTM2OCw3ICszNjgsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkb25hdGVLbm93blBhcmFsbGVsKCkK
ICAgICAvLyBPdGhlcndpc2UsIGFzc3VtZSB0aGF0IGEgdGhyZWFkIHdpbGwgZ28gaWRsZSBzb29u
LCBhbmQgZG9uYXRlLgogICAgIG1fc3RhY2suZG9uYXRlU29tZUNlbGxzVG8obV9zaGFyZWQubV9z
aGFyZWRNYXJrU3RhY2spOwogCi0gICAgaWYgKG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJh
bGxlbE1hcmtlcnMgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycykKKyAgICBpZiAobV9zaGFy
ZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkpCiAgICAgICAgIG1fc2hhcmVkLm1fbWFya2luZ0NvbmRpdGlvbi5icm9hZGNhc3Qo
KTsKIH0KIApAQCAtMzc3LDEwICszNzcsMTAgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW4oKQog
ICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwogICAgCiAjaWYgRU5BQkxFKFBBUkFMTEVM
X0dDKQotICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDEpIHsKKyAgICBpZiAo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDEpIHsKICAgICAgICAgd2hpbGUgKCFtX3N0
YWNrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9zdGFjay5yZWZpbGwoKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2Nh
bnNCZXR3ZWVuUmViYWxhbmNlOyBtX3N0YWNrLmNhblJlbW92ZUxhc3QoKSAmJiBjb3VudGRvd24t
LTspCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ZG93biA9IE9wdGlvbnM6Om1pbmlt
dW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZSgpOyBtX3N0YWNrLmNhblJlbW92ZUxhc3Qo
KSAmJiBjb3VudGRvd24tLTspCiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbigqdGhpcywg
bV9zdGFjay5yZW1vdmVMYXN0KCkpOwogICAgICAgICAgICAgZG9uYXRlS25vd25QYXJhbGxlbCgp
OwogICAgICAgICB9CkBAIC00MDEsMTQgKzQwMSwxNCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFp
bkZyb21TaGFyZWQoU2hhcmVkCiB7CiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAg
ICAgCi0gICAgQVNTRVJUKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKTsKKyAgICBBU1NFUlQo
T3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZVBh
cmFsbGVsOwogCiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIHNob3VsZEJlUGFyYWxsZWwg
PSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA+IDE7CisgICAgc2hvdWxkQmVQYXJhbGxlbCA9
IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPiAxOwogI2Vsc2UKLSAgICBBU1NFUlQoT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMgPT0gMSk7CisgICAgQVNTRVJUKE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKCkgPT0gMSk7CiAgICAgc2hvdWxkQmVQYXJhbGxlbCA9IGZhbHNlOwogI2Vu
ZGlmCiAgICAgCkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9t
U2hhcmVkKFNoYXJlZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwor
ICAgICAgICAgICAgc2l6ZV90IGlkbGVUaHJlYWRDb3VudCA9IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzKCkgLSBtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzOwogICAg
ICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20obV9zaGFyZWQubV9zaGFyZWRNYXJr
U3RhY2ssIGlkbGVUaHJlYWRDb3VudCk7CiAgICAgICAgICAgICBtX3NoYXJlZC5tX251bWJlck9m
QWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcgKzMwNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBtZXJnZU9wYXF1ZVJv
b3RzSWZQcm9maXRhYmxlKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX29wYXF1ZVJvb3RzLnNpemUoKSkgPCBPcHRpb25zOjpvcGFxdWVSb290TWVy
Z2VUaHJlc2hvbGQpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3Bh
cXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIG1lcmdlT3BhcXVlUm9vdHMoKTsK
ICAgICAgICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGlubGlu
ZSB2b2lkIE1hcmtTdGFjazo6YWRkT3BhcXVlUm9vdCh2b2lkKiByb290KQogICAgIHsKICNpZiBF
TkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vy
cyA9PSAxKSB7CisgICAgICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEp
IHsKICAgICAgICAgICAgIC8vIFB1dCBkaXJlY3RseSBpbnRvIHRoZSBzaGFyZWQgSGFzaFNldC4K
ICAgICAgICAgICAgIG1fc2hhcmVkLm1fb3BhcXVlUm9vdHMuYWRkKHJvb3QpOwogICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5o
CShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRvbmF0ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKLSAg
ICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09IDEpCisgICAgICAgIGlmIChP
cHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpID09IDEpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6
OmVtaXRPcHRpbWl6YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghY2FuQmVPcHRpbWl6ZWQo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNo
QWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sg
PyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCA6IE9wdGlvbnM6OmV4
ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4pLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2Rl
QmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRp
bWl6ZSA9IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGlt
aXphdGlvbkNoZWNrID8gT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3Ao
KSA6IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4oKSksIEFic29s
dXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOwog
ICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcHRpbWl6ZSk7CiAgICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKICAgICBpZiAo
a2luZCA9PSBFbnRlck9wdGltaXphdGlvbkNoZWNrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9u
IDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyB2b2lkIGlu
aXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKICAgICBXVEY6OmRvdWJsZV9jb252ZXJzaW9uOjpp
bml0aWFsaXplKCk7CiAgICAgV1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgT3B0aW9u
czo6aW5pdGlhbGl6ZU9wdGlvbnMoKTsKKyAgICBPcHRpb25zOjppbml0aWFsaXplKCk7CiAjaWYg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJz
Ojppbml0aWFsaXplKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksNyArOTksNyBAQCBleHRlcm4gY29uc3QgSGFzaFRhYmxlIHN0cmluZ0NvbnN0cnVjdG9yCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgKEVOQUJMRShDTEFTU0lDX0lOVEVSUFJFVEVSKSB8fCBF
TkFCTEUoTExJTlQpKQogc3RhdGljIGJvb2wgZW5hYmxlQXNzZW1ibGVyKEV4ZWN1dGFibGVBbGxv
Y2F0b3ImIGV4ZWN1dGFibGVBbGxvY2F0b3IpCiB7Ci0gICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9uczo6dXNlSklUKQorICAgIGlmICghZXhlY3V0YWJsZUFs
bG9jYXRvci5pc1ZhbGlkKCkgfHwgIU9wdGlvbnM6OnVzZUpJVCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNSw3ICsxMTUsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2
b2lkCiBKU0dsb2JhbE9iamVjdDo6SlNHbG9iYWxPYmplY3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgR2xvYmFsT2JqZWN0TWV0aG9kVGFibGUq
IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogICAgIDogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dChnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUsICZtX3N5bWJvbFRhYmxlKQogICAgICwgbV9nbG9iYWxT
Y29wZUNoYWluKCkKLSAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21T
ZWVkID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQgOiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
ICsgMS4wKSkpCisgICAgLCBtX3dlYWtSYW5kb20oT3B0aW9uczo6Zm9yY2VXZWFrUmFuZG9tU2Vl
ZCgpID8gT3B0aW9uczo6Zm9yY2VkV2Vha1JhbmRvbVNlZWQoKSA6IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCkgKyAxLjApKSkKICAgICAsIG1fZXZhbEVuYWJsZWQodHJ1ZSkKICAgICAsIG1fZ2xvYmFsT2Jq
ZWN0TWV0aG9kVGFibGUoZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUgPyBnbG9iYWxPYmplY3RNZXRo
b2RUYWJsZSA6ICZzX2dsb2JhbE9iamVjdE1ldGhvZFRhYmxlKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw4ICsyNywxMyBAQAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKIAogI2luY2x1ZGUgPGxpbWl0
cz4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0
cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9OdW1iZXJPZkNvcmVzLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
Z2VCbG9jay5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
U3RyaW5nRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pICYmIEVOQUJMRShQQVJBTExFTF9HQykK
ICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CkBAIC0zNyw2NyArNDIsOSBAQAogLy8gU2V0IHRvIDEg
dG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAj
ZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAKIAotI2lmIEVOQUJMRShSVU5fVElN
RV9IRVVSSVNUSUNTKQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgT3B0aW9ucyB7Ci0KLWJvb2wgdXNlSklUOwotCi1ib29sIHNob3dEaXNhc3NlbWJs
eTsKLWJvb2wgc2hvd0RGR0Rpc2Fzc2VtYmx5OwotCi11bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQotdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9u
Rm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci11bnNpZ25lZCBtYXhpbXVt
RnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwogCi11
bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsKK25hbWVzcGFjZSBKU0MgewogCi1pbnQzMl90
IHRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwOwotaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRTb29u
OwotCi1pbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IHRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOwotaW50MzJfdCB0aHJlc2hvbGRGb3JP
cHRpbWl6ZVNvb247Ci0KLWludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3A7
Ci1pbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm47Ci0KLWJvb2wgcmFu
ZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOwotaW50MzJfdCBtYXhpbXVt
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOwotCi1kb3VibGUgbGlrZWx5VG9UYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7Ci1kb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7Ci11
bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKLXVuc2lnbmVkIGNvdWxk
VGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotCi1kb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JG
cmVxdWVudEV4aXRTaXRlOwotdW5zaWduZWQgb3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRpb247
Ci11bnNpZ25lZCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wOwotCi11bnNp
Z25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKLXVuc2lnbmVkIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyU3RlcDsKLQotdW5zaWduZWQgbWluaW11bU9wdGltaXphdGlvbkRlbGF5
OwotdW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OwotZG91YmxlIGRlc2lyZWRQcm9m
aWxlTGl2ZW5lc3NSYXRlOwotZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOwotCi1k
b3VibGUgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0OwotCi11bnNpZ25lZCBtaW5pbXVt
TnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2U7Ci11bnNpZ25lZCBnY01hcmtTdGFja1NlZ21l
bnRTaXplOwotdW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7Ci11bnNpZ25lZCBvcGFxdWVSb290
TWVyZ2VUaHJlc2hvbGQ7Ci0KLWJvb2wgZm9yY2VXZWFrUmFuZG9tU2VlZDsKLXVuc2lnbmVkIGZv
cmNlZFdlYWtSYW5kb21TZWVkOwotCi0jaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCiBz
dGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wmIHZhbHVlKQogewogICAg
IGlmICghc3RyY2FzZWNtcChzdHJpbmcsICJ0cnVlIikgfHwgIXN0cmNhc2VjbXAoc3RyaW5nLCAi
eWVzIikgfHwgIXN0cmNtcChzdHJpbmcsICIxIikpIHsKQEAgLTEyNiwyNyArNzMsMjIgQEAgc3Rh
dGljIGJvb2wgcGFyc2UoY29uc3QgY2hhciogc3RyaW5nLCBkbwogICAgIHJldHVybiBzc2NhbmYo
c3RyaW5nLCAiJWxmIiwgJnZhbHVlKSA9PSAxOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYXIqIG5h
bWUsIFUgdmFsdWUpCisjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMoVCYgdmFyaWFibGUs
IGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgY29uc3QgY2hhciogc3RyaW5nVmFsdWUgPSBnZXRl
bnYobmFtZSk7Ci0gICAgaWYgKCFzdHJpbmdWYWx1ZSkgewotICAgICAgICB2YXJpYWJsZSA9IHNh
ZmVDYXN0PFQ+KHZhbHVlKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogICAgIAogICAgIGlmIChwYXJzZShzdHJpbmdWYWx1ZSwgdmFyaWFibGUpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiBmYWlsZWQg
dG8gcGFyc2UgJXM9JXNcbiIsIG5hbWUsIHN0cmluZ1ZhbHVlKTsKLSAgICB2YXJpYWJsZSA9IHNh
ZmVDYXN0PFQ+KHZhbHVlKTsKIH0KLQotI2RlZmluZSBTRVQodmFyaWFibGUsIHZhbHVlKSBzZXRI
ZXVyaXN0aWModmFyaWFibGUsICJKU0NfIiAjdmFyaWFibGUsIHZhbHVlKQotI2Vsc2UKLSNkZWZp
bmUgU0VUKHZhcmlhYmxlLCB2YWx1ZSkgdmFyaWFibGUgPSB2YWx1ZQogI2VuZGlmCiAKKwogc3Rh
dGljIHVuc2lnbmVkIGNvbXB1dGVOdW1iZXJPZkdDTWFya2VycyhpbnQgbWF4TnVtYmVyT2ZHQ01h
cmtlcnMpCiB7CiAgICAgaW50IGNwdXNUb1VzZSA9IDE7CkBAIC0xNjMsNzYgKzEwNSwxMTQgQEAg
c3RhdGljIHVuc2lnbmVkIGNvbXB1dGVOdW1iZXJPZkdDTWFya2VycwogICAgIHJldHVybiBjcHVz
VG9Vc2U7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKQotewotICAgIFNFVCh1c2VKSVQs
IHRydWUpOwotICAgIAotICAgIFNFVChzaG93RGlzYXNzZW1ibHksIGZhbHNlKTsKLSAgICBTRVQo
c2hvd0RGR0Rpc2Fzc2VtYmx5LCBmYWxzZSk7IC8vIERGRyBkaXNhc3NlbWJseSBpcyBzaG93biBp
ZiBzaG93RGlzYXNzZW1ibHkgfHwgc2hvd0RGR0Rpc2Fzc2VtYmx5Ci0gICAgCi0gICAgU0VUKG1h
eGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDAwMCk7Ci0gICAg
Ci0gICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlv
bkNvdW50LCAxODApOwotICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVD
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDApOwotICAgIAotICAgIFNFVChtYXhpbXVtSW5s
aW5pbmdEZXB0aCwgNSk7Ci0KLSAgICBTRVQodGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAsICAg
ICAxMDApOwotICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRTb29uLCAgICAgICAgICAgIDEwMCk7CiAK
LSAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIDEwMDApOwotICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgNTAwMCk7Ci0gICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgICAgICAgICAgICAxMDAwKTsKK09wdGlvbnM6OkVu
dHJ5IE9wdGlvbnM6OnNfb3B0aW9uc1tPcHRpb25zOjpudW1iZXJPZk9wdGlvbnNdOwogCi0gICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOwotICAgIFNFVChleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7Ci0gICAgCi0gICAgU0VUKHJhbmRv
bWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgZmFsc2UpOwotICAgIFNFVCht
YXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCAxMDAwKTsKKy8vIFJlYWxp
emUgdGhlIG5hbWVzIGZvciBlYWNoIG9mIHRoZSBvcHRpb25zOgorY29uc3QgT3B0aW9uczo6RW50
cnlJbmZvIE9wdGlvbnM6OnNfb3B0aW9uc0luZm9bT3B0aW9uczo6bnVtYmVyT2ZPcHRpb25zXSA9
IHsKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykg
XAorICAgIHsgI25hbWVfLCBPcHRpb25zOjp0eXBlXyMjVHlwZSB9LAorICAgIEpTQ19PUFRJT05T
KEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04KK307CisKK3ZvaWQgT3B0
aW9uczo6aW5pdGlhbGl6ZSgpCit7CisgICAgLy8gSW5pdGlhbGl6ZSBlYWNoIG9mIHRoZSBvcHRp
b25zIHdpdGggdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0
eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICBuYW1lXygpID0gZGVmYXVsdFZhbHVl
XzsKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hfT1BU
SU9OCisKKyAgICAvLyBBbGxvdyBlbnZpcm9ubWVudCB2YXJzIHRvIG92ZXJyaWRlIG9wdGlvbnMg
aWYgYXBwbGljYWJsZS4KKyAgICAvLyBUaGUgZXZuIHZhciBzaG91bGQgYmUgdGhlIG5hbWUgb2Yg
dGhlIG9wdGlvbiBwcmVmaXhlZCB3aXRoCisgICAgLy8gIkpTQ18iLgorI2lmIEVOQUJMRShSVU5f
VElNRV9IRVVSSVNUSUNTKQorI2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBk
ZWZhdWx0VmFsdWVfKSBcCisgICAgb3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKG5hbWVfKCks
ICJKU0NfIiAjbmFtZV8pOworICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRl
ZiBGT1JfRUFDSF9PUFRJT04KKyAgICAKKyNlbmRpZiAvLyBSVU5fVElNRV9IRVVSSVNUSUNTCisK
KyAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtlIGNvcnJlY3Rpb25z
IHRvIHRoZSBvcHRpb25zOgorICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSk7CisgICAgQVNT
RVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA+PSB0aHJlc2hvbGRGb3JPcHRp
bWl6ZVNvb24oKSk7CisgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAo
KSA+PSAwKTsKIAotICAgIFNFVChsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCwgICAgMC4x
NSk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAgICAwLjA1KTsgLy8g
U2hvdWxkbid0IGJlIHplcm8gYmVjYXVzZSBzb21lIG9wcyB3aWxsIHNwdXJpb3VzbHkgdGFrZSBz
bG93IGNhc2UsIGZvciBleGFtcGxlIGZvciBsaW5raW5nIG9yIGNhY2hpbmcuCi0gICAgU0VUKGxp
a2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50LCAxMDApOwotICAgIFNFVChjb3VsZFRha2VT
bG93Q2FzZU1pbmltdW1Db3VudCwgICAgMTApOwotICAgIAotICAgIFNFVChvc3JFeGl0UHJvbWlu
ZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUsICAwLjMpOwotICAgIFNFVChvc3JFeGl0Q291bnRGb3JS
ZW9wdGltaXphdGlvbiwgICAgICAgICAxMDApOwotICAgIFNFVChvc3JFeGl0Q291bnRGb3JSZW9w
dGltaXphdGlvbkZyb21Mb29wLCA1KTsKLQotICAgIFNFVChyZW9wdGltaXphdGlvblJldHJ5Q291
bnRlclN0ZXAsIDEpOwotCi0gICAgU0VUKG1pbmltdW1PcHRpbWl6YXRpb25EZWxheSwgICAxKTsK
LSAgICBTRVQobWF4aW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDUpOwotICAgIFNFVChkZXNpcmVk
UHJvZmlsZUxpdmVuZXNzUmF0ZSwgMC43NSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9maWxlRnVsbG5l
c3NSYXRlLCAwLjM1KTsKLSAgICAKLSAgICBTRVQoZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9y
bWF0LCAyKTsKLSAgICAKLSAgICBTRVQobWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxh
bmNlLCAxMDApOwotICAgIFNFVChnY01hcmtTdGFja1NlZ21lbnRTaXplLCAgICAgICAgICAgICAg
IHBhZ2VTaXplKCkpOwotICAgIFNFVChvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQsICAgICAgICAg
ICAgIDEwMDApOwotICAgIFNFVChudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NN
YXJrZXJzKDcpKTsgLy8gV2UgZG9uJ3Qgc2NhbGUgc28gd2VsbCBiZXlvbmQgNy4KLQotICAgIEFT
U0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA+PSB0aHJlc2hvbGRGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwKTsKLSAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCA+PSB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb24pOwotICAgIEFTU0VSVCh0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwID49IDApOwotICAgIAogICAgIC8vIENvbXB1dGUgdGhl
IG1heGltdW0gdmFsdWUgb2YgdGhlIHJlb3B0aW1pemF0aW9uIHJldHJ5IGNvdW50ZXIuIFRoaXMg
aXMgc2ltcGx5CiAgICAgLy8gdGhlIGxhcmdlc3QgdmFsdWUgYXQgd2hpY2ggd2UgZG9uJ3Qgb3Zl
cmZsb3cgdGhlIGV4ZWN1dGUgY291bnRlciwgd2hlbiB1c2luZyBpdAogICAgIC8vIHRvIGxlZnQt
c2hpZnQgdGhlIGV4ZWN1dGlvbiBjb3VudGVyIGJ5IHRoaXMgYW1vdW50LiBDdXJyZW50bHkgdGhl
IHZhbHVlIGVuZHMKICAgICAvLyB1cCBiZWluZyAxOCwgc28gdGhpcyBsb29wIGlzIG5vdCBzbyB0
ZXJyaWJsZTsgaXQgcHJvYmFibHkgdGFrZXMgdXAgfjEwMCBjeWNsZXMKICAgICAvLyB0b3RhbCBv
biBhIDMyLWJpdCBwcm9jZXNzb3IuCi0gICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgg
PSAwOwotICAgIHdoaWxlICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXApIDw8IChyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCArIDEp
KSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+Ojpt
YXgoKSkpCi0gICAgICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4Kys7Ci0gICAgCi0g
ICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVy
TG9uZ1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpID4gMCk7Ci0gICAg
QVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpIDw9IHN0YXRpY19jYXN0
PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSk7Ci0gICAgCi0g
ICAgU0VUKGZvcmNlV2Vha1JhbmRvbVNlZWQsIGZhbHNlKTsKLSAgICBTRVQoZm9yY2VkV2Vha1Jh
bmRvbVNlZWQsIDApOworICAgIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkgPSAwOwor
ICAgIHdoaWxlICgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKSkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkgKyAxKSkg
PD0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMj46Om1heCgp
KSkKKyAgICAgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSsrOworCisgICAgQVNT
RVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCgpKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKSA+IDApOworICAgIEFT
U0VSVCgoc3RhdGljX2Nhc3Q8aW50NjRfdD4odGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdX
YXJtVXAoKSkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSkgPD0gc3RhdGljX2Nh
c3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMj46Om1heCgpKSk7Cit9CisKKy8v
IFBhcnNlcyBhIHNpbmdsZSBjb21tYW5kIGxpbmUgb3B0aW9uIGluIHRoZSBmb3JtYXQgIjxvcHRp
b25OYW1lPj08dmFsdWU+IgorLy8gKG5vIHNwYWNlcyBhbGxvd2VkKSBhbmQgc2V0IHRoZSBzcGVj
aWZpZWQgb3B0aW9uIGlmIGFwcHJvcHJpYXRlLgorYm9vbCBPcHRpb25zOjpzZXRPcHRpb24oY29u
c3QgY2hhciogYXJnKQoreworICAgIC8vIGFyZyBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisgICAg
Ly8gICA8anNjT3B0aW9uTmFtZT49PGFwcHJvcHJpYXRlIHZhbHVlPgorICAgIGNvbnN0IGNoYXIq
IGVxdWFsU3RyID0gc3RyY2hyKGFyZywgJz0nKTsKKyAgICBpZiAoIWVxdWFsU3RyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBjaGFyKiB2YWx1ZVN0ciA9IGVxdWFsU3RyICsg
MTsKKworICAgIC8vIEZvciBlYWNoIG9wdGlvbiwgY2hlY2sgaWYgdGhlIHNwZWNpZnkgYXJnIGlz
IGEgbWF0Y2guIElmIHNvLCBzZXQgdGhlIGFyZworICAgIC8vIGlmIHRoZSB2YWx1ZSBtYWtlcyBz
ZW5zZS4gT3RoZXJ3aXNlLCBtb3ZlIG9uIHRvIGNoZWNraW5nIHRoZSBuZXh0IG9wdGlvbi4KKyNk
ZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgICAgXAor
ICAgIGlmICghc3RybmNtcChhcmcsICNuYW1lXywgZXF1YWxTdHIgLSBhcmcpKSB7ICAgICAgICBc
CisgICAgICAgIHR5cGVfIHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2UodmFsdWVTdHIsIHZhbHVlKTsgICAgICAg
ICAgXAorICAgICAgICBpZiAoc3VjY2VzcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICBuYW1lXygpID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04p
CisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBv
cHRpb24gbWF0Y2hlZC4KIH0KIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlvbnMKK3ZvaWQg
T3B0aW9uczo6ZHVtcEFsbE9wdGlvbnMoRklMRSogc3RyZWFtKQoreworICAgIGZwcmludGYoc3Ry
ZWFtLCAiSlNDIHJ1bnRpbWUgb3B0aW9uczpcbiIpOworICAgIGZvciAoaW50IGlkID0gMDsgaWQg
PCBudW1iZXJPZk9wdGlvbnM7IGlkKyspCisgICAgICAgIGR1bXBPcHRpb24oc3RhdGljX2Nhc3Q8
T3B0aW9uSUQ+KGlkKSwgc3RyZWFtLCAiICAgIiwgIlxuIik7Cit9CisKK3ZvaWQgT3B0aW9uczo6
ZHVtcE9wdGlvbihPcHRpb25JRCBpZCwgRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBoZWFkZXIs
IGNvbnN0IGNoYXIqIGZvb3RlcikKK3sKKyAgICBpZiAoaWQgPj0gbnVtYmVyT2ZPcHRpb25zKQor
ICAgICAgICByZXR1cm47IC8vIElsbGVnYWwgb3B0aW9uLgorCisgICAgZnByaW50ZihzdHJlYW0s
ICIlcyVzOiAiLCBoZWFkZXIsIHNfb3B0aW9uc0luZm9baWRdLm5hbWUpOworICAgIHN3aXRjaCAo
c19vcHRpb25zSW5mb1tpZF0udHlwZSkgeworICAgIGNhc2UgYm9vbFR5cGU6CisgICAgICAgIGZw
cmludGYoc3RyZWFtLCAiJXMiLCBzX29wdGlvbnNbaWRdLnUuYm9vbFZhbD8idHJ1ZSI6ImZhbHNl
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgdW5zaWduZWRUeXBlOgorICAgICAgICBmcHJp
bnRmKHN0cmVhbSwgIiV1Iiwgc19vcHRpb25zW2lkXS51LnVuc2lnbmVkVmFsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBkb3VibGVUeXBlOgorICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVs
ZiIsIHNfb3B0aW9uc1tpZF0udS5kb3VibGVWYWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGludDMyVHlwZToKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIlZCIsIHNfb3B0aW9uc1tpZF0u
dS5pbnQzMlZhbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBmcHJpbnRmKHN0cmVhbSwg
IiVzIiwgZm9vdGVyKTsKK30KIAorfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NjUgKzI3LDE2NSBAQAogI2RlZmluZSBPcHRpb25zX2gKIAogI2luY2x1ZGUgPHN0ZGludC5oPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgT3B0aW9ucyB7
CituYW1lc3BhY2UgSlNDIHsKIAotZXh0ZXJuIGJvb2wgdXNlSklUOworLy8gSG93IGRvIEpTQyBW
TSBvcHRpb25zIHdvcms/CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRoZSBK
U0NfT1BUSU9OUygpIG1hY3JvIGJlbG93IGRlZmluZXMgYSBsaXN0IG9mIGFsbCBKU0Mgb3B0aW9u
cyBpbiB1c2UsCisvLyBhbG9uZyB3aXRoIHRoZWlyIHR5cGVzIGFuZCBkZWZhdWx0IHZhbHVlcy4g
VGhlIG9wdGlvbnMgdmFsdWVzIGFyZSBhY3R1YWxseQorLy8gcmVhbGl6ZWQgYXMgYW4gYXJyYXkg
b2YgT3B0aW9uczo6RW50cnkgZWxlbWVudHMuCisvLworLy8gICAgIE9wdGlvbnM6OmluaXRpYWxp
emUoKSB3aWxsIGluaXRpYWxpemUgdGhlIGFycmF5IG9mIG9wdGlvbnMgdmFsdWVzIHdpdGgKKy8v
IHRoZSBkZWZhdWx0cyBzcGVjaWZpZWQgaW4gSlNDX09QVElPTlMoKSBiZWxvdy4gQWZ0ZXIgdGhh
dCwgdGhlIHZhbHVlcyBjYW4KKy8vIGJlIHByb2dyYW1tYXRpY2FsbHkgcmVhZCBhbmQgd3JpdHRl
biB0byB1c2luZyBhbiBhY2Nlc3NvciBtZXRob2Qgd2l0aCB0aGUKKy8vIHNhbWUgbmFtZSBhcyB0
aGUgb3B0aW9uLiBGb3IgZXhhbXBsZSwgdGhlIG9wdGlvbiAidXNlSklUIiBjYW4gYmUgcmVhZCBh
bmQKKy8vIHNldCBsaWtlIHNvOgorLy8KKy8vICAgICBib29sIGppdElzT24gPSBPcHRpb25zOjp1
c2VKSVQoKTsgIC8vIEdldCB0aGUgb3B0aW9uIHZhbHVlLgorLy8gICAgIE9wdGlvbnM6OnVzZUpJ
VCgpID0gZmFsc2U7ICAgICAgICAgLy8gU2V0cyB0aGUgb3B0aW9uIHZhbHVlLgorLy8KKy8vICAg
ICBJZiB5b3Ugd2FudCB0byB0d2VhayBhbnkgb2YgdGhlc2UgdmFsdWVzIHByb2dyYW1tYXRpY2Fs
bHkgZm9yIHRlc3RpbmcKKy8vIHB1cnBvc2VzLCB5b3UgY2FuIGRvIHNvIGluIE9wdGlvbnM6Omlu
aXRpYWxpemUoKSBhZnRlciB0aGUgZGVmYXVsdCB2YWx1ZXMKKy8vIGFyZSBzZXQuCisvLworLy8g
ICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZW5hYmxlIFJVTl9USU1FX0hFVVJJU1RJQ1Mgd2hp
Y2ggd2lsbCBhbGxvdyB5b3UKKy8vIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlcyBieSBz
cGVjaWZ5aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBvZiB0aGUKKy8vIGZvcm06IEpTQ188bmFt
ZSBvZiBKU0Mgb3B0aW9uPi4KKy8vCisvLyBOb3RlOiBPcHRpb25zOjppbml0aWFsaXplKCkgdHJp
ZXMgdG8gZW5zdXJlIHNvbWUgc2FuaXR5IG9uIHRoZSBvcHRpb24gdmFsdWVzCisvLyB3aGljaCBh
cmUgc2V0IGJ5IGRvaW5nIHNvbWUgcmFuZ2UgY2hlY2tzLCBhbmQgdmFsdWUgY29ycmVjdGlvbnMu
IFRoZXNlCisvLyBjaGVja3MgYXJlIGRvbmUgYWZ0ZXIgdGhlIG9wdGlvbiB2YWx1ZXMgYXJlIHNl
dC4gSWYgeW91IGFsdGVyIHRoZSBvcHRpb24KKy8vIHZhbHVlcyBhZnRlciB0aGUgc2FuaXR5IGNo
ZWNrcyAoZm9yIHlvdXIgb3duIHRlc3RpbmcpLCB0aGVuIHlvdSdyZSBsaWFibGUgdG8KKy8vIGVu
c3VyZSB0aGF0IHRoZSBuZXcgdmFsdWVzIHNldCBhcmUgc2FuZSBhbmQgcmVhc29uYWJsZSBmb3Ig
eW91ciBvd24gcnVuLgorCisKKyNkZWZpbmUgSlNDX09QVElPTlModikgXAorICAgIHYoYm9vbCwg
dXNlSklULCAgICB0cnVlKSBcCisgICAgdihib29sLCB1c2VERkdKSVQsIHRydWUpIFwKKyAgICBc
CisgICAgLyogc2hvd0Rpc2Fzc2VtYmx5IGltcGxpZXMgc2hvd0RGR0Rpc2Fzc2VtYmx5LiAqLyBc
CisgICAgdihib29sLCBzaG93RGlzYXNzZW1ibHksIGZhbHNlKSBcCisgICAgdihib29sLCBzaG93
REZHRGlzYXNzZW1ibHksIGZhbHNlKSBcCisgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1P
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDAwMCkgXAorICAgIFwKKyAg
ICB2KHVuc2lnbmVkLCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudCwgMTgwKSBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bUZ1bmN0aW9uRm9yQ29u
c3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKSBcCisgICAgXAorICAg
IC8qIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25lIGxl
dmVsLCBldGMuICovIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdEZXB0aCwgNSkg
XAorICAgIFwKKyAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgMTAwKSBc
CisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9ySklUU29vbiwgMTAwKSBcCisgICAgXAorICAgIHYo
aW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAsIDEwMDApIFwKKyAgICB2KGlu
dDMyLCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgNTAwMCkgXAorICAgIHYo
aW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplU29vbiwgMTAwMCkgXAorICAgIFwKKyAgICB2KGlu
dDMyLCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgMSkgXAorICAgIHYoaW50MzIs
IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KSBcCisgICAgXAorICAgIHYo
Ym9vbCwgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSkg
XAorICAgIHYoaW50MzIsIG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMs
IDEwMDApIFwKKyAgICBcCisgICAgdihkb3VibGUsIGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNo
b2xkLCAwLjE1KSBcCisgICAgdihkb3VibGUsIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAw
LjA1KSBcCisgICAgdih1bnNpZ25lZCwgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQs
IDEwMCkgXAorICAgIHYodW5zaWduZWQsIGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50LCAx
MCkgXAorICAgIFwKKyAgICB2KGRvdWJsZSwgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4
aXRTaXRlLCAwLjMpIFwKKyAgICB2KHVuc2lnbmVkLCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXph
dGlvbiwgMTAwKSBcCisgICAgdih1bnNpZ25lZCwgb3NyRXhpdENvdW50Rm9yUmVvcHRpbWl6YXRp
b25Gcm9tTG9vcCwgNSkgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCwgMCkgIFwKKyAgICB2KHVuc2lnbmVkLCByZW9wdGltaXphdGlvblJldHJ5
Q291bnRlclN0ZXAsIDEpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgbWluaW11bU9wdGltaXph
dGlvbkRlbGF5LCAxKSBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5
LCA1KSBcCisgICAgdihkb3VibGUsIGRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlLCAwLjc1KSBc
CisgICAgdihkb3VibGUsIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlLCAwLjM1KSBcCisgICAg
XAorICAgIHYoZG91YmxlLCBkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQsIDIpIFwKKyAg
ICBcCisgICAgdih1bnNpZ25lZCwgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNl
LCAxMDApIFwKKyAgICB2KHVuc2lnbmVkLCBnY01hcmtTdGFja1NlZ21lbnRTaXplLCBwYWdlU2l6
ZSgpKSBcCisgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZHQ01hcmtlcnMsIGNvbXB1dGVOdW1iZXJP
ZkdDTWFya2Vycyg3KSkgXAorICAgIHYodW5zaWduZWQsIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9s
ZCwgMTAwMCkgXAorICAgIFwKKyAgICB2KGJvb2wsIGZvcmNlV2Vha1JhbmRvbVNlZWQsIGZhbHNl
KSBcCisgICAgdih1bnNpZ25lZCwgZm9yY2VkV2Vha1JhbmRvbVNlZWQsIDApCisKKworY2xhc3Mg
T3B0aW9ucyB7CitwdWJsaWM6CisgICAgLy8gVGhpcyB0eXBlZGVmIGlzIHRvIGFsbG93IHVzIHRv
IGVsaW1pbmF0ZSB0aGUgJ18nIGluIHRoZSBmaWVsZCBuYW1lIGluCisgICAgLy8gdW5pb24gaW5z
aWRlIEVudHJ5LiBUaGlzIGlzIG5lZWRlZCB0byBrZWVwIHRoZSBzdHlsZSBjaGVja2VyIGhhcHB5
LgorICAgIHR5cGVkZWYgaW50MzJfdCBpbnQzMjsKKworICAgIC8vIERlY2xhcmUgdGhlIG9wdGlv
biBJRHM6CisgICAgZW51bSBPcHRpb25JRCB7CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBl
XywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICAgICAgT1BUXyMjbmFtZV8sCisgICAgICAg
IEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04KKyAg
ICAgICAgbnVtYmVyT2ZPcHRpb25zCisgICAgfTsKKworCisgICAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZSgpOworCisgICAgLy8gUGFyc2VzIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBvcHRpb24gaW4g
dGhlIGZvcm1hdCAiPG9wdGlvbk5hbWU+PTx2YWx1ZT4iCisgICAgLy8gKG5vIHNwYWNlcyBhbGxv
d2VkKSBhbmQgc2V0IHRoZSBzcGVjaWZpZWQgb3B0aW9uIGlmIGFwcHJvcHJpYXRlLgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHNldE9wdGlvbihjb25zdCBjaGFyKiBhcmcpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGR1bXBBbGxPcHRpb25zKEZJTEUqIHN0
cmVhbSA9IHN0ZG91dCk7CisgICAgc3RhdGljIHZvaWQgZHVtcE9wdGlvbihPcHRpb25JRCBpZCwg
RklMRSogc3RyZWFtID0gc3Rkb3V0LCBjb25zdCBjaGFyKiBoZWFkZXIgPSAiIiwgY29uc3QgY2hh
ciogZm9vdGVyID0gIiIpOworCisgICAgLy8gRGVjbGFyZSBhY2Nlc3NvcnMgZm9yIGVhY2ggb3B0
aW9uOgorI2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVf
KSBcCisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdHlwZV8mIG5hbWVfKCkgeyByZXR1cm4gc19v
cHRpb25zW09QVF8jI25hbWVfXS51LnR5cGVfIyNWYWw7IH0KKworICAgIEpTQ19PUFRJT05TKEZP
Ul9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04KKworcHJpdmF0ZToKKyAgICBl
bnVtIEVudHJ5VHlwZSB7CisgICAgICAgIGJvb2xUeXBlLAorICAgICAgICB1bnNpZ25lZFR5cGUs
CisgICAgICAgIGRvdWJsZVR5cGUsCisgICAgICAgIGludDMyVHlwZQorICAgIH07CisKKyAgICAv
LyBGb3Igc3RvcmluZyBmb3IgYW4gb3B0aW9uIHZhbHVlOgorICAgIHN0cnVjdCBFbnRyeSB7Cisg
ICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbDsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHVuc2lnbmVkVmFsOworICAgICAgICAgICAgZG91YmxlIGRvdWJsZVZhbDsKKyAgICAg
ICAgICAgIGludDMyIGludDMyVmFsOworICAgICAgICB9IHU7CisgICAgfTsKKworICAgIC8vIEZv
ciBzdG9yaW5nIGNvbnN0YW50IG1ldGEgZGF0YSBhYm91dCBlYWNoIG9wdGlvbjoKKyAgICBzdHJ1
Y3QgRW50cnlJbmZvIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgRW50cnlU
eXBlIHR5cGU7CisgICAgfTsKKworICAgIE9wdGlvbnMoKTsKKworICAgIC8vIERlY2xhcmUgdGhl
IG9wdGlvbnM6CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRW
YWx1ZV8pIFwKKyAgICB0eXBlXyBtXyMjbmFtZV87CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hf
T1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorCisgICAgLy8gRGVjbGFyZSB0aGUgc2lu
Z2xldG9uIGluc3RhbmNlIG9mIHRoZSBvcHRpb25zIHN0b3JlOgorICAgIEpTX0VYUE9SVERBVEEg
c3RhdGljIEVudHJ5IHNfb3B0aW9uc1tudW1iZXJPZk9wdGlvbnNdOworICAgIHN0YXRpYyBjb25z
dCBFbnRyeUluZm8gc19vcHRpb25zSW5mb1tudW1iZXJPZk9wdGlvbnNdOworfTsKIAotZXh0ZXJu
IGJvb2wgc2hvd0Rpc2Fzc2VtYmx5OwotZXh0ZXJuIGJvb2wgc2hvd0RGR0Rpc2Fzc2VtYmx5OyAv
LyBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuCi0KLWV4dGVybiB1
bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQot
ZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OwotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVj
dElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci0KLWV4dGVybiB1bnNpZ25lZCBtYXhp
bXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5s
aW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KLQotZXh0ZXJuIGludDMyX3QgdGhyZXNob2xkRm9y
SklUQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRTb29uOwotCi1l
eHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwotZXh0ZXJuIGlu
dDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1leHRlcm4gaW50MzJf
dCB0aHJlc2hvbGRGb3JPcHRpbWl6ZVNvb247Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JP
cHRpbWl6ZU5leHRJbnZvY2F0aW9uOwotCi1leHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVy
SW5jcmVtZW50Rm9yTG9vcDsKLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1l
bnRGb3JSZXR1cm47Ci0KLWV4dGVybiBib29sIHJhbmRvbWl6ZUV4ZWN1dGlvbkNvdW50c0JldHdl
ZW5DaGVja3BvaW50czsKLWV4dGVybiBpbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3
ZWVuQ2hlY2twb2ludHM7Ci0KLWV4dGVybiBkb3VibGUgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJl
c2hvbGQ7Ci1leHRlcm4gZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwotZXh0ZXJu
IHVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotZXh0ZXJuIHVuc2ln
bmVkIGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotCi1leHRlcm4gZG91YmxlIG9zckV4
aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZTsKLWV4dGVybiB1bnNpZ25lZCBvc3JFeGl0
Q291bnRGb3JSZW9wdGltaXphdGlvbjsKLWV4dGVybiB1bnNpZ25lZCBvc3JFeGl0Q291bnRGb3JS
ZW9wdGltaXphdGlvbkZyb21Mb29wOwotCi1leHRlcm4gdW5zaWduZWQgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXJNYXg7Ci1leHRlcm4gdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXJTdGVwOwotCi1leHRlcm4gdW5zaWduZWQgbWluaW11bU9wdGltaXphdGlvbkRlbGF5OwotZXh0
ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25EZWxheTsKLWV4dGVybiBkb3VibGUgZGVz
aXJlZFByb2ZpbGVMaXZlbmVzc1JhdGU7Ci1leHRlcm4gZG91YmxlIGRlc2lyZWRQcm9maWxlRnVs
bG5lc3NSYXRlOwotCi1leHRlcm4gZG91YmxlIGRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1h
dDsKLQotZXh0ZXJuIHVuc2lnbmVkIG1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZTsKLWV4dGVybiB1bnNpZ25lZCBnY01hcmtTdGFja1NlZ21lbnRTaXplOwotSlNfRVhQT1JUREFU
QSBleHRlcm4gdW5zaWduZWQgbnVtYmVyT2ZHQ01hcmtlcnM7Ci1KU19FWFBPUlREQVRBIGV4dGVy
biB1bnNpZ25lZCBvcGFxdWVSb290TWVyZ2VUaHJlc2hvbGQ7Ci0KLWV4dGVybiBib29sIGZvcmNl
V2Vha1JhbmRvbVNlZWQ7Ci1leHRlcm4gdW5zaWduZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7Ci0K
LXZvaWQgaW5pdGlhbGl6ZU9wdGlvbnMoKTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6Ok9wdGlv
bnMKK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3B0aW9uc19oCi0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAko
d29ya2luZyBjb3B5KQpAQCAtODg3LDYgKzg4NywxMCBAQAogI2RlZmluZSBFTkFCTEVfRElTQVNT
RU1CTEVSIDEKICNlbmRpZgogCisvLyBtbGFtIEJFR0lOCisjZGVmaW5lIEVOQUJMRV9MTElOVF9D
UExVU1BMVVNfQkFDS0VORCAxCisvLyBtbGFtIEVORAorCiAvKiBPbiBzb21lIG9mIHRoZSBwbGF0
Zm9ybXMgd2hlcmUgd2UgaGF2ZSBhIEpJVCwgd2Ugd2FudCB0byBhbHNvIGhhdmUgdGhlIAogICAg
bG93LWxldmVsIGludGVycHJldGVyLiAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9MTElOVCkgXAo=
</data>
<flag name="commit-queue"
          id="158820"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150556</attachid>
            <date>2012-07-03 01:23:13 -0700</date>
            <delta_ts>2012-07-03 01:34:55 -0700</delta_ts>
            <desc>rev 4: one more change to defer option dumping and exiting till after all options have been parsed.</desc>
            <filename>bug-90420-rev4.patch</filename>
            <type>text/plain</type>
            <size>50611</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTYyMSw2ICs2MjYsOSBAQCBz
dGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRlbWVuCiBzdGF0aWMgdm9pZCBwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YsIENvbW1hbmRMaW5lJiBvcHRpb25zKQog
ewogICAgIGludCBpID0gMTsKKyAgICBib29sIG5lZWRUb0R1bXBPcHRpb25zID0gZmFsc2U7Cisg
ICAgYm9vbCBuZWVkVG9FeGl0ID0gZmFsc2U7CisKICAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkg
ewogICAgICAgICBjb25zdCBjaGFyKiBhcmcgPSBhcmd2W2ldOwogICAgICAgICBpZiAoIXN0cmNt
cChhcmcsICItZiIpKSB7CkBAIC02NjIsNiArNjcwLDI2IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJn
dW1lbnRzKGludCBhcmdjLCBjaGEKICAgICAgICAgfQogICAgICAgICBpZiAoIXN0cmNtcChhcmcs
ICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCiAgICAgICAgICAgICBwcmludFVzYWdl
U3RhdGVtZW50KHRydWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi0tb3B0aW9ucyIp
KSB7CisgICAgICAgICAgICBuZWVkVG9EdW1wT3B0aW9ucyA9IHRydWU7CisgICAgICAgICAgICBu
ZWVkVG9FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi0tZHVtcE9wdGlvbnMiKSkgeworICAgICAgICAgICAgbmVl
ZFRvRHVtcE9wdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTZWUgaWYgdGhlIC0tIG9wdGlvbiBpcyBhIEpTQyBWTSBvcHRpb24uCisg
ICAgICAgIC8vIE5PVEU6IEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgYXJnIHN0YXJ0
cyB3aXRoICItLSIuIFNraXAgaXQuCisgICAgICAgIGlmIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlv
bigmYXJnWzJdKSkgeworICAgICAgICAgICAgLy8gVGhlIGFyZyB3YXMgcmVjb2duaXplZCBhcyBh
IFZNIG9wdGlvbiBhbmQgaGFzIGJlZW4gcGFyc2VkLgorICAgICAgICAgICAgY29udGludWU7IC8v
IEp1c3QgY29udGludWUgd2l0aCB0aGUgbmV4dCBhcmcuIAorICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGhpcyBhcmcgaXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIFZNIG5vciBieSBqc2MuIFBhc3Mg
aXQgb24gdG8gdGhlCisgICAgICAgIC8vIHNjcmlwdC4KICAgICAgICAgb3B0aW9ucy5zY3JpcHRz
LmFwcGVuZChTY3JpcHQodHJ1ZSwgYXJndltpXSkpOwogICAgIH0KIApAQCAtNjcwLDYgKzY5OCwx
MSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKICAgICBmb3Ig
KDsgaSA8IGFyZ2M7ICsraSkKICAgICAgICAgb3B0aW9ucy5hcmd1bWVudHMuYXBwZW5kKGFyZ3Zb
aV0pOworCisgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQorICAgICAgICBKU0M6Ok9wdGlvbnM6
OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CisgICAgaWYgKG5lZWRUb0V4aXQpCisgICAgICAgIGV4
aXQoRVhJVF9TVUNDRVNTKTsKIH0KIAogaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIExpbmtCdWZm
ZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemUKIAogTGlua0J1ZmZlcjo6Q29kZVJlZiBM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0
LCAuLi4pCiB7Ci0gICAgQVNTRVJUKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSB8fCBPcHRpb25z
OjpzaG93REZHRGlzYXNzZW1ibHkpOworICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1i
bHkoKSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSk7CiAgICAgCiAgICAgQ29kZVJl
ZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lv
biAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHByaXZhdGU6CiAvLyBpcyB0cnVl
LCBzbyB5b3UgY2FuIGhpZGUgZXhwZW5zaXZlIGRpc2Fzc2VtYmx5LW9ubHkgY29tcHV0YXRpb25z
IGluc2lkZSB0aGVyZS4KIAogI2RlZmluZSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXJSZWZlcmVu
Y2UsIGRhdGFMb2dBcmd1bWVudHNGb3JIZWFkaW5nKSAgXAotICAgIEZJTkFMSVpFX0NPREVfSUYo
T3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5LCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nQXJn
dW1lbnRzRm9ySGVhZGluZykKKyAgICBGSU5BTElaRV9DT0RFX0lGKE9wdGlvbnM6OnNob3dEaXNh
c3NlbWJseSgpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGlu
ZykKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3
MSw3ICsyNzcxLDcgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBk
dW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCiAKLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxh
eUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkRlbGF5KQorICAgIGlmICht
X29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9u
RGVsYXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOwpAQCAtMjc4Miw5ICsyNzgyLDkgQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBkYXRhTG9nKCJQcm9maWxlIGhv
dG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFs
dWVQcm9maWxlcygpKTsKICNlbmRpZgogCi0gICAgaWYgKCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0
ZSkKLSAgICAgICAgJiYgKCF0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUp
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRz
IC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmls
ZUZ1bGxuZXNzUmF0ZSkKLSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRl
bGF5KQorICAgIGlmICgoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkg
Pj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKKyAgICAgICAgJiYgKCF0
b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZh
bHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQor
ICAgICAgICAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIpICsgMSA+PSBPcHRpb25zOjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCiAgICAgQVNTRVJUKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
IDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTIxNzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NzEsNyArNjcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51
bWJlck9mUmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFs
dWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6
bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUg
Pj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNf
Y2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjps
aWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKQEAgLTY3OSw3
ICs2NzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZSYXJl
Q2FzZVByb2ZpbGVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRp
b25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93
Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3Vs
ZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUp
IC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlVGhy
ZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSog
YWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02OTksNyAr
Njk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9mUmFyZUNh
c2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAg
cmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50ICYmIHN0YXRpY19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291
bnQpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dD
YXNlVGhyZXNob2xkOworICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49
IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzcGVjaWFsRmFzdENhc2VDb3VudCkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQg
Pj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5
dGVjb2RlT2Zmc2V0KQpAQCAtNzA5LDcgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
c3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHNsb3dDYXNlQ291bnQgLSBzcGVjaWFsRmFzdENhc2VDb3VudDsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+
PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgp
ICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49
IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlQW55U2xvd0Nhc2UoaW50IGJ5dGVjb2Rl
T2Zmc2V0KQpAQCAtNzE5LDcgKzcxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
dW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lh
bEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9
IHNsb3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudDsKLSAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRp
b25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHVuc2lnbmVkIGV4ZWN1dGlvbkVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2V4ZWN1dGlvbkVudHJ5Q291bnQ7IH0KQEAgLTk0MSwxMiArOTQxLDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAsIHRoaXMpOworICAgICAgICAgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBq
aXRTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uLCB0aGlzKTsKKyAgICAg
ICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9ySklUU29vbigpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Y29uc3QgRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CkBAIC05
NzcsMjUgKzk3NywyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gdG8gYXZvaWQgdGhy
YXNoaW5nLgogICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNv
bnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KTsKKyAgICAg
ICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgY291bnRSZW9wdGltaXphdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCi0g
ICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IE9wdGlvbnM6OnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OworICAgICAgICAgICAgaWYgKG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIgPiBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1h
eCgpKQorICAgICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRp
b25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA8PCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSA8
PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpbnQzMl90KiBhZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpCkBAIC0xMDc1LDcgKzEw
NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUu
CiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9q
aXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0
aW1pemVTb29uIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIHRoaXMpOworICAgICAg
ICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgdGhp
cyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVy
KCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQpAQCAtMTEwNCwxMiArMTEwNCwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3Vu
dFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJl
b3B0aW1pemF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbigpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRp
bWl6YXRpb25Gcm9tTG9vcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZGp1c3Rl
ZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlv
bkZyb21Mb29wKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9s
ZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlv
bkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFQgdGhyZXNob2xkKQogICAgIHsKICAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAg
ICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21J
bnRlZ2VyKCkgJSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9p
bnRzOworICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2Vl
bkNoZWNrcG9pbnRzKCkpCisgICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3Qt
PndlYWtSYW5kb21JbnRlZ2VyKCkgJSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9s
ZCA9IE9wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Cisg
ICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hv
bGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVy
biB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNyAr
MTI3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB1
bnNpZ25lZCBkZXB0aCA9IDA7CiAgICAgZm9yIChJbmxpbmVTdGFja0VudHJ5KiBlbnRyeSA9IG1f
aW5saW5lU3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5tX2NhbGxlcikgewogICAgICAg
ICArK2RlcHRoOwotICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5n
RGVwdGgpCisgICAgICAgIGlmIChkZXB0aCA+PSBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0
aCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KICAgICAg
ICAgCiAgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9u
IDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDI5ICs0MSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAvLyBjaGVjayBvcGNvZGVzLgogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZh
bChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7
CiB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25z
OjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKIH0KIGlubGluZSBib29sIG1pZ2h0
Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlv
bkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVj
dGlvbkNvdW50KCk7CiB9CiAKIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudAorICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudCgpCiAgICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5uZWVkc0FjdGl2YXRpb24oKTsKIH0KIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCiAgICAgICAgICYmICFjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NyArMTM2LDcgQEAgZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbgogCiBp
bmxpbmUgYm9vbCBzaG91bGRTaG93RGlzYXNzZW1ibHkoKQogewotICAgIHJldHVybiBPcHRpb25z
OjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5OworICAgIHJl
dHVybiBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNz
ZW1ibHkoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTYwLDcgKzYxLDEwIEBAIGlubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIAorCisg
ICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcg
Y29kZSBibG9jayAlcCglcCkgZm9yIGV4ZWN1dGFibGUgJXAsIG51bWJlciBvZiBpbnN0cnVjdGlv
bnMgPSAldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklM
RSogb3V0KSBjb25zdAogCiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jaykKIHsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0Nv
ZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSA8PSBPcHRpb25zOjpvc3JFeGl0UHJvbWluZW5jZUZv
ckZyZXF1ZW50RXhpdFNpdGUpCisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkg
LyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21p
bmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxMjE3MTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgLy8gSWYgdGhlIHZhcmlhYmxlIGhhcyBiZWVuIHZvdGVkIHRvIGJlY29tZSBhIGRvdWJsZSwg
dGhlbiBtYWtlIGl0IGEKICAgICAgICAgLy8gZG91YmxlLgotICAgICAgICBpZiAoZG91YmxlVm90
ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0KQorICAg
ICAgICBpZiAoZG91YmxlVm90ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJhdGlvRm9y
RG91YmxlRm9ybWF0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBNYXJrU3RhY2tT
ZWdtZW50KiBNYXJrU3RhY2tTZWdtZW50QWxsb2NhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TWFya1N0YWNrU2VnbWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZl
QW5kQ29tbWl0KE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWFya1N0YWNrU2VnbWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29t
bWl0KE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUoKSkpOwogfQogCiB2b2lkIE1hcmtT
dGFja1NlZ21lbnRBbGxvY2F0b3I6OnJlbGVhc2UoTWFya1N0YWNrU2VnbWVudCogc2VnbWVudCkK
QEAgLTg2LDEzICs4NiwxMyBAQCB2b2lkIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNocmlu
a1JlCiAgICAgd2hpbGUgKHNlZ21lbnRzKSB7CiAgICAgICAgIE1hcmtTdGFja1NlZ21lbnQqIHRv
RnJlZSA9IHNlZ21lbnRzOwogICAgICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLT5tX3ByZXZpb3Vz
OwotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9u
czo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSk7CisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1p
dEFuZFJlbGVhc2UodG9GcmVlLCBPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpOwog
ICAgIH0KIH0KIAogTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0FycmF5KE1hcmtTdGFja1NlZ21l
bnRBbGxvY2F0b3ImIGFsbG9jYXRvcikKICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKLSAg
ICAsIG1fc2VnbWVudENhcGFjaXR5KE1hcmtTdGFja1NlZ21lbnQ6OmNhcGFjaXR5RnJvbVNpemUo
T3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSkpCisgICAgLCBtX3NlZ21lbnRDYXBhY2l0
eShNYXJrU3RhY2tTZWdtZW50OjpjYXBhY2l0eUZyb21TaXplKE9wdGlvbnM6OmdjTWFya1N0YWNr
U2VnbWVudFNpemUoKSkpCiAgICAgLCBtX3RvcCgwKQogICAgICwgbV9udW1iZXJPZlByZXZpb3Vz
U2VnbWVudHMoMCkKIHsKQEAgLTI2Miw3ICsyNjIsNyBAQCBNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhOjpNYXJrU3RhY2tUaHJlCiAgICAgLCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFs
c2UpCiB7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VyczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAg
ICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwogICAg
ICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90VmlzaXRvcik7CiAgICAg
ICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3Rh
cnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIikpOwpAQCAtMzY4
LDcgKzM2OCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAg
IC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFu
ZCBkb25hdGUuCiAgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjayk7CiAKLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKQorICAgIGlmIChtX3NoYXJlZC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSkKICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwog
fQogCkBAIC0zNzcsMTAgKzM3NywxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCiAgICAg
QVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0Mp
Ci0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID4gMSkgeworICAgIGlmIChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMSkgewogICAgICAgICB3aGlsZSAoIW1fc3RhY2su
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0Jl
dHdlZW5SZWJhbGFuY2U7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYm
IGNvdW50ZG93bi0tOykKICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0
YWNrLnJlbW92ZUxhc3QoKSk7CiAgICAgICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAg
ICAgICAgIH0KQEAgLTQwMSwxNCArNDAxLDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJv
bVNoYXJlZChTaGFyZWQKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAK
LSAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMpOworICAgIEFTU0VSVChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKICAgICAKICAgICBib29sIHNob3VsZEJlUGFyYWxs
ZWw7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID4gMTsKKyAgICBzaG91bGRCZVBhcmFsbGVsID0gT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDE7CiAjZWxzZQotICAgIEFTU0VSVChPcHRpb25z
OjpudW1iZXJPZkdDTWFya2VycyA9PSAxKTsKKyAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKSA9PSAxKTsKICAgICBzaG91bGRCZVBhcmFsbGVsID0gZmFsc2U7CiAjZW5kaWYK
ICAgICAKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFy
ZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAK
LSAgICAgICAgICAgIHNpemVfdCBpZGxlVGhyZWFkQ291bnQgPSBPcHRpb25zOjpudW1iZXJPZkdD
TWFya2VycyAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CisgICAg
ICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CiAgICAgICAg
ICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFj
aywgaWRsZVRocmVhZENvdW50KTsKICAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
ZlByb2ZpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRo
cmVzaG9sZCkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVS
b290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogICAg
ICAgICB9CkBAIC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIHZv
aWQgTWFya1N0YWNrOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCiAgICAgewogI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKLSAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09
IDEpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewog
ICAgICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgogICAg
ICAgICAgICAgbV9zaGFyZWQubV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZG9u
YXRlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgICAg
ICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMgPT0gMSkKKyAgICAgICAgaWYgKE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIEpJVDo6ZW1p
dE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wIDogT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIEp1bXAgc2tpcE9wdGltaXpl
ID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0
aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpIDog
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGltaXplKTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCkpOwogICAgIGlmIChraW5k
ID09IEVudGVyT3B0aW1pemF0aW9uQ2hlY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMTIx
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRocmVhZGluZ09uY2UoKQogewogICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBPcHRpb25zOjpp
bml0aWFsaXplT3B0aW9ucygpOworICAgIE9wdGlvbnM6OmluaXRpYWxpemUoKTsKICNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6Omlu
aXRpYWxpemUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3IKICNpZiBF
TkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJM
RShMTElOVCkpCiBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRv
ciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKIHsKLSAgICBpZiAoIWV4ZWN1dGFibGVBbGxvY2F0b3Iu
aXNWYWxpZCgpIHx8ICFPcHRpb25zOjp1c2VKSVQpCisgICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogI2lmIFVTRShDRikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDcgKzExNSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQK
IEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUpCiAgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCiAgICAgLCBtX2dsb2JhbFNjb3Bl
Q2hhaW4oKQotICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQg
PyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAx
LjApKSkKKyAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkKCkg
PyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCgpIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAr
IDEuMCkpKQogICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQogICAgICwgbV9nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDEzIEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJs
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KIAogI2lmIE9TKERBUldJTikgJiYgRU5BQkxFKFBBUkFMTEVMX0dDKQogI2lu
Y2x1ZGUgPHN5cy9zeXNjdGwuaD4KQEAgLTM3LDY3ICs0Miw5IEBACiAvLyBTZXQgdG8gMSB0byBj
b250cm9sIHRoZSBoZXVyaXN0aWNzIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICNkZWZp
bmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMAogCi0jaWYgRU5BQkxFKFJVTl9USU1FX0hF
VVJJU1RJQ1MpCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBPcHRpb25zIHsKLQotYm9vbCB1c2VKSVQ7Ci0KLWJvb2wgc2hvd0Rpc2Fzc2VtYmx5Owot
Ym9vbCBzaG93REZHRGlzYXNzZW1ibHk7Ci0KLXVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25D
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotCi11bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JD
YWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLXVuc2lnbmVkIG1heGltdW1GdW5j
dGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKLXVuc2ln
bmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOworbmFtZXNwYWNlIEpTQyB7CiAKLWludDMyX3QgdGhy
ZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0K
LWludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKLWludDMyX3QgdGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvck9wdGlt
aXplU29vbjsKLQotaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWlu
dDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKLQotYm9vbCByYW5kb21p
emVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Ci1pbnQzMl90IG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Ci0KLWRvdWJsZSBsaWtlbHlUb1Rha2VTbG93
Q2FzZVRocmVzaG9sZDsKLWRvdWJsZSBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKLXVuc2ln
bmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotdW5zaWduZWQgY291bGRUYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0KLWRvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1
ZW50RXhpdFNpdGU7Ci11bnNpZ25lZCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbjsKLXVu
c2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3A7Ci0KLXVuc2lnbmVk
IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OwotdW5zaWduZWQgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXJTdGVwOwotCi11bnNpZ25lZCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci11
bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci1kb3VibGUgZGVzaXJlZFByb2ZpbGVM
aXZlbmVzc1JhdGU7Ci1kb3VibGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0KLWRvdWJs
ZSBkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQ7Ci0KLXVuc2lnbmVkIG1pbmltdW1OdW1i
ZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZTsKLXVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNp
emU7Ci11bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKLXVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJn
ZVRocmVzaG9sZDsKLQotYm9vbCBmb3JjZVdlYWtSYW5kb21TZWVkOwotdW5zaWduZWQgZm9yY2Vk
V2Vha1JhbmRvbVNlZWQ7Ci0KLSNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKIHN0YXRp
YyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7CiAgICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJ5ZXMi
KSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgewpAQCAtMTI2LDI3ICs3MywyMiBAQCBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGRvCiAgICAgcmV0dXJuIHNzY2FuZihzdHJp
bmcsICIlbGYiLCAmdmFsdWUpID09IDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+Ci12b2lkIHNldEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSwg
VSB2YWx1ZSkKKyNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIG92ZXJyaWRlT3B0aW9uV2l0aEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29u
c3QgY2hhciogbmFtZSkKIHsKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihu
YW1lKTsKLSAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7Ci0gICAgICAgIHZhcmlhYmxlID0gc2FmZUNh
c3Q8VD4odmFsdWUpOworICAgIGlmICghc3RyaW5nVmFsdWUpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAgICAgCiAgICAgaWYgKHBhcnNlKHN0cmluZ1ZhbHVlLCB2YXJpYWJsZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBw
YXJzZSAlcz0lc1xuIiwgbmFtZSwgc3RyaW5nVmFsdWUpOwotICAgIHZhcmlhYmxlID0gc2FmZUNh
c3Q8VD4odmFsdWUpOwogfQotCi0jZGVmaW5lIFNFVCh2YXJpYWJsZSwgdmFsdWUpIHNldEhldXJp
c3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2YXJpYWJsZSwgdmFsdWUpCi0jZWxzZQotI2RlZmluZSBT
RVQodmFyaWFibGUsIHZhbHVlKSB2YXJpYWJsZSA9IHZhbHVlCiAjZW5kaWYKIAorCiBzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKGludCBtYXhOdW1iZXJPZkdDTWFya2Vy
cykKIHsKICAgICBpbnQgY3B1c1RvVXNlID0gMTsKQEAgLTE2Myw3NiArMTA1LDExNCBAQCBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzCiAgICAgcmV0dXJuIGNwdXNUb1Vz
ZTsKIH0KIAotdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCi17Ci0gICAgU0VUKHVzZUpJVCwgdHJ1
ZSk7Ci0gICAgCi0gICAgU0VUKHNob3dEaXNhc3NlbWJseSwgZmFsc2UpOwotICAgIFNFVChzaG93
REZHRGlzYXNzZW1ibHksIGZhbHNlKTsgLy8gREZHIGRpc2Fzc2VtYmx5IGlzIHNob3duIGlmIHNo
b3dEaXNhc3NlbWJseSB8fCBzaG93REZHRGlzYXNzZW1ibHkKLSAgICAKLSAgICBTRVQobWF4aW11
bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKTsKLSAgICAKLSAg
ICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQsIDE4MCk7Ci0gICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCk7Ci0gICAgCi0gICAgU0VUKG1heGltdW1Jbmxpbmlu
Z0RlcHRoLCA1KTsKLQotICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEw
MCk7Ci0gICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKIAotICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7Ci0gICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKTsKLSAgICBTRVQodGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEwMDApOworT3B0aW9uczo6RW50cnkg
T3B0aW9uczo6c19vcHRpb25zW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc107CiAKLSAgICBTRVQo
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsICAgMSk7Ci0gICAgU0VUKGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KTsKLSAgICAKLSAgICBTRVQocmFuZG9taXpl
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSk7Ci0gICAgU0VUKG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIDEwMDApOworLy8gUmVhbGl6ZSB0
aGUgbmFtZXMgZm9yIGVhY2ggb2YgdGhlIG9wdGlvbnM6Citjb25zdCBPcHRpb25zOjpFbnRyeUlu
Zm8gT3B0aW9uczo6c19vcHRpb25zSW5mb1tPcHRpb25zOjpudW1iZXJPZk9wdGlvbnNdID0gewor
I2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSBcCisg
ICAgeyAjbmFtZV8sIE9wdGlvbnM6OnR5cGVfIyNUeXBlIH0sCisgICAgSlNDX09QVElPTlMoRk9S
X0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorfTsKKwordm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKK3sKKyAgICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMg
d2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVf
LCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIG5hbWVfKCkgPSBkZWZhdWx0VmFsdWVfOwor
ICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04K
KworICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZhcnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBh
cHBsaWNhYmxlLgorICAgIC8vIFRoZSBldm4gdmFyIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUg
b3B0aW9uIHByZWZpeGVkIHdpdGgKKyAgICAvLyAiSlNDXyIuCisjaWYgRU5BQkxFKFJVTl9USU1F
X0hFVVJJU1RJQ1MpCisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1
bHRWYWx1ZV8pIFwKKyAgICBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMobmFtZV8oKSwgIkpT
Q18iICNuYW1lXyk7CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZP
Ul9FQUNIX09QVElPTgorICAgIAorI2VuZGlmIC8vIFJVTl9USU1FX0hFVVJJU1RJQ1MKKworICAg
IC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8g
dGhlIG9wdGlvbnM6CisgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKKyAgICBBU1NFUlQo
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbigpKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49
IDApOwogCi0gICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAwLjE1KTsK
LSAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91
bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cg
Y2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KLSAgICBTRVQobGlrZWx5
VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50LCAgICAxMCk7Ci0gICAgCi0gICAgU0VUKG9zckV4aXRQcm9taW5lbmNl
Rm9yRnJlcXVlbnRFeGl0U2l0ZSwgIDAuMyk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uLCAgICAgICAgIDEwMCk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1p
emF0aW9uRnJvbUxvb3AsIDUpOwotCi0gICAgU0VUKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
U3RlcCwgMSk7Ci0KLSAgICBTRVQobWluaW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDEpOwotICAg
IFNFVChtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksICAgNSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9m
aWxlTGl2ZW5lc3NSYXRlLCAwLjc1KTsKLSAgICBTRVQoZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1Jh
dGUsIDAuMzUpOwotICAgIAotICAgIFNFVChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQs
IDIpOwotICAgIAotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Us
IDEwMCk7Ci0gICAgU0VUKGdjTWFya1N0YWNrU2VnbWVudFNpemUsICAgICAgICAgICAgICAgcGFn
ZVNpemUoKSk7Ci0gICAgU0VUKG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCwgICAgICAgICAgICAg
MTAwMCk7Ci0gICAgU0VUKG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtl
cnMoNykpOyAvLyBXZSBkb24ndCBzY2FsZSBzbyB3ZWxsIGJleW9uZCA3LgotCi0gICAgQVNTRVJU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwID49IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKHRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAgPj0gMCk7Ci0gICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4
aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBz
aW1wbHkKICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxv
dyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlm
dCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFs
dWUgZW5kcwogICAgIC8vIHVwIGJlaW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJp
YmxlOyBpdCBwcm9iYWJseSB0YWtlcyB1cCB+MTAwIGN5Y2xlcwogICAgIC8vIHRvdGFsIG9uIGEg
MzItYml0IHByb2Nlc3Nvci4KLSAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7
Ci0gICAgd2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpIDw9
IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkKLSAgICAgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKLSAgICAKLSAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPiAwKTsKLSAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKLSAgICAKLSAgICBT
RVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOwotICAgIFNFVChmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCk7CisgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSA9IDA7CisgICAg
d2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCgpKSA8PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSArIDEpKSA8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyPjo6bWF4KCkpKQor
ICAgICAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKys7CisKKyAgICBBU1NFUlQo
KHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpID4gMCk7CisgICAgQVNTRVJU
KChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cCgpKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKSA8PSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyPjo6bWF4KCkpKTsKK30KKworLy8gUGFy
c2VzIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBvcHRpb24gaW4gdGhlIGZvcm1hdCAiPG9wdGlvbk5h
bWU+PTx2YWx1ZT4iCisvLyAobm8gc3BhY2VzIGFsbG93ZWQpIGFuZCBzZXQgdGhlIHNwZWNpZmll
ZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUuCitib29sIE9wdGlvbnM6OnNldE9wdGlvbihjb25zdCBj
aGFyKiBhcmcpCit7CisgICAgLy8gYXJnIHNob3VsZCBsb29rIGxpa2UgdGhpczoKKyAgICAvLyAg
IDxqc2NPcHRpb25OYW1lPj08YXBwcm9wcmlhdGUgdmFsdWU+CisgICAgY29uc3QgY2hhciogZXF1
YWxTdHIgPSBzdHJjaHIoYXJnLCAnPScpOworICAgIGlmICghZXF1YWxTdHIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHZhbHVlU3RyID0gZXF1YWxTdHIgKyAxOwor
CisgICAgLy8gRm9yIGVhY2ggb3B0aW9uLCBjaGVjayBpZiB0aGUgc3BlY2lmeSBhcmcgaXMgYSBt
YXRjaC4gSWYgc28sIHNldCB0aGUgYXJnCisgICAgLy8gaWYgdGhlIHZhbHVlIG1ha2VzIHNlbnNl
LiBPdGhlcndpc2UsIG1vdmUgb24gdG8gY2hlY2tpbmcgdGhlIG5leHQgb3B0aW9uLgorI2RlZmlu
ZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSAgICBcCisgICAg
aWYgKCFzdHJuY21wKGFyZywgI25hbWVfLCBlcXVhbFN0ciAtIGFyZykpIHsgICAgICAgIFwKKyAg
ICAgICAgdHlwZV8gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZSh2YWx1ZVN0ciwgdmFsdWUpOyAgICAgICAgICBc
CisgICAgICAgIGlmIChzdWNjZXNzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIG5hbWVfKCkgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0KKworICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1
bmRlZiBGT1JfRUFDSF9PUFRJT04KKworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIG9wdGlv
biBtYXRjaGVkLgogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwordm9pZCBPcHRp
b25zOjpkdW1wQWxsT3B0aW9ucyhGSUxFKiBzdHJlYW0pCit7CisgICAgZnByaW50ZihzdHJlYW0s
ICJKU0MgcnVudGltZSBvcHRpb25zOlxuIik7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IG51
bWJlck9mT3B0aW9uczsgaWQrKykKKyAgICAgICAgZHVtcE9wdGlvbihzdGF0aWNfY2FzdDxPcHRp
b25JRD4oaWQpLCBzdHJlYW0sICIgICAiLCAiXG4iKTsKK30KKwordm9pZCBPcHRpb25zOjpkdW1w
T3B0aW9uKE9wdGlvbklEIGlkLCBGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGhlYWRlciwgY29u
c3QgY2hhciogZm9vdGVyKQoreworICAgIGlmIChpZCA+PSBudW1iZXJPZk9wdGlvbnMpCisgICAg
ICAgIHJldHVybjsgLy8gSWxsZWdhbCBvcHRpb24uCisKKyAgICBmcHJpbnRmKHN0cmVhbSwgIiVz
JXM6ICIsIGhlYWRlciwgc19vcHRpb25zSW5mb1tpZF0ubmFtZSk7CisgICAgc3dpdGNoIChzX29w
dGlvbnNJbmZvW2lkXS50eXBlKSB7CisgICAgY2FzZSBib29sVHlwZToKKyAgICAgICAgZnByaW50
ZihzdHJlYW0sICIlcyIsIHNfb3B0aW9uc1tpZF0udS5ib29sVmFsPyJ0cnVlIjoiZmFsc2UiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB1bnNpZ25lZFR5cGU6CisgICAgICAgIGZwcmludGYo
c3RyZWFtLCAiJXUiLCBzX29wdGlvbnNbaWRdLnUudW5zaWduZWRWYWwpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGRvdWJsZVR5cGU6CisgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJWxmIiwg
c19vcHRpb25zW2lkXS51LmRvdWJsZVZhbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgaW50
MzJUeXBlOgorICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVkIiwgc19vcHRpb25zW2lkXS51Lmlu
dDMyVmFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZwcmludGYoc3RyZWFtLCAiJXMi
LCBmb290ZXIpOworfQogCit9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2NSAr
MjcsMTY1IEBACiAjZGVmaW5lIE9wdGlvbnNfaAogCiAjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBPcHRpb25zIHsKK25h
bWVzcGFjZSBKU0MgewogCi1leHRlcm4gYm9vbCB1c2VKSVQ7CisvLyBIb3cgZG8gSlNDIFZNIG9w
dGlvbnMgd29yaz8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIEpTQ19P
UFRJT05TKCkgbWFjcm8gYmVsb3cgZGVmaW5lcyBhIGxpc3Qgb2YgYWxsIEpTQyBvcHRpb25zIGlu
IHVzZSwKKy8vIGFsb25nIHdpdGggdGhlaXIgdHlwZXMgYW5kIGRlZmF1bHQgdmFsdWVzLiBUaGUg
b3B0aW9ucyB2YWx1ZXMgYXJlIGFjdHVhbGx5CisvLyByZWFsaXplZCBhcyBhbiBhcnJheSBvZiBP
cHRpb25zOjpFbnRyeSBlbGVtZW50cy4KKy8vCisvLyAgICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgp
IHdpbGwgaW5pdGlhbGl6ZSB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB2YWx1ZXMgd2l0aAorLy8gdGhl
IGRlZmF1bHRzIHNwZWNpZmllZCBpbiBKU0NfT1BUSU9OUygpIGJlbG93LiBBZnRlciB0aGF0LCB0
aGUgdmFsdWVzIGNhbgorLy8gYmUgcHJvZ3JhbW1hdGljYWxseSByZWFkIGFuZCB3cml0dGVuIHRv
IHVzaW5nIGFuIGFjY2Vzc29yIG1ldGhvZCB3aXRoIHRoZQorLy8gc2FtZSBuYW1lIGFzIHRoZSBv
cHRpb24uIEZvciBleGFtcGxlLCB0aGUgb3B0aW9uICJ1c2VKSVQiIGNhbiBiZSByZWFkIGFuZAor
Ly8gc2V0IGxpa2Ugc286CisvLworLy8gICAgIGJvb2wgaml0SXNPbiA9IE9wdGlvbnM6OnVzZUpJ
VCgpOyAgLy8gR2V0IHRoZSBvcHRpb24gdmFsdWUuCisvLyAgICAgT3B0aW9uczo6dXNlSklUKCkg
PSBmYWxzZTsgICAgICAgICAvLyBTZXRzIHRoZSBvcHRpb24gdmFsdWUuCisvLworLy8gICAgIElm
IHlvdSB3YW50IHRvIHR3ZWFrIGFueSBvZiB0aGVzZSB2YWx1ZXMgcHJvZ3JhbW1hdGljYWxseSBm
b3IgdGVzdGluZworLy8gcHVycG9zZXMsIHlvdSBjYW4gZG8gc28gaW4gT3B0aW9uczo6aW5pdGlh
bGl6ZSgpIGFmdGVyIHRoZSBkZWZhdWx0IHZhbHVlcworLy8gYXJlIHNldC4KKy8vCisvLyAgICAg
QWx0ZXJuYXRpdmVseSwgeW91IGNhbiBlbmFibGUgUlVOX1RJTUVfSEVVUklTVElDUyB3aGljaCB3
aWxsIGFsbG93IHlvdQorLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIGJ5IHNwZWNp
ZnlpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZQorLy8gZm9ybTogSlNDXzxuYW1lIG9m
IEpTQyBvcHRpb24+LgorLy8KKy8vIE5vdGU6IE9wdGlvbnM6OmluaXRpYWxpemUoKSB0cmllcyB0
byBlbnN1cmUgc29tZSBzYW5pdHkgb24gdGhlIG9wdGlvbiB2YWx1ZXMKKy8vIHdoaWNoIGFyZSBz
ZXQgYnkgZG9pbmcgc29tZSByYW5nZSBjaGVja3MsIGFuZCB2YWx1ZSBjb3JyZWN0aW9ucy4gVGhl
c2UKKy8vIGNoZWNrcyBhcmUgZG9uZSBhZnRlciB0aGUgb3B0aW9uIHZhbHVlcyBhcmUgc2V0LiBJ
ZiB5b3UgYWx0ZXIgdGhlIG9wdGlvbgorLy8gdmFsdWVzIGFmdGVyIHRoZSBzYW5pdHkgY2hlY2tz
IChmb3IgeW91ciBvd24gdGVzdGluZyksIHRoZW4geW91J3JlIGxpYWJsZSB0bworLy8gZW5zdXJl
IHRoYXQgdGhlIG5ldyB2YWx1ZXMgc2V0IGFyZSBzYW5lIGFuZCByZWFzb25hYmxlIGZvciB5b3Vy
IG93biBydW4uCisKKworI2RlZmluZSBKU0NfT1BUSU9OUyh2KSBcCisgICAgdihib29sLCB1c2VK
SVQsICAgIHRydWUpIFwKKyAgICB2KGJvb2wsIHVzZURGR0pJVCwgdHJ1ZSkgXAorICAgIFwKKyAg
ICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICovIFwKKyAg
ICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIHNob3dERkdE
aXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKSBcCisgICAgXAorICAgIHYo
dW5zaWduZWQsIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlv
bkNvdW50LCAxODApIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1
Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDApIFwKKyAgICBcCisgICAgLyog
RGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWws
IGV0Yy4gKi8gXAorICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0RlcHRoLCA1KSBcCisg
ICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCAxMDApIFwKKyAg
ICB2KGludDMyLCB0aHJlc2hvbGRGb3JKSVRTb29uLCAxMDApIFwKKyAgICBcCisgICAgdihpbnQz
MiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgMTAwMCkgXAorICAgIHYoaW50MzIs
IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKSBcCisgICAgdihpbnQz
MiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAxMDAwKSBcCisgICAgXAorICAgIHYoaW50MzIs
IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAxKSBcCisgICAgdihpbnQzMiwgZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpIFwKKyAgICBcCisgICAgdihib29s
LCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlKSBcCisg
ICAgdihpbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAw
MCkgXAorICAgIFwKKyAgICB2KGRvdWJsZSwgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQs
IDAuMTUpIFwKKyAgICB2KGRvdWJsZSwgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMDUp
IFwKKyAgICB2KHVuc2lnbmVkLCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCwgMTAw
KSBcCisgICAgdih1bnNpZ25lZCwgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwKSBc
CisgICAgXAorICAgIHYoZG91YmxlLCBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNp
dGUsIDAuMykgXAorICAgIHYodW5zaWduZWQsIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9u
LCAxMDApIFwKKyAgICB2KHVuc2lnbmVkLCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZy
b21Mb29wLCA1KSBcCisgICAgXAorICAgIHYodW5zaWduZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyTWF4LCAwKSAgXAorICAgIHYodW5zaWduZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyU3RlcCwgMSkgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtaW5pbXVtT3B0aW1pemF0aW9u
RGVsYXksIDEpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksIDUp
IFwKKyAgICB2KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUsIDAuNzUpIFwKKyAg
ICB2KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUsIDAuMzUpIFwKKyAgICBcCisg
ICAgdihkb3VibGUsIGRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdCwgMikgXAorICAgIFwK
KyAgICB2KHVuc2lnbmVkLCBtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEw
MCkgXAorICAgIHYodW5zaWduZWQsIGdjTWFya1N0YWNrU2VnbWVudFNpemUsIHBhZ2VTaXplKCkp
IFwKKyAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NN
YXJrZXJzKDcpKSBcCisgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAx
MDAwKSBcCisgICAgXAorICAgIHYoYm9vbCwgZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwK
KyAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCkKKworCitjbGFzcyBPcHRp
b25zIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIHR5cGVkZWYgaXMgdG8gYWxsb3cgdXMgdG8gZWxp
bWluYXRlIHRoZSAnXycgaW4gdGhlIGZpZWxkIG5hbWUgaW4KKyAgICAvLyB1bmlvbiBpbnNpZGUg
RW50cnkuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIHN0eWxlIGNoZWNrZXIgaGFwcHkuCisg
ICAgdHlwZWRlZiBpbnQzMl90IGludDMyOworCisgICAgLy8gRGVjbGFyZSB0aGUgb3B0aW9uIElE
czoKKyAgICBlbnVtIE9wdGlvbklEIHsKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBu
YW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgICAgICBPUFRfIyNuYW1lXywKKyAgICAgICAgSlND
X09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorICAgICAg
ICBudW1iZXJPZk9wdGlvbnMKKyAgICB9OworCisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
KCk7CisKKyAgICAvLyBQYXJzZXMgYSBzaW5nbGUgY29tbWFuZCBsaW5lIG9wdGlvbiBpbiB0aGUg
Zm9ybWF0ICI8b3B0aW9uTmFtZT49PHZhbHVlPiIKKyAgICAvLyAobm8gc3BhY2VzIGFsbG93ZWQp
IGFuZCBzZXQgdGhlIHNwZWNpZmllZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUuCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0T3B0aW9uKGNvbnN0IGNoYXIqIGFyZyk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcEFsbE9wdGlvbnMoRklMRSogc3RyZWFt
ID0gc3Rkb3V0KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wT3B0aW9uKE9wdGlvbklEIGlkLCBGSUxF
KiBzdHJlYW0gPSBzdGRvdXQsIGNvbnN0IGNoYXIqIGhlYWRlciA9ICIiLCBjb25zdCBjaGFyKiBm
b290ZXIgPSAiIik7CisKKyAgICAvLyBEZWNsYXJlIGFjY2Vzc29ycyBmb3IgZWFjaCBvcHRpb246
CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwK
KyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB0eXBlXyYgbmFtZV8oKSB7IHJldHVybiBzX29wdGlv
bnNbT1BUXyMjbmFtZV9dLnUudHlwZV8jI1ZhbDsgfQorCisgICAgSlNDX09QVElPTlMoRk9SX0VB
Q0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorCitwcml2YXRlOgorICAgIGVudW0g
RW50cnlUeXBlIHsKKyAgICAgICAgYm9vbFR5cGUsCisgICAgICAgIHVuc2lnbmVkVHlwZSwKKyAg
ICAgICAgZG91YmxlVHlwZSwKKyAgICAgICAgaW50MzJUeXBlCisgICAgfTsKKworICAgIC8vIEZv
ciBzdG9yaW5nIGZvciBhbiBvcHRpb24gdmFsdWU6CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAg
ICAgdW5pb24geworICAgICAgICAgICAgYm9vbCBib29sVmFsOworICAgICAgICAgICAgdW5zaWdu
ZWQgdW5zaWduZWRWYWw7CisgICAgICAgICAgICBkb3VibGUgZG91YmxlVmFsOworICAgICAgICAg
ICAgaW50MzIgaW50MzJWYWw7CisgICAgICAgIH0gdTsKKyAgICB9OworCisgICAgLy8gRm9yIHN0
b3JpbmcgY29uc3RhbnQgbWV0YSBkYXRhIGFib3V0IGVhY2ggb3B0aW9uOgorICAgIHN0cnVjdCBF
bnRyeUluZm8geworICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBFbnRyeVR5cGUg
dHlwZTsKKyAgICB9OworCisgICAgT3B0aW9ucygpOworCisgICAgLy8gRGVjbGFyZSB0aGUgb3B0
aW9uczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVl
XykgXAorICAgIHR5cGVfIG1fIyNuYW1lXzsKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJ
T04pCisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAgICAvLyBEZWNsYXJlIHRoZSBzaW5nbGV0
b24gaW5zdGFuY2Ugb2YgdGhlIG9wdGlvbnMgc3RvcmU6CisgICAgSlNfRVhQT1JUREFUQSBzdGF0
aWMgRW50cnkgc19vcHRpb25zW251bWJlck9mT3B0aW9uc107CisgICAgc3RhdGljIGNvbnN0IEVu
dHJ5SW5mbyBzX29wdGlvbnNJbmZvW251bWJlck9mT3B0aW9uc107Cit9OwogCi1leHRlcm4gYm9v
bCBzaG93RGlzYXNzZW1ibHk7Ci1leHRlcm4gYm9vbCBzaG93REZHRGlzYXNzZW1ibHk7IC8vIHNo
b3dEaXNhc3NlbWJseSBpbXBsaWVzIHNob3dERkdEaXNhc3NlbWJseS4KLQotZXh0ZXJuIHVuc2ln
bmVkIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotCi1leHRl
cm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1J
bmxpbmluZ0RlcHRoOyAvLyBEZXB0aCBvZiBpbmxpbmUgc3RhY2ssIHNvIDEgPSBubyBpbmxpbmlu
ZywgMiA9IG9uZSBsZXZlbCwgZXRjLgotCi1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0KLWV4dGVy
biBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJf
dCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKLWV4dGVybiBpbnQzMl90IHRo
cmVzaG9sZEZvck9wdGltaXplU29vbjsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGlt
aXplTmV4dEludm9jYXRpb247Ci0KLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNy
ZW1lbnRGb3JMb29wOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZv
clJldHVybjsKLQotZXh0ZXJuIGJvb2wgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzOwotZXh0ZXJuIGludDMyX3QgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5D
aGVja3BvaW50czsKLQotZXh0ZXJuIGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9s
ZDsKLWV4dGVybiBkb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7Ci1leHRlcm4gdW5z
aWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci1leHRlcm4gdW5zaWduZWQg
Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0KLWV4dGVybiBkb3VibGUgb3NyRXhpdFBy
b21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlOwotZXh0ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3Vu
dEZvclJlb3B0aW1pemF0aW9uOwotZXh0ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uRnJvbUxvb3A7Ci0KLWV4dGVybiB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5
Q291bnRlck1heDsKLWV4dGVybiB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlclN0
ZXA7Ci0KLWV4dGVybiB1bnNpZ25lZCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci1leHRlcm4g
dW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OwotZXh0ZXJuIGRvdWJsZSBkZXNpcmVk
UHJvZmlsZUxpdmVuZXNzUmF0ZTsKLWV4dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVz
c1JhdGU7Ci0KLWV4dGVybiBkb3VibGUgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0Owot
Ci1leHRlcm4gdW5zaWduZWQgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlOwot
ZXh0ZXJuIHVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7Ci1KU19FWFBPUlREQVRBIGV4
dGVybiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKLUpTX0VYUE9SVERBVEEgZXh0ZXJuIHVu
c2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKLQotZXh0ZXJuIGJvb2wgZm9yY2VXZWFr
UmFuZG9tU2VlZDsKLWV4dGVybiB1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9tU2VlZDsKLQotdm9p
ZCBpbml0aWFsaXplT3B0aW9ucygpOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwor
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcHRpb25zX2gKLQpJbmRleDogU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04ODcsNiArODg3LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9ESVNBU1NFTUJM
RVIgMQogI2VuZGlmCiAKKy8vIG1sYW0gQkVHSU4KKyNkZWZpbmUgRU5BQkxFX0xMSU5UX0NQTFVT
UExVU19CQUNLRU5EIDEKKy8vIG1sYW0gRU5ECisKIC8qIE9uIHNvbWUgb2YgdGhlIHBsYXRmb3Jt
cyB3aGVyZSB3ZSBoYXZlIGEgSklULCB3ZSB3YW50IHRvIGFsc28gaGF2ZSB0aGUgCiAgICBsb3ct
bGV2ZWwgaW50ZXJwcmV0ZXIuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0xMSU5UKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150559</attachid>
            <date>2012-07-03 01:42:23 -0700</date>
            <delta_ts>2012-07-03 03:14:56 -0700</delta_ts>
            <desc>rev 5: Added missing #include &quot;JSExportMacros.h&quot; in Options.h.</desc>
            <filename>bug-90420-rev5.patch</filename>
            <type>text/plain</type>
            <size>50659</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTYyMSw2ICs2MjYsOSBAQCBz
dGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRlbWVuCiBzdGF0aWMgdm9pZCBwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YsIENvbW1hbmRMaW5lJiBvcHRpb25zKQog
ewogICAgIGludCBpID0gMTsKKyAgICBib29sIG5lZWRUb0R1bXBPcHRpb25zID0gZmFsc2U7Cisg
ICAgYm9vbCBuZWVkVG9FeGl0ID0gZmFsc2U7CisKICAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkg
ewogICAgICAgICBjb25zdCBjaGFyKiBhcmcgPSBhcmd2W2ldOwogICAgICAgICBpZiAoIXN0cmNt
cChhcmcsICItZiIpKSB7CkBAIC02NjIsNiArNjcwLDI2IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJn
dW1lbnRzKGludCBhcmdjLCBjaGEKICAgICAgICAgfQogICAgICAgICBpZiAoIXN0cmNtcChhcmcs
ICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCiAgICAgICAgICAgICBwcmludFVzYWdl
U3RhdGVtZW50KHRydWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi0tb3B0aW9ucyIp
KSB7CisgICAgICAgICAgICBuZWVkVG9EdW1wT3B0aW9ucyA9IHRydWU7CisgICAgICAgICAgICBu
ZWVkVG9FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi0tZHVtcE9wdGlvbnMiKSkgeworICAgICAgICAgICAgbmVl
ZFRvRHVtcE9wdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTZWUgaWYgdGhlIC0tIG9wdGlvbiBpcyBhIEpTQyBWTSBvcHRpb24uCisg
ICAgICAgIC8vIE5PVEU6IEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgYXJnIHN0YXJ0
cyB3aXRoICItLSIuIFNraXAgaXQuCisgICAgICAgIGlmIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlv
bigmYXJnWzJdKSkgeworICAgICAgICAgICAgLy8gVGhlIGFyZyB3YXMgcmVjb2duaXplZCBhcyBh
IFZNIG9wdGlvbiBhbmQgaGFzIGJlZW4gcGFyc2VkLgorICAgICAgICAgICAgY29udGludWU7IC8v
IEp1c3QgY29udGludWUgd2l0aCB0aGUgbmV4dCBhcmcuIAorICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGhpcyBhcmcgaXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIFZNIG5vciBieSBqc2MuIFBhc3Mg
aXQgb24gdG8gdGhlCisgICAgICAgIC8vIHNjcmlwdC4KICAgICAgICAgb3B0aW9ucy5zY3JpcHRz
LmFwcGVuZChTY3JpcHQodHJ1ZSwgYXJndltpXSkpOwogICAgIH0KIApAQCAtNjcwLDYgKzY5OCwx
MSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKICAgICBmb3Ig
KDsgaSA8IGFyZ2M7ICsraSkKICAgICAgICAgb3B0aW9ucy5hcmd1bWVudHMuYXBwZW5kKGFyZ3Zb
aV0pOworCisgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQorICAgICAgICBKU0M6Ok9wdGlvbnM6
OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CisgICAgaWYgKG5lZWRUb0V4aXQpCisgICAgICAgIGV4
aXQoRVhJVF9TVUNDRVNTKTsKIH0KIAogaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
Y3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIExpbmtCdWZm
ZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6ZmluYWxpemUKIAogTGlua0J1ZmZlcjo6Q29kZVJlZiBM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0
LCAuLi4pCiB7Ci0gICAgQVNTRVJUKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSB8fCBPcHRpb25z
OjpzaG93REZHRGlzYXNzZW1ibHkpOworICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1i
bHkoKSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKSk7CiAgICAgCiAgICAgQ29kZVJl
ZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKTsKICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lv
biAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc5LDcgKzI3OSw3IEBAIHByaXZhdGU6CiAvLyBpcyB0cnVl
LCBzbyB5b3UgY2FuIGhpZGUgZXhwZW5zaXZlIGRpc2Fzc2VtYmx5LW9ubHkgY29tcHV0YXRpb25z
IGluc2lkZSB0aGVyZS4KIAogI2RlZmluZSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXJSZWZlcmVu
Y2UsIGRhdGFMb2dBcmd1bWVudHNGb3JIZWFkaW5nKSAgXAotICAgIEZJTkFMSVpFX0NPREVfSUYo
T3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5LCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nQXJn
dW1lbnRzRm9ySGVhZGluZykKKyAgICBGSU5BTElaRV9DT0RFX0lGKE9wdGlvbnM6OnNob3dEaXNh
c3NlbWJseSgpLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGlu
ZykKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3
MSw3ICsyNzcxLDcgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBk
dW1wVmFsdWVQcm9maWxlcygpOwogI2VuZGlmCiAKLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxh
eUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkRlbGF5KQorICAgIGlmICht
X29wdGltaXphdGlvbkRlbGF5Q291bnRlciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9u
RGVsYXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzOwpAQCAtMjc4Miw5ICsyNzgyLDkgQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBkYXRhTG9nKCJQcm9maWxlIGhv
dG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpLCAoZG91YmxlKW51bWJlck9mU2FtcGxl
c0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFs
dWVQcm9maWxlcygpKTsKICNlbmRpZgogCi0gICAgaWYgKCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0
ZSkKLSAgICAgICAgJiYgKCF0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUp
bnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRz
IC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmls
ZUZ1bGxuZXNzUmF0ZSkKLSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKSArIDEgPj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRl
bGF5KQorICAgIGlmICgoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkg
Pj0gT3B0aW9uczo6ZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUoKSkKKyAgICAgICAgJiYgKCF0
b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZh
bHVlUHJvZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQor
ICAgICAgICAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50
ZXIpICsgMSA+PSBPcHRpb25zOjptaW5pbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCiAgICAgQVNTRVJUKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
IDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTIxNzExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NzEsNyArNjcxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51
bWJlck9mUmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFs
dWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGlj
X2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6
bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUg
Pj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNf
Y2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjps
aWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKQEAgLTY3OSw3
ICs2NzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZSYXJl
Q2FzZVByb2ZpbGVzKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgdW5zaWduZWQgdmFsdWUgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRp
b25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93
Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3Vs
ZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUp
IC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlVGhy
ZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSog
YWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02OTksNyAr
Njk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9mUmFyZUNh
c2VQcm9maWxlcygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAg
cmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50ICYmIHN0YXRpY19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291
bnQpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dD
YXNlVGhyZXNob2xkOworICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49
IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzcGVjaWFsRmFzdENhc2VDb3VudCkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQg
Pj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5
dGVjb2RlT2Zmc2V0KQpAQCAtNzA5LDcgKzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
c3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2
YWx1ZSA9IHNsb3dDYXNlQ291bnQgLSBzcGVjaWFsRmFzdENhc2VDb3VudDsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+
PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgp
ICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49
IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlQW55U2xvd0Nhc2UoaW50IGJ5dGVjb2Rl
T2Zmc2V0KQpAQCAtNzE5LDcgKzcxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
dW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lh
bEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9
IHNsb3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudDsKLSAgICAgICAgICAgIHJldHVy
biB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBz
dGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRp
b25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0
YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlv
bnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHVuc2lnbmVkIGV4ZWN1dGlvbkVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBt
X2V4ZWN1dGlvbkVudHJ5Q291bnQ7IH0KQEAgLTk0MSwxMiArOTQxLDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBqaXRBZnRlcldhcm1VcCgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9u
czo6dGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXAsIHRoaXMpOworICAgICAgICAgICAgbV9sbGlu
dEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRB
ZnRlcldhcm1VcCgpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBq
aXRTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNl
dE5ld1RocmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRTb29uLCB0aGlzKTsKKyAgICAg
ICAgICAgIG1fbGxpbnRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhy
ZXNob2xkRm9ySklUU29vbigpLCB0aGlzKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Y29uc3QgRXhlY3V0aW9uQ291bnRlciYgbGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CkBAIC05
NzcsMjUgKzk3NywyNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gdG8gYXZvaWQgdGhy
YXNoaW5nLgogICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNv
bnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlD
b3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KTsKKyAgICAg
ICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZv
aWQgY291bnRSZW9wdGltaXphdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRp
bWl6YXRpb25SZXRyeUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9u
UmV0cnlDb3VudGVyID4gT3B0aW9uczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCi0g
ICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IE9wdGlvbnM6OnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OworICAgICAgICAgICAgaWYgKG1fcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIgPiBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1h
eCgpKQorICAgICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRp
b25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA8PCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAg
ICByZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSA8
PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpbnQzMl90KiBhZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpCkBAIC0xMDc1LDcgKzEw
NzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUu
CiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9q
aXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0
aW1pemVTb29uIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIHRoaXMpOworICAgICAg
ICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uKCkgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgdGhp
cyk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVy
KCkgY29uc3QgeyByZXR1cm4gbV9vc3JFeGl0Q291bnRlcjsgfQpAQCAtMTEwNCwxMiArMTEwNCwx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3Vu
dFRocmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGFkanVzdGVkRXhpdENvdW50VGhyZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJl
b3B0aW1pemF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVz
aG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbigpKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgdWludDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRp
bWl6YXRpb25Gcm9tTG9vcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZGp1c3Rl
ZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlv
bkZyb21Mb29wKTsKKyAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9s
ZChPcHRpb25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkpOwogICAg
ICAgICB9CiAKICAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlv
bkNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNob2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFQgdGhyZXNob2xkKQogICAgIHsKICAgICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAg
ICAgIGlmIChPcHRpb25zOjpyYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2lu
dHMpCi0gICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21J
bnRlZ2VyKCkgJSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9p
bnRzOworICAgICAgICBpZiAoT3B0aW9uczo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2Vl
bkNoZWNrcG9pbnRzKCkpCisgICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3Qt
PndlYWtSYW5kb21JbnRlZ2VyKCkgJSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0
d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9s
ZCA9IE9wdGlvbnM6Om1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Cisg
ICAgICAgICAgICBtYXhUaHJlc2hvbGQgPSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRz
QmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hv
bGQpCiAgICAgICAgICAgICB0aHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVy
biB0aHJlc2hvbGQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNyAr
MTI3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB1
bnNpZ25lZCBkZXB0aCA9IDA7CiAgICAgZm9yIChJbmxpbmVTdGFja0VudHJ5KiBlbnRyeSA9IG1f
aW5saW5lU3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5tX2NhbGxlcikgewogICAgICAg
ICArK2RlcHRoOwotICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5n
RGVwdGgpCisgICAgICAgIGlmIChkZXB0aCA+PSBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0
aCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KICAgICAg
ICAgCiAgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9u
IDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDI5ICs0MSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAvLyBjaGVjayBvcGNvZGVzLgogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZh
bChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7
CiB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25z
OjptYXhpbXVtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQoKTsKIH0KIGlubGluZSBib29sIG1pZ2h0
Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlv
bkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVj
dGlvbkNvdW50KCk7CiB9CiAKIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudAorICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291
bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudCgpCiAgICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5uZWVkc0FjdGl2YXRpb24oKTsKIH0KIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCiAgICAgICAgICYmICFjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYs
NyArMTM2LDcgQEAgZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbgogCiBp
bmxpbmUgYm9vbCBzaG91bGRTaG93RGlzYXNzZW1ibHkoKQogewotICAgIHJldHVybiBPcHRpb25z
OjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5OworICAgIHJl
dHVybiBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNz
ZW1ibHkoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw3IEBACiAjaW5jbHVkZSAiREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKQEAgLTYwLDcgKzYxLDEwIEBAIGlubGluZSBib29sIGNvbXBpbGUo
Q29tcGlsZU1vZGUgY29tcGlsZU0KICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIAorCisg
ICAgaWYgKCFPcHRpb25zOjp1c2VERkdKSVQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcg
Y29kZSBibG9jayAlcCglcCkgZm9yIGV4ZWN1dGFibGUgJXAsIG51bWJlciBvZiBpbnN0cnVjdGlv
bnMgPSAldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklM
RSogb3V0KSBjb25zdAogCiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jaykKIHsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0Nv
ZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSA8PSBPcHRpb25zOjpvc3JFeGl0UHJvbWluZW5jZUZv
ckZyZXF1ZW50RXhpdFNpdGUpCisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkg
LyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21p
bmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxMjE3MTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgLy8gSWYgdGhlIHZhcmlhYmxlIGhhcyBiZWVuIHZvdGVkIHRvIGJlY29tZSBhIGRvdWJsZSwg
dGhlbiBtYWtlIGl0IGEKICAgICAgICAgLy8gZG91YmxlLgotICAgICAgICBpZiAoZG91YmxlVm90
ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0KQorICAg
ICAgICBpZiAoZG91YmxlVm90ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJhdGlvRm9y
RG91YmxlRm9ybWF0KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0
YWNrLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
TWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBNYXJrU3RhY2tT
ZWdtZW50KiBNYXJrU3RhY2tTZWdtZW50QWxsb2NhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TWFya1N0YWNrU2VnbWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZl
QW5kQ29tbWl0KE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWFya1N0YWNrU2VnbWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29t
bWl0KE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUoKSkpOwogfQogCiB2b2lkIE1hcmtT
dGFja1NlZ21lbnRBbGxvY2F0b3I6OnJlbGVhc2UoTWFya1N0YWNrU2VnbWVudCogc2VnbWVudCkK
QEAgLTg2LDEzICs4NiwxMyBAQCB2b2lkIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNocmlu
a1JlCiAgICAgd2hpbGUgKHNlZ21lbnRzKSB7CiAgICAgICAgIE1hcmtTdGFja1NlZ21lbnQqIHRv
RnJlZSA9IHNlZ21lbnRzOwogICAgICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLT5tX3ByZXZpb3Vz
OwotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9u
czo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSk7CisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1p
dEFuZFJlbGVhc2UodG9GcmVlLCBPcHRpb25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpOwog
ICAgIH0KIH0KIAogTWFya1N0YWNrQXJyYXk6Ok1hcmtTdGFja0FycmF5KE1hcmtTdGFja1NlZ21l
bnRBbGxvY2F0b3ImIGFsbG9jYXRvcikKICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKLSAg
ICAsIG1fc2VnbWVudENhcGFjaXR5KE1hcmtTdGFja1NlZ21lbnQ6OmNhcGFjaXR5RnJvbVNpemUo
T3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6ZSkpCisgICAgLCBtX3NlZ21lbnRDYXBhY2l0
eShNYXJrU3RhY2tTZWdtZW50OjpjYXBhY2l0eUZyb21TaXplKE9wdGlvbnM6OmdjTWFya1N0YWNr
U2VnbWVudFNpemUoKSkpCiAgICAgLCBtX3RvcCgwKQogICAgICwgbV9udW1iZXJPZlByZXZpb3Vz
U2VnbWVudHMoMCkKIHsKQEAgLTI2Miw3ICsyNjIsNyBAQCBNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhOjpNYXJrU3RhY2tUaHJlCiAgICAgLCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFs
c2UpCiB7CiAjaWYgRU5BQkxFKFBBUkFMTEVMX0dDKQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VyczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAg
ICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwogICAg
ICAgICBtX21hcmtpbmdUaHJlYWRzTWFya1N0YWNrLmFwcGVuZChzbG90VmlzaXRvcik7CiAgICAg
ICAgIG1fbWFya2luZ1RocmVhZHMuYXBwZW5kKGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3Rh
cnRGdW5jLCBzbG90VmlzaXRvciwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIikpOwpAQCAtMzY4
LDcgKzM2OCw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAg
IC8vIE90aGVyd2lzZSwgYXNzdW1lIHRoYXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFu
ZCBkb25hdGUuCiAgICAgbV9zdGFjay5kb25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJl
ZE1hcmtTdGFjayk7CiAKLSAgICBpZiAobV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVs
TWFya2VycyA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKQorICAgIGlmIChtX3NoYXJlZC5t
X251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSkKICAgICAgICAgbV9zaGFyZWQubV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwog
fQogCkBAIC0zNzcsMTAgKzM3NywxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCiAgICAg
QVNTRVJUKG1faXNJblBhcmFsbGVsTW9kZSk7CiAgICAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0Mp
Ci0gICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID4gMSkgeworICAgIGlmIChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpID4gMSkgewogICAgICAgICB3aGlsZSAoIW1fc3RhY2su
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBjb3VudGRvd24gPSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0Jl
dHdlZW5SZWJhbGFuY2U7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51
bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYm
IGNvdW50ZG93bi0tOykKICAgICAgICAgICAgICAgICB2aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0
YWNrLnJlbW92ZUxhc3QoKSk7CiAgICAgICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAg
ICAgICAgIH0KQEAgLTQwMSwxNCArNDAxLDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJv
bVNoYXJlZChTaGFyZWQKIHsKICAgICBBU1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAK
LSAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMpOworICAgIEFTU0VSVChPcHRp
b25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKICAgICAKICAgICBib29sIHNob3VsZEJlUGFyYWxs
ZWw7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9w
dGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID4gMTsKKyAgICBzaG91bGRCZVBhcmFsbGVsID0gT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA+IDE7CiAjZWxzZQotICAgIEFTU0VSVChPcHRpb25z
OjpudW1iZXJPZkdDTWFya2VycyA9PSAxKTsKKyAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMoKSA9PSAxKTsKICAgICBzaG91bGRCZVBhcmFsbGVsID0gZmFsc2U7CiAjZW5kaWYK
ICAgICAKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFy
ZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAK
LSAgICAgICAgICAgIHNpemVfdCBpZGxlVGhyZWFkQ291bnQgPSBPcHRpb25zOjpudW1iZXJPZkdD
TWFya2VycyAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CisgICAg
ICAgICAgICBzaXplX3QgaWRsZVRocmVhZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtl
cnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CiAgICAgICAg
ICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFj
aywgaWRsZVRocmVhZENvdW50KTsKICAgICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMrKzsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJ
ZlByb2ZpdGFibGUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRo
cmVzaG9sZCkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVS
b290cy5zaXplKCkpIDwgT3B0aW9uczo6b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogICAg
ICAgICB9CkBAIC0zNTAsNyArMzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIHZv
aWQgTWFya1N0YWNrOjphZGRPcGFxdWVSb290KHZvaWQqIHJvb3QpCiAgICAgewogI2lmIEVOQUJM
RShQQVJBTExFTF9HQykKLSAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09
IDEpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewog
ICAgICAgICAgICAgLy8gUHV0IGRpcmVjdGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgogICAg
ICAgICAgICAgbV9zaGFyZWQubV9vcGFxdWVSb290cy5hZGQocm9vdCk7CiAgICAgICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJl
dmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZG9u
YXRlKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgICAg
ICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMgPT0gMSkKKyAgICAgICAgaWYgKE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgICAgIGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIEpJVDo6ZW1p
dE9wdGltaXphdGlvbkNoZWNrKE9wdGltaXphCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQz
MihTaWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IE9w
dGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wIDogT3B0aW9uczo6ZXhlY3V0
aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9j
ay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIEp1bXAgc2tpcE9wdGltaXpl
ID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBUcnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0
aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpIDog
T3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAg
SklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wdGltaXplKTsKICAgICBzdHViQ2FsbC5h
ZGRBcmd1bWVudChUcnVzdGVkSW1tMzIobV9ieXRlY29kZU9mZnNldCkpOwogICAgIGlmIChraW5k
ID09IEVudGVyT3B0aW1pemF0aW9uQ2hlY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMTIx
NzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRocmVhZGluZ09uY2UoKQogewogICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRp
YWxpemUoKTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKLSAgICBPcHRpb25zOjpp
bml0aWFsaXplT3B0aW9ucygpOworICAgIE9wdGlvbnM6OmluaXRpYWxpemUoKTsKICNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6Omlu
aXRpYWxpemUoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3
ICs5OSw3IEBAIGV4dGVybiBjb25zdCBIYXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3IKICNpZiBF
TkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJM
RShMTElOVCkpCiBzdGF0aWMgYm9vbCBlbmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRv
ciYgZXhlY3V0YWJsZUFsbG9jYXRvcikKIHsKLSAgICBpZiAoIWV4ZWN1dGFibGVBbGxvY2F0b3Iu
aXNWYWxpZCgpIHx8ICFPcHRpb25zOjp1c2VKSVQpCisgICAgaWYgKCFleGVjdXRhYmxlQWxsb2Nh
dG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9uczo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogI2lmIFVTRShDRikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDcgKzExNSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQK
IEpTR2xvYmFsT2JqZWN0OjpKU0dsb2JhbE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xv
YmFsT2JqZWN0TWV0aG9kVGFibGUpCiAgICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGds
b2JhbERhdGEsIHN0cnVjdHVyZSwgJm1fc3ltYm9sVGFibGUpCiAgICAgLCBtX2dsb2JhbFNjb3Bl
Q2hhaW4oKQotICAgICwgbV93ZWFrUmFuZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQg
PyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAx
LjApKSkKKyAgICAsIG1fd2Vha1JhbmRvbShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkKCkg
PyBPcHRpb25zOjpmb3JjZWRXZWFrUmFuZG9tU2VlZCgpIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJhbmRvbU51bWJlcigpICogKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSAr
IDEuMCkpKQogICAgICwgbV9ldmFsRW5hYmxlZCh0cnVlKQogICAgICwgbV9nbG9iYWxPYmplY3RN
ZXRob2RUYWJsZShnbG9iYWxPYmplY3RNZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRh
YmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDggKzI3LDEzIEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJs
b2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJp
bmdFeHRyYXMuaD4KIAogI2lmIE9TKERBUldJTikgJiYgRU5BQkxFKFBBUkFMTEVMX0dDKQogI2lu
Y2x1ZGUgPHN5cy9zeXNjdGwuaD4KQEAgLTM3LDY3ICs0Miw5IEBACiAvLyBTZXQgdG8gMSB0byBj
b250cm9sIHRoZSBoZXVyaXN0aWNzIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICNkZWZp
bmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMAogCi0jaWYgRU5BQkxFKFJVTl9USU1FX0hF
VVJJU1RJQ1MpCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBPcHRpb25zIHsKLQotYm9vbCB1c2VKSVQ7Ci0KLWJvb2wgc2hvd0Rpc2Fzc2VtYmx5Owot
Ym9vbCBzaG93REZHRGlzYXNzZW1ibHk7Ci0KLXVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25D
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotCi11bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JD
YWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLXVuc2lnbmVkIG1heGltdW1GdW5j
dGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKLXVuc2ln
bmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOworbmFtZXNwYWNlIEpTQyB7CiAKLWludDMyX3QgdGhy
ZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0K
LWludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKLWludDMyX3QgdGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvck9wdGlt
aXplU29vbjsKLQotaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWlu
dDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKLQotYm9vbCByYW5kb21p
emVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Ci1pbnQzMl90IG1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7Ci0KLWRvdWJsZSBsaWtlbHlUb1Rha2VTbG93
Q2FzZVRocmVzaG9sZDsKLWRvdWJsZSBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKLXVuc2ln
bmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwotdW5zaWduZWQgY291bGRUYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0KLWRvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1
ZW50RXhpdFNpdGU7Ci11bnNpZ25lZCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbjsKLXVu
c2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3A7Ci0KLXVuc2lnbmVk
IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OwotdW5zaWduZWQgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXJTdGVwOwotCi11bnNpZ25lZCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci11
bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci1kb3VibGUgZGVzaXJlZFByb2ZpbGVM
aXZlbmVzc1JhdGU7Ci1kb3VibGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0KLWRvdWJs
ZSBkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQ7Ci0KLXVuc2lnbmVkIG1pbmltdW1OdW1i
ZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5jZTsKLXVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNp
emU7Ci11bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsKLXVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJn
ZVRocmVzaG9sZDsKLQotYm9vbCBmb3JjZVdlYWtSYW5kb21TZWVkOwotdW5zaWduZWQgZm9yY2Vk
V2Vha1JhbmRvbVNlZWQ7Ci0KLSNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKIHN0YXRp
YyBib29sIHBhcnNlKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCYgdmFsdWUpCiB7CiAgICAgaWYg
KCFzdHJjYXNlY21wKHN0cmluZywgInRydWUiKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJ5ZXMi
KSB8fCAhc3RyY21wKHN0cmluZywgIjEiKSkgewpAQCAtMTI2LDI3ICs3MywyMiBAQCBzdGF0aWMg
Ym9vbCBwYXJzZShjb25zdCBjaGFyKiBzdHJpbmcsIGRvCiAgICAgcmV0dXJuIHNzY2FuZihzdHJp
bmcsICIlbGYiLCAmdmFsdWUpID09IDE7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFU+Ci12b2lkIHNldEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSwg
VSB2YWx1ZSkKKyNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIG92ZXJyaWRlT3B0aW9uV2l0aEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29u
c3QgY2hhciogbmFtZSkKIHsKICAgICBjb25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihu
YW1lKTsKLSAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7Ci0gICAgICAgIHZhcmlhYmxlID0gc2FmZUNh
c3Q8VD4odmFsdWUpOworICAgIGlmICghc3RyaW5nVmFsdWUpCiAgICAgICAgIHJldHVybjsKLSAg
ICB9CiAgICAgCiAgICAgaWYgKHBhcnNlKHN0cmluZ1ZhbHVlLCB2YXJpYWJsZSkpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBw
YXJzZSAlcz0lc1xuIiwgbmFtZSwgc3RyaW5nVmFsdWUpOwotICAgIHZhcmlhYmxlID0gc2FmZUNh
c3Q8VD4odmFsdWUpOwogfQotCi0jZGVmaW5lIFNFVCh2YXJpYWJsZSwgdmFsdWUpIHNldEhldXJp
c3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2YXJpYWJsZSwgdmFsdWUpCi0jZWxzZQotI2RlZmluZSBT
RVQodmFyaWFibGUsIHZhbHVlKSB2YXJpYWJsZSA9IHZhbHVlCiAjZW5kaWYKIAorCiBzdGF0aWMg
dW5zaWduZWQgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKGludCBtYXhOdW1iZXJPZkdDTWFya2Vy
cykKIHsKICAgICBpbnQgY3B1c1RvVXNlID0gMTsKQEAgLTE2Myw3NiArMTA1LDExNCBAQCBzdGF0
aWMgdW5zaWduZWQgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzCiAgICAgcmV0dXJuIGNwdXNUb1Vz
ZTsKIH0KIAotdm9pZCBpbml0aWFsaXplT3B0aW9ucygpCi17Ci0gICAgU0VUKHVzZUpJVCwgdHJ1
ZSk7Ci0gICAgCi0gICAgU0VUKHNob3dEaXNhc3NlbWJseSwgZmFsc2UpOwotICAgIFNFVChzaG93
REZHRGlzYXNzZW1ibHksIGZhbHNlKTsgLy8gREZHIGRpc2Fzc2VtYmx5IGlzIHNob3duIGlmIHNo
b3dEaXNhc3NlbWJseSB8fCBzaG93REZHRGlzYXNzZW1ibHkKLSAgICAKLSAgICBTRVQobWF4aW11
bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKTsKLSAgICAKLSAg
ICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQsIDE4MCk7Ci0gICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCk7Ci0gICAgCi0gICAgU0VUKG1heGltdW1Jbmxpbmlu
Z0RlcHRoLCA1KTsKLQotICAgIFNFVCh0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEw
MCk7Ci0gICAgU0VUKHRocmVzaG9sZEZvckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKIAotICAg
IFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7Ci0gICAgU0VU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKTsKLSAgICBTRVQodGhy
ZXNob2xkRm9yT3B0aW1pemVTb29uLCAgICAgICAgICAgIDEwMDApOworT3B0aW9uczo6RW50cnkg
T3B0aW9uczo6c19vcHRpb25zW09wdGlvbnM6Om51bWJlck9mT3B0aW9uc107CiAKLSAgICBTRVQo
ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AsICAgMSk7Ci0gICAgU0VUKGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KTsKLSAgICAKLSAgICBTRVQocmFuZG9taXpl
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzLCBmYWxzZSk7Ci0gICAgU0VUKG1heGlt
dW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIDEwMDApOworLy8gUmVhbGl6ZSB0
aGUgbmFtZXMgZm9yIGVhY2ggb2YgdGhlIG9wdGlvbnM6Citjb25zdCBPcHRpb25zOjpFbnRyeUlu
Zm8gT3B0aW9uczo6c19vcHRpb25zSW5mb1tPcHRpb25zOjpudW1iZXJPZk9wdGlvbnNdID0gewor
I2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSBcCisg
ICAgeyAjbmFtZV8sIE9wdGlvbnM6OnR5cGVfIyNUeXBlIH0sCisgICAgSlNDX09QVElPTlMoRk9S
X0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorfTsKKwordm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKK3sKKyAgICAvLyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMg
d2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVf
LCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIG5hbWVfKCkgPSBkZWZhdWx0VmFsdWVfOwor
ICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04K
KworICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZhcnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBh
cHBsaWNhYmxlLgorICAgIC8vIFRoZSBldm4gdmFyIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUg
b3B0aW9uIHByZWZpeGVkIHdpdGgKKyAgICAvLyAiSlNDXyIuCisjaWYgRU5BQkxFKFJVTl9USU1F
X0hFVVJJU1RJQ1MpCisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1
bHRWYWx1ZV8pIFwKKyAgICBvdmVycmlkZU9wdGlvbldpdGhIZXVyaXN0aWMobmFtZV8oKSwgIkpT
Q18iICNuYW1lXyk7CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZP
Ul9FQUNIX09QVElPTgorICAgIAorI2VuZGlmIC8vIFJVTl9USU1FX0hFVVJJU1RJQ1MKKworICAg
IC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8g
dGhlIG9wdGlvbnM6CisgICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKTsKKyAgICBBU1NFUlQo
dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXpl
U29vbigpKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49
IDApOwogCi0gICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAwLjE1KTsK
LSAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91
bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cg
Y2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KLSAgICBTRVQobGlrZWx5
VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50LCAgICAxMCk7Ci0gICAgCi0gICAgU0VUKG9zckV4aXRQcm9taW5lbmNl
Rm9yRnJlcXVlbnRFeGl0U2l0ZSwgIDAuMyk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uLCAgICAgICAgIDEwMCk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1p
emF0aW9uRnJvbUxvb3AsIDUpOwotCi0gICAgU0VUKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
U3RlcCwgMSk7Ci0KLSAgICBTRVQobWluaW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDEpOwotICAg
IFNFVChtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksICAgNSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9m
aWxlTGl2ZW5lc3NSYXRlLCAwLjc1KTsKLSAgICBTRVQoZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1Jh
dGUsIDAuMzUpOwotICAgIAotICAgIFNFVChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQs
IDIpOwotICAgIAotICAgIFNFVChtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2Us
IDEwMCk7Ci0gICAgU0VUKGdjTWFya1N0YWNrU2VnbWVudFNpemUsICAgICAgICAgICAgICAgcGFn
ZVNpemUoKSk7Ci0gICAgU0VUKG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCwgICAgICAgICAgICAg
MTAwMCk7Ci0gICAgU0VUKG51bWJlck9mR0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtl
cnMoNykpOyAvLyBXZSBkb24ndCBzY2FsZSBzbyB3ZWxsIGJleW9uZCA3LgotCi0gICAgQVNTRVJU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwID49IHRocmVzaG9sZEZvck9wdGlt
aXplQWZ0ZXJXYXJtVXApOwotICAgIEFTU0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbik7Ci0gICAgQVNTRVJUKHRocmVzaG9sZEZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAgPj0gMCk7Ci0gICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4
aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBz
aW1wbHkKICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxv
dyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlm
dCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFs
dWUgZW5kcwogICAgIC8vIHVwIGJlaW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJp
YmxlOyBpdCBwcm9iYWJseSB0YWtlcyB1cCB+MTAwIGN5Y2xlcwogICAgIC8vIHRvdGFsIG9uIGEg
MzItYml0IHByb2Nlc3Nvci4KLSAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7
Ci0gICAgd2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpIDw9
IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgp
KSkKLSAgICAgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKLSAgICAKLSAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPiAwKTsKLSAgICBBU1NF
UlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpKTsKLSAgICAKLSAgICBT
RVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpOwotICAgIFNFVChmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCk7CisgICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSA9IDA7CisgICAg
d2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9u
Z1dhcm1VcCgpKSA8PCAocmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgoKSArIDEpKSA8PSBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyPjo6bWF4KCkpKQor
ICAgICAgICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKys7CisKKyAgICBBU1NFUlQo
KHN0YXRpY19jYXN0PGludDY0X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCkpIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KCkpID4gMCk7CisgICAgQVNTRVJU
KChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1V
cCgpKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKSA8PSBzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyPjo6bWF4KCkpKTsKK30KKworLy8gUGFy
c2VzIGEgc2luZ2xlIGNvbW1hbmQgbGluZSBvcHRpb24gaW4gdGhlIGZvcm1hdCAiPG9wdGlvbk5h
bWU+PTx2YWx1ZT4iCisvLyAobm8gc3BhY2VzIGFsbG93ZWQpIGFuZCBzZXQgdGhlIHNwZWNpZmll
ZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUuCitib29sIE9wdGlvbnM6OnNldE9wdGlvbihjb25zdCBj
aGFyKiBhcmcpCit7CisgICAgLy8gYXJnIHNob3VsZCBsb29rIGxpa2UgdGhpczoKKyAgICAvLyAg
IDxqc2NPcHRpb25OYW1lPj08YXBwcm9wcmlhdGUgdmFsdWU+CisgICAgY29uc3QgY2hhciogZXF1
YWxTdHIgPSBzdHJjaHIoYXJnLCAnPScpOworICAgIGlmICghZXF1YWxTdHIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHZhbHVlU3RyID0gZXF1YWxTdHIgKyAxOwor
CisgICAgLy8gRm9yIGVhY2ggb3B0aW9uLCBjaGVjayBpZiB0aGUgc3BlY2lmeSBhcmcgaXMgYSBt
YXRjaC4gSWYgc28sIHNldCB0aGUgYXJnCisgICAgLy8gaWYgdGhlIHZhbHVlIG1ha2VzIHNlbnNl
LiBPdGhlcndpc2UsIG1vdmUgb24gdG8gY2hlY2tpbmcgdGhlIG5leHQgb3B0aW9uLgorI2RlZmlu
ZSBGT1JfRUFDSF9PUFRJT04odHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSAgICBcCisgICAg
aWYgKCFzdHJuY21wKGFyZywgI25hbWVfLCBlcXVhbFN0ciAtIGFyZykpIHsgICAgICAgIFwKKyAg
ICAgICAgdHlwZV8gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBib29sIHN1Y2Nlc3MgPSBwYXJzZSh2YWx1ZVN0ciwgdmFsdWUpOyAgICAgICAgICBc
CisgICAgICAgIGlmIChzdWNjZXNzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIG5hbWVfKCkgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0KKworICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1
bmRlZiBGT1JfRUFDSF9PUFRJT04KKworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIG9wdGlv
biBtYXRjaGVkLgogfQogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucwordm9pZCBPcHRp
b25zOjpkdW1wQWxsT3B0aW9ucyhGSUxFKiBzdHJlYW0pCit7CisgICAgZnByaW50ZihzdHJlYW0s
ICJKU0MgcnVudGltZSBvcHRpb25zOlxuIik7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IG51
bWJlck9mT3B0aW9uczsgaWQrKykKKyAgICAgICAgZHVtcE9wdGlvbihzdGF0aWNfY2FzdDxPcHRp
b25JRD4oaWQpLCBzdHJlYW0sICIgICAiLCAiXG4iKTsKK30KKwordm9pZCBPcHRpb25zOjpkdW1w
T3B0aW9uKE9wdGlvbklEIGlkLCBGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIGhlYWRlciwgY29u
c3QgY2hhciogZm9vdGVyKQoreworICAgIGlmIChpZCA+PSBudW1iZXJPZk9wdGlvbnMpCisgICAg
ICAgIHJldHVybjsgLy8gSWxsZWdhbCBvcHRpb24uCisKKyAgICBmcHJpbnRmKHN0cmVhbSwgIiVz
JXM6ICIsIGhlYWRlciwgc19vcHRpb25zSW5mb1tpZF0ubmFtZSk7CisgICAgc3dpdGNoIChzX29w
dGlvbnNJbmZvW2lkXS50eXBlKSB7CisgICAgY2FzZSBib29sVHlwZToKKyAgICAgICAgZnByaW50
ZihzdHJlYW0sICIlcyIsIHNfb3B0aW9uc1tpZF0udS5ib29sVmFsPyJ0cnVlIjoiZmFsc2UiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB1bnNpZ25lZFR5cGU6CisgICAgICAgIGZwcmludGYo
c3RyZWFtLCAiJXUiLCBzX29wdGlvbnNbaWRdLnUudW5zaWduZWRWYWwpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGRvdWJsZVR5cGU6CisgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJWxmIiwg
c19vcHRpb25zW2lkXS51LmRvdWJsZVZhbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgaW50
MzJUeXBlOgorICAgICAgICBmcHJpbnRmKHN0cmVhbSwgIiVkIiwgc19vcHRpb25zW2lkXS51Lmlu
dDMyVmFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGZwcmludGYoc3RyZWFtLCAiJXMi
LCBmb290ZXIpOworfQogCit9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2NiAr
MjYsMTY3IEBACiAjaWZuZGVmIE9wdGlvbnNfaAogI2RlZmluZSBPcHRpb25zX2gKIAorI2luY2x1
ZGUgIkpTRXhwb3J0TWFjcm9zLmgiCiAjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBPcHRpb25zIHsKK25hbWVzcGFjZSBK
U0MgewogCi1leHRlcm4gYm9vbCB1c2VKSVQ7CisvLyBIb3cgZG8gSlNDIFZNIG9wdGlvbnMgd29y
az8KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVGhlIEpTQ19PUFRJT05TKCkg
bWFjcm8gYmVsb3cgZGVmaW5lcyBhIGxpc3Qgb2YgYWxsIEpTQyBvcHRpb25zIGluIHVzZSwKKy8v
IGFsb25nIHdpdGggdGhlaXIgdHlwZXMgYW5kIGRlZmF1bHQgdmFsdWVzLiBUaGUgb3B0aW9ucyB2
YWx1ZXMgYXJlIGFjdHVhbGx5CisvLyByZWFsaXplZCBhcyBhbiBhcnJheSBvZiBPcHRpb25zOjpF
bnRyeSBlbGVtZW50cy4KKy8vCisvLyAgICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgpIHdpbGwgaW5p
dGlhbGl6ZSB0aGUgYXJyYXkgb2Ygb3B0aW9ucyB2YWx1ZXMgd2l0aAorLy8gdGhlIGRlZmF1bHRz
IHNwZWNpZmllZCBpbiBKU0NfT1BUSU9OUygpIGJlbG93LiBBZnRlciB0aGF0LCB0aGUgdmFsdWVz
IGNhbgorLy8gYmUgcHJvZ3JhbW1hdGljYWxseSByZWFkIGFuZCB3cml0dGVuIHRvIHVzaW5nIGFu
IGFjY2Vzc29yIG1ldGhvZCB3aXRoIHRoZQorLy8gc2FtZSBuYW1lIGFzIHRoZSBvcHRpb24uIEZv
ciBleGFtcGxlLCB0aGUgb3B0aW9uICJ1c2VKSVQiIGNhbiBiZSByZWFkIGFuZAorLy8gc2V0IGxp
a2Ugc286CisvLworLy8gICAgIGJvb2wgaml0SXNPbiA9IE9wdGlvbnM6OnVzZUpJVCgpOyAgLy8g
R2V0IHRoZSBvcHRpb24gdmFsdWUuCisvLyAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsg
ICAgICAgICAvLyBTZXRzIHRoZSBvcHRpb24gdmFsdWUuCisvLworLy8gICAgIElmIHlvdSB3YW50
IHRvIHR3ZWFrIGFueSBvZiB0aGVzZSB2YWx1ZXMgcHJvZ3JhbW1hdGljYWxseSBmb3IgdGVzdGlu
ZworLy8gcHVycG9zZXMsIHlvdSBjYW4gZG8gc28gaW4gT3B0aW9uczo6aW5pdGlhbGl6ZSgpIGFm
dGVyIHRoZSBkZWZhdWx0IHZhbHVlcworLy8gYXJlIHNldC4KKy8vCisvLyAgICAgQWx0ZXJuYXRp
dmVseSwgeW91IGNhbiBlbmFibGUgUlVOX1RJTUVfSEVVUklTVElDUyB3aGljaCB3aWxsIGFsbG93
IHlvdQorLy8gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVzIGJ5IHNwZWNpZnlpbmcgZW52
aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZQorLy8gZm9ybTogSlNDXzxuYW1lIG9mIEpTQyBvcHRp
b24+LgorLy8KKy8vIE5vdGU6IE9wdGlvbnM6OmluaXRpYWxpemUoKSB0cmllcyB0byBlbnN1cmUg
c29tZSBzYW5pdHkgb24gdGhlIG9wdGlvbiB2YWx1ZXMKKy8vIHdoaWNoIGFyZSBzZXQgYnkgZG9p
bmcgc29tZSByYW5nZSBjaGVja3MsIGFuZCB2YWx1ZSBjb3JyZWN0aW9ucy4gVGhlc2UKKy8vIGNo
ZWNrcyBhcmUgZG9uZSBhZnRlciB0aGUgb3B0aW9uIHZhbHVlcyBhcmUgc2V0LiBJZiB5b3UgYWx0
ZXIgdGhlIG9wdGlvbgorLy8gdmFsdWVzIGFmdGVyIHRoZSBzYW5pdHkgY2hlY2tzIChmb3IgeW91
ciBvd24gdGVzdGluZyksIHRoZW4geW91J3JlIGxpYWJsZSB0bworLy8gZW5zdXJlIHRoYXQgdGhl
IG5ldyB2YWx1ZXMgc2V0IGFyZSBzYW5lIGFuZCByZWFzb25hYmxlIGZvciB5b3VyIG93biBydW4u
CisKKworI2RlZmluZSBKU0NfT1BUSU9OUyh2KSBcCisgICAgdihib29sLCB1c2VKSVQsICAgIHRy
dWUpIFwKKyAgICB2KGJvb2wsIHVzZURGR0pJVCwgdHJ1ZSkgXAorICAgIFwKKyAgICAvKiBzaG93
RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICovIFwKKyAgICB2KGJvb2ws
IHNob3dEaXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICB2KGJvb2wsIHNob3dERkdEaXNhc3NlbWJs
eSwgZmFsc2UpIFwKKyAgICBcCisgICAgdih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMDAwKSBcCisgICAgXAorICAgIHYodW5zaWduZWQs
IG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAx
ODApIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVD
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDApIFwKKyAgICBcCisgICAgLyogRGVwdGggb2Yg
aW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4gKi8g
XAorICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0RlcHRoLCA1KSBcCisgICAgXAorICAg
IHYoaW50MzIsIHRocmVzaG9sZEZvckpJVEFmdGVyV2FybVVwLCAxMDApIFwKKyAgICB2KGludDMy
LCB0aHJlc2hvbGRGb3JKSVRTb29uLCAxMDApIFwKKyAgICBcCisgICAgdihpbnQzMiwgdGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgMTAwMCkgXAorICAgIHYoaW50MzIsIHRocmVzaG9s
ZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCA1MDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNo
b2xkRm9yT3B0aW1pemVTb29uLCAxMDAwKSBcCisgICAgXAorICAgIHYoaW50MzIsIGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAxKSBcCisgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpIFwKKyAgICBcCisgICAgdihib29sLCByYW5kb21p
emVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMsIGZhbHNlKSBcCisgICAgdihpbnQz
MiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCkgXAorICAg
IFwKKyAgICB2KGRvdWJsZSwgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMTUpIFwK
KyAgICB2KGRvdWJsZSwgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMDUpIFwKKyAgICB2
KHVuc2lnbmVkLCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCwgMTAwKSBcCisgICAg
dih1bnNpZ25lZCwgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwKSBcCisgICAgXAor
ICAgIHYoZG91YmxlLCBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUsIDAuMykg
XAorICAgIHYodW5zaWduZWQsIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uLCAxMDApIFwK
KyAgICB2KHVuc2lnbmVkLCBvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wLCA1
KSBcCisgICAgXAorICAgIHYodW5zaWduZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4
LCAwKSAgXAorICAgIHYodW5zaWduZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3RlcCwg
MSkgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXksIDEp
IFwKKyAgICB2KHVuc2lnbmVkLCBtYXhpbXVtT3B0aW1pemF0aW9uRGVsYXksIDUpIFwKKyAgICB2
KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUsIDAuNzUpIFwKKyAgICB2KGRvdWJs
ZSwgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUsIDAuMzUpIFwKKyAgICBcCisgICAgdihkb3Vi
bGUsIGRvdWJsZVZvdGVSYXRpb0ZvckRvdWJsZUZvcm1hdCwgMikgXAorICAgIFwKKyAgICB2KHVu
c2lnbmVkLCBtaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEwMCkgXAorICAg
IHYodW5zaWduZWQsIGdjTWFya1N0YWNrU2VnbWVudFNpemUsIHBhZ2VTaXplKCkpIFwKKyAgICB2
KHVuc2lnbmVkLCBudW1iZXJPZkdDTWFya2VycywgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDcp
KSBcCisgICAgdih1bnNpZ25lZCwgb3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkLCAxMDAwKSBcCisg
ICAgXAorICAgIHYoYm9vbCwgZm9yY2VXZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKKyAgICB2KHVu
c2lnbmVkLCBmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCkKKworCitjbGFzcyBPcHRpb25zIHsKK3B1
YmxpYzoKKyAgICAvLyBUaGlzIHR5cGVkZWYgaXMgdG8gYWxsb3cgdXMgdG8gZWxpbWluYXRlIHRo
ZSAnXycgaW4gdGhlIGZpZWxkIG5hbWUgaW4KKyAgICAvLyB1bmlvbiBpbnNpZGUgRW50cnkuIFRo
aXMgaXMgbmVlZGVkIHRvIGtlZXAgdGhlIHN0eWxlIGNoZWNrZXIgaGFwcHkuCisgICAgdHlwZWRl
ZiBpbnQzMl90IGludDMyOworCisgICAgLy8gRGVjbGFyZSB0aGUgb3B0aW9uIElEczoKKyAgICBl
bnVtIE9wdGlvbklEIHsKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVm
YXVsdFZhbHVlXykgXAorICAgICAgICBPUFRfIyNuYW1lXywKKyAgICAgICAgSlNDX09QVElPTlMo
Rk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorICAgICAgICBudW1iZXJP
Zk9wdGlvbnMKKyAgICB9OworCisKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisKKyAg
ICAvLyBQYXJzZXMgYSBzaW5nbGUgY29tbWFuZCBsaW5lIG9wdGlvbiBpbiB0aGUgZm9ybWF0ICI8
b3B0aW9uTmFtZT49PHZhbHVlPiIKKyAgICAvLyAobm8gc3BhY2VzIGFsbG93ZWQpIGFuZCBzZXQg
dGhlIHNwZWNpZmllZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUuCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIGJvb2wgc2V0T3B0aW9uKGNvbnN0IGNoYXIqIGFyZyk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcEFsbE9wdGlvbnMoRklMRSogc3RyZWFtID0gc3Rkb3V0
KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wT3B0aW9uKE9wdGlvbklEIGlkLCBGSUxFKiBzdHJlYW0g
PSBzdGRvdXQsIGNvbnN0IGNoYXIqIGhlYWRlciA9ICIiLCBjb25zdCBjaGFyKiBmb290ZXIgPSAi
Iik7CisKKyAgICAvLyBEZWNsYXJlIGFjY2Vzc29ycyBmb3IgZWFjaCBvcHRpb246CisjZGVmaW5l
IEZPUl9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICBBTFdB
WVNfSU5MSU5FIHN0YXRpYyB0eXBlXyYgbmFtZV8oKSB7IHJldHVybiBzX29wdGlvbnNbT1BUXyMj
bmFtZV9dLnUudHlwZV8jI1ZhbDsgfQorCisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9O
KQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorCitwcml2YXRlOgorICAgIGVudW0gRW50cnlUeXBl
IHsKKyAgICAgICAgYm9vbFR5cGUsCisgICAgICAgIHVuc2lnbmVkVHlwZSwKKyAgICAgICAgZG91
YmxlVHlwZSwKKyAgICAgICAgaW50MzJUeXBlCisgICAgfTsKKworICAgIC8vIEZvciBzdG9yaW5n
IGZvciBhbiBvcHRpb24gdmFsdWU6CisgICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgdW5pb24g
eworICAgICAgICAgICAgYm9vbCBib29sVmFsOworICAgICAgICAgICAgdW5zaWduZWQgdW5zaWdu
ZWRWYWw7CisgICAgICAgICAgICBkb3VibGUgZG91YmxlVmFsOworICAgICAgICAgICAgaW50MzIg
aW50MzJWYWw7CisgICAgICAgIH0gdTsKKyAgICB9OworCisgICAgLy8gRm9yIHN0b3JpbmcgY29u
c3RhbnQgbWV0YSBkYXRhIGFib3V0IGVhY2ggb3B0aW9uOgorICAgIHN0cnVjdCBFbnRyeUluZm8g
eworICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICBFbnRyeVR5cGUgdHlwZTsKKyAg
ICB9OworCisgICAgT3B0aW9ucygpOworCisgICAgLy8gRGVjbGFyZSB0aGUgb3B0aW9uczoKKyNk
ZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAg
IHR5cGVfIG1fIyNuYW1lXzsKKyAgICBKU0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5k
ZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAgICAvLyBEZWNsYXJlIHRoZSBzaW5nbGV0b24gaW5zdGFu
Y2Ugb2YgdGhlIG9wdGlvbnMgc3RvcmU6CisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgRW50cnkg
c19vcHRpb25zW251bWJlck9mT3B0aW9uc107CisgICAgc3RhdGljIGNvbnN0IEVudHJ5SW5mbyBz
X29wdGlvbnNJbmZvW251bWJlck9mT3B0aW9uc107Cit9OwogCi1leHRlcm4gYm9vbCBzaG93RGlz
YXNzZW1ibHk7Ci1leHRlcm4gYm9vbCBzaG93REZHRGlzYXNzZW1ibHk7IC8vIHNob3dEaXNhc3Nl
bWJseSBpbXBsaWVzIHNob3dERkdEaXNhc3NlbWJseS4KLQotZXh0ZXJuIHVuc2lnbmVkIG1heGlt
dW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwotCi1leHRlcm4gdW5zaWdu
ZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0Rl
cHRoOyAvLyBEZXB0aCBvZiBpbmxpbmUgc3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9IG9u
ZSBsZXZlbCwgZXRjLgotCi1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1V
cDsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0KLWV4dGVybiBpbnQzMl90
IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hv
bGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZv
ck9wdGltaXplU29vbjsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dElu
dm9jYXRpb247Ci0KLWV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JM
b29wOwotZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsK
LQotZXh0ZXJuIGJvb2wgcmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRz
OwotZXh0ZXJuIGludDMyX3QgbWF4aW11bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50
czsKLQotZXh0ZXJuIGRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKLWV4dGVy
biBkb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7Ci1leHRlcm4gdW5zaWduZWQgbGlr
ZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci1leHRlcm4gdW5zaWduZWQgY291bGRUYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0KLWV4dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VG
b3JGcmVxdWVudEV4aXRTaXRlOwotZXh0ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0
aW1pemF0aW9uOwotZXh0ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9u
RnJvbUxvb3A7Ci0KLWV4dGVybiB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1h
eDsKLWV4dGVybiB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlclN0ZXA7Ci0KLWV4
dGVybiB1bnNpZ25lZCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci1leHRlcm4gdW5zaWduZWQg
bWF4aW11bU9wdGltaXphdGlvbkRlbGF5OwotZXh0ZXJuIGRvdWJsZSBkZXNpcmVkUHJvZmlsZUxp
dmVuZXNzUmF0ZTsKLWV4dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0K
LWV4dGVybiBkb3VibGUgZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0OwotCi1leHRlcm4g
dW5zaWduZWQgbWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxhbmNlOwotZXh0ZXJuIHVu
c2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7Ci1KU19FWFBPUlREQVRBIGV4dGVybiB1bnNp
Z25lZCBudW1iZXJPZkdDTWFya2VyczsKLUpTX0VYUE9SVERBVEEgZXh0ZXJuIHVuc2lnbmVkIG9w
YXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKLQotZXh0ZXJuIGJvb2wgZm9yY2VXZWFrUmFuZG9tU2Vl
ZDsKLWV4dGVybiB1bnNpZ25lZCBmb3JjZWRXZWFrUmFuZG9tU2VlZDsKLQotdm9pZCBpbml0aWFs
aXplT3B0aW9ucygpOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6T3B0aW9ucworfSAvLyBuYW1l
c3BhY2UgSlNDCiAKICNlbmRpZiAvLyBPcHRpb25zX2gKLQpJbmRleDogU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZp
c2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkp
CkBAIC04ODcsNiArODg3LDEwIEBACiAjZGVmaW5lIEVOQUJMRV9ESVNBU1NFTUJMRVIgMQogI2Vu
ZGlmCiAKKy8vIG1sYW0gQkVHSU4KKyNkZWZpbmUgRU5BQkxFX0xMSU5UX0NQTFVTUExVU19CQUNL
RU5EIDEKKy8vIG1sYW0gRU5ECisKIC8qIE9uIHNvbWUgb2YgdGhlIHBsYXRmb3JtcyB3aGVyZSB3
ZSBoYXZlIGEgSklULCB3ZSB3YW50IHRvIGFsc28gaGF2ZSB0aGUgCiAgICBsb3ctbGV2ZWwgaW50
ZXJwcmV0ZXIuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0xMSU5UKSBcCg==
</data>
<flag name="commit-queue"
          id="158837"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150630</attachid>
            <date>2012-07-03 09:42:31 -0700</date>
            <delta_ts>2012-07-03 12:19:40 -0700</delta_ts>
            <desc>rev 6: + mods to vcproj&apos;s .def to satisfy Windows. Also removed an unrelated file from previous patch. </desc>
            <filename>bug-90420-rev6.patch</filename>
            <type>text/plain</type>
            <size>51311</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBA
CisyMDEyLTA3LTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBzeW1ib2xpY2FsbHkgc2V0IGFuZCBkdW1wIEpTQyBWTSBvcHRpb25zLgor
ICAgICAgICBTZWUgY29tbWVudHMgaW4gcnVudGltZS9PcHRpb25zLmggZm9yIGRldGFpbHMgb24g
aG93IHRoZSBvcHRpb25zIHdvcmsuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05MDQyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpM
aW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVXaXRoRGlzYXNzZW1ibHkpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9MaW5rQnVmZmVyLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6Omxpa2VseVRvVGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3Vs
ZFRha2VTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3Bl
Y2lhbEZhc3RDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVw
ZXN0U2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNs
b3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpqaXRBZnRlcldhcm1VcCk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6aml0U29vbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNv
dW50UmVvcHRpbWl6YXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXApOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpvcHRpbWl6ZVNvb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4aXRDb3VudFRo
cmVzaG9sZEZvclJlb3B0aW1pemF0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpleGl0
Q291bnRUaHJlc2hvbGRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKToKKyAgICAgICAgKiBieXRl
Y29kZS9FeGVjdXRpb25Db3VudGVyLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGlvbkNvdW50ZXI6
OmNsaXBwZWRUaHJlc2hvbGQpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAg
ICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRD
b21waWxlRXZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChK
U0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6REZHOjpzaG91bGRTaG93RGlzYXNzZW1ibHkpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0Rh
dGE6OnNob3VsZFVzZURvdWJsZUZvcm1hdEFjY29yZGluZ1RvVm90ZSk6CisgICAgICAgICogaGVh
cC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tTZWdtZW50QWxsb2NhdG9y
OjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNo
cmlua1Jlc2VydmUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6TWFya1N0YWNrQXJy
YXkpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0ZUtub3du
UGFyYWxsZWwpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6ZHJhaW4pOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVkKToKKyAgICAgICAgKiBoZWFwL01hcmtT
dGFjay5oOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6Om1lcmdlT3BhcXVlUm9vdHNJZlByb2Zp
dGFibGUpOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmFkZE9wYXF1ZVJvb3QpOgorICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRvbmF0
ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE9wdGlt
aXphdGlvbkNoZWNrKToKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAocHJpbnRVc2FnZVN0
YXRlbWVudCk6CisgICAgICAgIChwYXJzZUFyZ3VtZW50cyk6CisgICAgICAgICogcnVudGltZS9J
bml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
Z09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpT
Qzo6ZW5hYmxlQXNzZW1ibGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OkpTR2xvYmFsT2JqZWN0KToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
b3ZlcnJpZGVPcHRpb25XaXRoSGV1cmlzdGljKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6aW5p
dGlhbGl6ZSk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlvbik6CisgICAgICAgIChK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9uczo6ZHVt
cE9wdGlvbik6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgIChKU0MpOgor
ICAgICAgICAoT3B0aW9ucyk6CisgICAgICAgIChFbnRyeUluZm8pOgorCiAyMDEyLTA3LTAyICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHOjpBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUgUGhhbnRvbUFyZ3VtZW50
cyBub2RlcyBpdCBjcmVhdGVzIGFyZSBub3Qgc2hvdWxkR2VuZXJhdGUoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTQsNiArNjE0LDExIEBAIHN0YXRpYyBOT19SRVRV
Uk4gdm9pZCBwcmludFVzYWdlU3RhdGVtZW4KICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLXMgICAg
ICAgICBJbnN0YWxscyBzaWduYWwgaGFuZGxlcnMgdGhhdCBleGl0IG9uIGEgY3Jhc2ggKFVuaXgg
cGxhdGZvcm1zIG9ubHkpXG4iKTsKICNlbmRpZgogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCAg
ICAgICAgIE91dHB1dCBleGl0IGNvZGUgYmVmb3JlIHRlcm1pbmF0aW5nXG4iKTsKKyAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC0tb3B0aW9ucyAgICAg
ICAgICAgICAgICAgIER1bXBzIGFsbCBKU0MgVk0gb3B0aW9ucyBhbmQgZXhpdHNcbiIpOworICAg
IGZwcmludGYoc3RkZXJyLCAiICAtLWR1bXBPcHRpb25zICAgICAgICAgICAgICBEdW1wcyBhbGwg
SlNDIFZNIG9wdGlvbnMgYmVmb3JlIGNvbnRpbnVpbmdcbiIpOworICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCiAgICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKIH0KQEAgLTYyMSw2ICs2MjYsOSBAQCBz
dGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRlbWVuCiBzdGF0aWMgdm9pZCBwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YsIENvbW1hbmRMaW5lJiBvcHRpb25zKQog
ewogICAgIGludCBpID0gMTsKKyAgICBib29sIG5lZWRUb0R1bXBPcHRpb25zID0gZmFsc2U7Cisg
ICAgYm9vbCBuZWVkVG9FeGl0ID0gZmFsc2U7CisKICAgICBmb3IgKDsgaSA8IGFyZ2M7ICsraSkg
ewogICAgICAgICBjb25zdCBjaGFyKiBhcmcgPSBhcmd2W2ldOwogICAgICAgICBpZiAoIXN0cmNt
cChhcmcsICItZiIpKSB7CkBAIC02NjIsNiArNjcwLDI2IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJn
dW1lbnRzKGludCBhcmdjLCBjaGEKICAgICAgICAgfQogICAgICAgICBpZiAoIXN0cmNtcChhcmcs
ICItaCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1oZWxwIikpCiAgICAgICAgICAgICBwcmludFVzYWdl
U3RhdGVtZW50KHRydWUpOworCisgICAgICAgIGlmICghc3RyY21wKGFyZywgIi0tb3B0aW9ucyIp
KSB7CisgICAgICAgICAgICBuZWVkVG9EdW1wT3B0aW9ucyA9IHRydWU7CisgICAgICAgICAgICBu
ZWVkVG9FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg
ICAgIGlmICghc3RyY21wKGFyZywgIi0tZHVtcE9wdGlvbnMiKSkgeworICAgICAgICAgICAgbmVl
ZFRvRHVtcE9wdGlvbnMgPSB0cnVlOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTZWUgaWYgdGhlIC0tIG9wdGlvbiBpcyBhIEpTQyBWTSBvcHRpb24uCisg
ICAgICAgIC8vIE5PVEU6IEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgYXJnIHN0YXJ0
cyB3aXRoICItLSIuIFNraXAgaXQuCisgICAgICAgIGlmIChKU0M6Ok9wdGlvbnM6OnNldE9wdGlv
bigmYXJnWzJdKSkgeworICAgICAgICAgICAgLy8gVGhlIGFyZyB3YXMgcmVjb2duaXplZCBhcyBh
IFZNIG9wdGlvbiBhbmQgaGFzIGJlZW4gcGFyc2VkLgorICAgICAgICAgICAgY29udGludWU7IC8v
IEp1c3QgY29udGludWUgd2l0aCB0aGUgbmV4dCBhcmcuIAorICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGhpcyBhcmcgaXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIFZNIG5vciBieSBqc2MuIFBhc3Mg
aXQgb24gdG8gdGhlCisgICAgICAgIC8vIHNjcmlwdC4KICAgICAgICAgb3B0aW9ucy5zY3JpcHRz
LmFwcGVuZChTY3JpcHQodHJ1ZSwgYXJndltpXSkpOwogICAgIH0KIApAQCAtNjcwLDYgKzY5OCwx
MSBAQCBzdGF0aWMgdm9pZCBwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhCiAKICAgICBmb3Ig
KDsgaSA8IGFyZ2M7ICsraSkKICAgICAgICAgb3B0aW9ucy5hcmd1bWVudHMuYXBwZW5kKGFyZ3Zb
aV0pOworCisgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQorICAgICAgICBKU0M6Ok9wdGlvbnM6
OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CisgICAgaWYgKG5lZWRUb0V4aXQpCisgICAgICAgIGV4
aXQoRVhJVF9TVUNDRVNTKTsKIH0KIAogaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5kZWYJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgRVhQT1JUUwogICAgID9kZWxldGVBbGxDb21w
aWxlZENvZGVASGVhcEBKU0NAQFFBRVhYWgogICAgID9kaXNwbGF5TmFtZUBKU0Z1bmN0aW9uQEpT
Q0BAUUFFP0JWVVN0cmluZ0AyQFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhR
QUROQUFfTkFBSEFBSUBaCisgICAgP2R1bXBBbGxPcHRpb25zQE9wdGlvbnNASlNDQEBTQVhQQVVf
aW9idWZAQEBaCiAgICAgP2R1bXBTYW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZF
eGVjU3RhdGVAMkBAWgogICAgID9lbXB0eUBTdHJpbmdJbXBsQFdURkBAU0FQQVYxMkBYWgogICAg
ID9lbnVtZXJhYmxlQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFCRV9OWFoKQEAgLTMwNSw2ICsz
MDYsNyBAQCBFWFBPUlRTCiAgICAgP3NldEdldHRlckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBR
QUVYVkpTVmFsdWVAMkBAWgogICAgID9zZXRMb2NAU3RhdGVtZW50Tm9kZUBKU0NAQFFBRVhISEBa
CiAgICAgP3NldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWRAV1RGQEBZQVhfTkBaCisgICAgP3Nl
dE9wdGlvbkBPcHRpb25zQEpTQ0BAU0FfTlBCREBaCiAgICAgP3NldE9yZGVyTG93ZXJGaXJzdEBD
b2xsYXRvckBXVEZAQFFBRVhfTkBaCiAgICAgP3NldFByb3RvdHlwZUBKU09iamVjdEBKU0NAQFFB
RVhBQVZKU0dsb2JhbERhdGFAMkBWSlNWYWx1ZUAyQEBaCiAgICAgP3NldFNldHRlckBQcm9wZXJ0
eURlc2NyaXB0b3JASlNDQEBRQUVYVkpTVmFsdWVAMkBAWgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxMjE3MTEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIExpbmtCdWZmZXI6OkNvZGVSZWYgTGlua0J1ZmZlcjo6
ZmluYWxpemUKIAogTGlua0J1ZmZlcjo6Q29kZVJlZiBMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGVX
aXRoRGlzYXNzZW1ibHkoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCiB7Ci0gICAgQVNTRVJUKE9w
dGlvbnM6OnNob3dEaXNhc3NlbWJseSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkpOwor
ICAgIEFTU0VSVChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKSB8fCBPcHRpb25zOjpzaG93REZH
RGlzYXNzZW1ibHkoKSk7CiAgICAgCiAgICAgQ29kZVJlZiByZXN1bHQgPSBmaW5hbGl6ZUNvZGVX
aXRob3V0RGlzYXNzZW1ibHkoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjc5
LDcgKzI3OSw3IEBAIHByaXZhdGU6CiAvLyBpcyB0cnVlLCBzbyB5b3UgY2FuIGhpZGUgZXhwZW5z
aXZlIGRpc2Fzc2VtYmx5LW9ubHkgY29tcHV0YXRpb25zIGluc2lkZSB0aGVyZS4KIAogI2RlZmlu
ZSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXJSZWZlcmVuY2UsIGRhdGFMb2dBcmd1bWVudHNGb3JI
ZWFkaW5nKSAgXAotICAgIEZJTkFMSVpFX0NPREVfSUYoT3B0aW9uczo6c2hvd0Rpc2Fzc2VtYmx5
LCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGluZykKKyAgICBG
SU5BTElaRV9DT0RFX0lGKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJseSgpLCBsaW5rQnVmZmVyUmVm
ZXJlbmNlLCBkYXRhTG9nQXJndW1lbnRzRm9ySGVhZGluZykKIAogfSAvLyBuYW1lc3BhY2UgSlND
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc3MSw3ICsyNzcxLDcgQEAgYm9vbCBDb2Rl
QmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwogI2Vu
ZGlmCiAKLSAgICBpZiAobV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPj0gT3B0aW9uczo6bWF4
aW11bU9wdGltaXphdGlvbkRlbGF5KQorICAgIGlmIChtX29wdGltaXphdGlvbkRlbGF5Q291bnRl
ciA+PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzOwpAQCAtMjc4Miw5ICsyNzgyLDkgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGlt
aXplTm93KCkKICAgICBkYXRhTG9nKCJQcm9maWxlIGhvdG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91
YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mVmFsdWVQ
cm9maWxlcygpLCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKICNlbmRpZgog
Ci0gICAgaWYgKCghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBP
cHRpb25zOjpkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZSkKLSAgICAgICAgJiYgKCF0b3RhbE51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKSA+PSBPcHRpb25zOjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSkKLSAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKSArIDEg
Pj0gT3B0aW9uczo6bWluaW11bU9wdGltaXphdGlvbkRlbGF5KQorICAgIGlmICgoIW51bWJlck9m
VmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gT3B0aW9uczo6ZGVzaXJlZFByb2Zp
bGVMaXZlbmVzc1JhdGUoKSkKKyAgICAgICAgJiYgKCF0b3RhbE51bWJlck9mVmFsdWVQcm9maWxl
cygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6
bnVtYmVyT2ZCdWNrZXRzIC8gdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSBPcHRpb25z
OjpkZXNpcmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSgpKQorICAgICAgICAmJiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIpICsgMSA+PSBPcHRpb25zOjptaW5p
bXVtT3B0aW1pemF0aW9uRGVsYXkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAg
QVNTRVJUKG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyIDwgc3RkOjpudW1lcmljX2xpbWl0czx1
aW50OF90Pjo6bWF4KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBpZiAoIW51bWJlck9mUmFyZUNhc2VQcm9maWxlcygp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHVuc2lnbmVkIHZh
bHVlID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5t
X2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9U
YWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkgLyBt
X2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJl
c2hvbGQ7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQoKSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1f
ZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVz
aG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGNvdWxkVGFrZVNsb3dD
YXNlKGludCBieXRlY29kZU9mZnNldCkKQEAgLTY3OSw3ICs2NzksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGlmICghbnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSByYXJl
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsK
LSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1p
bmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50
cnlDb3VudCA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3Vu
dCgpICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50
ID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogYWRkU3BlY2lhbEZhc3RDYXNlUHJvZmls
ZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC02OTksNyArNjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBpZiAoIW51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2Fz
ZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNv
dW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50ICYmIHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3BlY2lhbEZhc3RDYXNlQ291bnQpIC8gbV9leGVjdXRpb25FbnRyeUNv
dW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICAg
ICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNs
b3dDYXNlTWluaW11bUNvdW50KCkgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPihzcGVjaWFsRmFzdENh
c2VDb3VudCkgLyBtX2V4ZWN1dGlvbkVudHJ5Q291bnQgPj0gT3B0aW9uczo6bGlrZWx5VG9UYWtl
U2xvd0Nhc2VUaHJlc2hvbGQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBs
aWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNzA5LDcg
KzcwOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VD
b3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+
bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBz
cGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5t
X2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHNsb3dDYXNlQ291bnQgLSBz
cGVjaWFsRmFzdENhc2VDb3VudDsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25z
OjpsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+
KHZhbHVlKSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjps
aWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRpY19jYXN0PGRvdWJsZT4o
dmFsdWUpIC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNs
b3dDYXNlVGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlQW55U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNzE5LDcgKzcxOSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9
IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3Vu
dGVyOwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFs
RmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50
ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZSA9IHNsb3dDYXNlQ291bnQgKyBzcGVjaWFs
RmFzdENhc2VDb3VudDsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtl
bHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVl
KSAvIG1fZXhlY3V0aW9uRW50cnlDb3VudCA+PSBPcHRpb25zOjpsaWtlbHlUb1Rha2VTbG93Q2Fz
ZVRocmVzaG9sZDsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA+PSBPcHRpb25zOjpsaWtlbHlU
b1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpICYmIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUp
IC8gbV9leGVjdXRpb25FbnRyeUNvdW50ID49IE9wdGlvbnM6Omxpa2VseVRvVGFrZVNsb3dDYXNl
VGhyZXNob2xkKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGV4ZWN1
dGlvbkVudHJ5Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGlvbkVudHJ5Q291bnQ7IH0K
QEAgLTk0MSwxMiArOTQxLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
dm9pZCBqaXRBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fbGxpbnRFeGVj
dXRlQ291bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUQWZ0ZXJX
YXJtVXAsIHRoaXMpOworICAgICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1Ro
cmVzaG9sZChPcHRpb25zOjp0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCgpLCB0aGlzKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCBqaXRTb29uKCkKICAgICAgICAgewotICAg
ICAgICAgICAgbV9sbGludEV4ZWN1dGVDb3VudGVyLnNldE5ld1RocmVzaG9sZChPcHRpb25zOjp0
aHJlc2hvbGRGb3JKSVRTb29uLCB0aGlzKTsKKyAgICAgICAgICAgIG1fbGxpbnRFeGVjdXRlQ291
bnRlci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9ySklUU29vbigpLCB0aGlz
KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY29uc3QgRXhlY3V0aW9uQ291bnRlciYg
bGxpbnRFeGVjdXRlQ291bnRlcigpIGNvbnN0CkBAIC05NzcsMjUgKzk3NywyNSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgogICAgICAgICB1bnNpZ25l
ZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4KTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyIDw9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4KCkpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlvbigp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIrKzsK
LSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gT3B0aW9uczo6
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCi0gICAgICAgICAgICAgICAgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlciA9IE9wdGlvbnM6OnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
TWF4OworICAgICAgICAgICAgaWYgKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiBPcHRp
b25zOjpyZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCgpKQorICAgICAgICAgICAgICAgIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSBPcHRpb25zOjpyZW9wdGltaXphdGlvblJldHJ5
Q291bnRlck1heCgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCA8PCByZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigpOworICAgICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OnRocmVz
aG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IE9wdGlvbnM6OnRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICByZXR1cm4gT3B0aW9uczo6dGhyZXNo
b2xkRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90KiBhZGRyZXNzT2ZK
SVRFeGVjdXRlQ291bnRlcigpCkBAIC0xMDc1LDcgKzEwNzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgLy8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVT
b29uKCkKICAgICAgICAgewotICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRlci5zZXROZXdU
aHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uIDw8IHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyKCksIHRoaXMpOworICAgICAgICAgICAgbV9qaXRFeGVjdXRlQ291bnRl
ci5zZXROZXdUaHJlc2hvbGQoT3B0aW9uczo6dGhyZXNob2xkRm9yT3B0aW1pemVTb29uKCkgPDwg
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgdGhpcyk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHVpbnQzMl90IG9zckV4aXRDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9vc3JF
eGl0Q291bnRlcjsgfQpAQCAtMTEwNCwxMiArMTEwNCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgICAgIHVpbnQzMl90IGV4aXRDb3VudFRocmVzaG9sZEZvclJlb3B0aW1pemF0
aW9uKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkanVzdGVkRXhpdENvdW50VGhy
ZXNob2xkKE9wdGlvbnM6Om9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291
bnRGb3JSZW9wdGltaXphdGlvbigpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdWlu
dDMyX3QgZXhpdENvdW50VGhyZXNob2xkRm9yUmVvcHRpbWl6YXRpb25Gcm9tTG9vcCgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRp
b25zOjpvc3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wKTsKKyAgICAgICAgICAg
IHJldHVybiBhZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZChPcHRpb25zOjpvc3JFeGl0Q291bnRG
b3JSZW9wdGltaXphdGlvbkZyb21Mb29wKCkpOwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBz
aG91bGRSZW9wdGltaXplTm93KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FeGVjdXRpb25Db3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgVCBjbGlwcGVkVGhyZXNo
b2xkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFQgdGhyZXNob2xkKQogICAgIHsKICAg
ICAgICAgaW50MzJfdCBtYXhUaHJlc2hvbGQ7Ci0gICAgICAgIGlmIChPcHRpb25zOjpyYW5kb21p
emVFeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHMpCi0gICAgICAgICAgICBtYXhUaHJl
c2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBPcHRpb25zOjptYXhp
bXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOworICAgICAgICBpZiAoT3B0aW9u
czo6cmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCkpCisgICAgICAg
ICAgICBtYXhUaHJlc2hvbGQgPSBnbG9iYWxPYmplY3QtPndlYWtSYW5kb21JbnRlZ2VyKCkgJSBP
cHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1heFRocmVzaG9sZCA9IE9wdGlvbnM6Om1heGltdW1FeGVj
dXRpb25Db3VudHNCZXR3ZWVuQ2hlY2twb2ludHM7CisgICAgICAgICAgICBtYXhUaHJlc2hvbGQg
PSBPcHRpb25zOjptYXhpbXVtRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzKCk7CiAg
ICAgICAgIGlmICh0aHJlc2hvbGQgPiBtYXhUaHJlc2hvbGQpCiAgICAgICAgICAgICB0aHJlc2hv
bGQgPSBtYXhUaHJlc2hvbGQ7CiAgICAgICAgIHJldHVybiB0aHJlc2hvbGQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsNyArMTI3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICB1bnNpZ25lZCBkZXB0aCA9IDA7CiAgICAg
Zm9yIChJbmxpbmVTdGFja0VudHJ5KiBlbnRyeSA9IG1faW5saW5lU3RhY2tUb3A7IGVudHJ5OyBl
bnRyeSA9IGVudHJ5LT5tX2NhbGxlcikgewogICAgICAgICArK2RlcHRoOwotICAgICAgICBpZiAo
ZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5nRGVwdGgpCisgICAgICAgIGlmIChkZXB0
aCA+PSBPcHRpb25zOjptYXhpbXVtSW5saW5pbmdEZXB0aCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KICAgICAgICAgCiAgICAgICAgIGlmIChlbnRyeS0+
ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDI5
ICs0MSwyOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBjaGVjayBvcGNv
ZGVzLgogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gT3B0aW9uczo6
bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisgICAgcmV0dXJu
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1heGltdW1PcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiBpbmxpbmUgYm9vbCBtaWdodENv
bXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVtT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQoKTsKIH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlv
bkNvdW50KCkgPD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9w
dGlvbnM6Om1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9
CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkg
PD0gT3B0aW9uczo6bWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IE9wdGlvbnM6Om1h
eGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50KCk7CiB9CiAKIGlubGlu
ZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQog
ewotICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjpt
YXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudAorICAg
IHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBPcHRpb25zOjptYXhpbXVt
RnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCgpCiAgICAgICAg
ICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5uZWVkc0FjdGl2YXRpb24oKTsKIH0K
IGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IE9wdGlvbnM6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0g
T3B0aW9uczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudCgpCiAgICAgICAgICYmICFjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5u
ZWVkc0FjdGl2YXRpb24oKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bW1vbi5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgZW51bSBPcHRpbWl6
YXRpb25GaXhwb2ludFN0YXRlIHsgRml4cG9pbgogCiBpbmxpbmUgYm9vbCBzaG91bGRTaG93RGlz
YXNzZW1ibHkoKQogewotICAgIHJldHVybiBPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkgfHwgT3B0
aW9uczo6c2hvd0RGR0Rpc2Fzc2VtYmx5OworICAgIHJldHVybiBPcHRpb25zOjpzaG93RGlzYXNz
ZW1ibHkoKSB8fCBPcHRpb25zOjpzaG93REZHRGlzYXNzZW1ibHkoKTsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiREZH
UmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgi
CiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVk
ZSAiT3B0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTYw
LDcgKzYxLDEwIEBAIGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU0KICAg
ICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIAorCisgICAgaWYgKCFPcHRpb25zOjp1c2VERkdK
SVQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQogICAgIGRhdGFMb2coIkRGRyBjb21waWxpbmcgY29kZSBibG9jayAlcCglcCkgZm9yIGV4
ZWN1dGFibGUgJXAsIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgPSAldS5cbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsNyBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAogCiBib29sIE9T
UkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRm
Z0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKIHsKLSAgICBpZiAoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0NvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIo
KSA8PSBPcHRpb25zOjpvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUpCisgICAg
aWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRD
b3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICBGcmVxdWVudEV4aXRTaXRlIGV4
aXRTaXRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyAr
MTc2LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGhh
cyBiZWVuIHZvdGVkIHRvIGJlY29tZSBhIGRvdWJsZSwgdGhlbiBtYWtlIGl0IGEKICAgICAgICAg
Ly8gZG91YmxlLgotICAgICAgICBpZiAoZG91YmxlVm90ZVJhdGlvKCkgPj0gT3B0aW9uczo6ZG91
YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0KQorICAgICAgICBpZiAoZG91YmxlVm90ZVJhdGlv
KCkgPj0gT3B0aW9uczo6ZG91YmxlVm90ZVJhdGlvRm9yRG91YmxlRm9ybWF0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMTIxNzEx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsNyArNjUsNyBAQCBNYXJrU3RhY2tTZWdtZW50KiBNYXJrU3RhY2tTZWdtZW50
QWxsb2NhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya1N0
YWNrU2VnbWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KE9wdGlvbnM6OmdjTWFy
a1N0YWNrU2VnbWVudFNpemUpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFya1N0YWNrU2Vn
bWVudCo+KE9TQWxsb2NhdG9yOjpyZXNlcnZlQW5kQ29tbWl0KE9wdGlvbnM6OmdjTWFya1N0YWNr
U2VnbWVudFNpemUoKSkpOwogfQogCiB2b2lkIE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnJl
bGVhc2UoTWFya1N0YWNrU2VnbWVudCogc2VnbWVudCkKQEAgLTg2LDEzICs4NiwxMyBAQCB2b2lk
IE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3I6OnNocmlua1JlCiAgICAgd2hpbGUgKHNlZ21lbnRz
KSB7CiAgICAgICAgIE1hcmtTdGFja1NlZ21lbnQqIHRvRnJlZSA9IHNlZ21lbnRzOwogICAgICAg
ICBzZWdtZW50cyA9IHNlZ21lbnRzLT5tX3ByZXZpb3VzOwotICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXRBbmRSZWxlYXNlKHRvRnJlZSwgT3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdtZW50U2l6
ZSk7CisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFuZFJlbGVhc2UodG9GcmVlLCBPcHRp
b25zOjpnY01hcmtTdGFja1NlZ21lbnRTaXplKCkpOwogICAgIH0KIH0KIAogTWFya1N0YWNrQXJy
YXk6Ok1hcmtTdGFja0FycmF5KE1hcmtTdGFja1NlZ21lbnRBbGxvY2F0b3ImIGFsbG9jYXRvcikK
ICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKLSAgICAsIG1fc2VnbWVudENhcGFjaXR5KE1h
cmtTdGFja1NlZ21lbnQ6OmNhcGFjaXR5RnJvbVNpemUoT3B0aW9uczo6Z2NNYXJrU3RhY2tTZWdt
ZW50U2l6ZSkpCisgICAgLCBtX3NlZ21lbnRDYXBhY2l0eShNYXJrU3RhY2tTZWdtZW50OjpjYXBh
Y2l0eUZyb21TaXplKE9wdGlvbnM6OmdjTWFya1N0YWNrU2VnbWVudFNpemUoKSkpCiAgICAgLCBt
X3RvcCgwKQogICAgICwgbV9udW1iZXJPZlByZXZpb3VzU2VnbWVudHMoMCkKIHsKQEAgLTI2Miw3
ICsyNjIsNyBAQCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpNYXJrU3RhY2tUaHJlCiAgICAg
LCBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQoZmFsc2UpCiB7CiAjaWYgRU5BQkxFKFBBUkFM
TEVMX0dDKQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJPZkdD
TWFya2VyczsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51
bWJlck9mR0NNYXJrZXJzKCk7ICsraSkgewogICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0
b3IgPSBuZXcgU2xvdFZpc2l0b3IoKnRoaXMpOwogICAgICAgICBtX21hcmtpbmdUaHJlYWRzTWFy
a1N0YWNrLmFwcGVuZChzbG90VmlzaXRvcik7CiAgICAgICAgIG1fbWFya2luZ1RocmVhZHMuYXBw
ZW5kKGNyZWF0ZVRocmVhZChtYXJraW5nVGhyZWFkU3RhcnRGdW5jLCBzbG90VmlzaXRvciwgIkph
dmFTY3JpcHRDb3JlOjpNYXJraW5nIikpOwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmRvbmF0ZUtub3duUGFyYWxsZWwoKQogICAgIC8vIE90aGVyd2lzZSwgYXNzdW1lIHRo
YXQgYSB0aHJlYWQgd2lsbCBnbyBpZGxlIHNvb24sIGFuZCBkb25hdGUuCiAgICAgbV9zdGFjay5k
b25hdGVTb21lQ2VsbHNUbyhtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjayk7CiAKLSAgICBpZiAo
bV9zaGFyZWQubV9udW1iZXJPZkFjdGl2ZVBhcmFsbGVsTWFya2VycyA8IE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzKQorICAgIGlmIChtX3NoYXJlZC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxN
YXJrZXJzIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSkKICAgICAgICAgbV9zaGFyZWQu
bV9tYXJraW5nQ29uZGl0aW9uLmJyb2FkY2FzdCgpOwogfQogCkBAIC0zNzcsMTAgKzM3NywxMCBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbigpCiAgICAgQVNTRVJUKG1faXNJblBhcmFsbGVsTW9k
ZSk7CiAgICAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgaWYgKE9wdGlvbnM6Om51bWJl
ck9mR0NNYXJrZXJzID4gMSkgeworICAgIGlmIChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
ID4gMSkgewogICAgICAgICB3aGlsZSAoIW1fc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBtX3N0YWNrLnJlZmlsbCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudGRvd24g
PSBPcHRpb25zOjptaW5pbXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2U7IG1fc3RhY2su
Y2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgY291bnRkb3duID0gT3B0aW9uczo6bWluaW11bU51bWJlck9mU2NhbnNCZXR3ZWVuUmViYWxh
bmNlKCk7IG1fc3RhY2suY2FuUmVtb3ZlTGFzdCgpICYmIGNvdW50ZG93bi0tOykKICAgICAgICAg
ICAgICAgICB2aXNpdENoaWxkcmVuKCp0aGlzLCBtX3N0YWNrLnJlbW92ZUxhc3QoKSk7CiAgICAg
ICAgICAgICBkb25hdGVLbm93blBhcmFsbGVsKCk7CiAgICAgICAgIH0KQEAgLTQwMSwxNCArNDAx
LDE0IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKIHsKICAgICBB
U1NFUlQobV9pc0luUGFyYWxsZWxNb2RlKTsKICAgICAKLSAgICBBU1NFUlQoT3B0aW9uczo6bnVt
YmVyT2ZHQ01hcmtlcnMpOworICAgIEFTU0VSVChPcHRpb25zOjpudW1iZXJPZkdDTWFya2Vycygp
KTsKICAgICAKICAgICBib29sIHNob3VsZEJlUGFyYWxsZWw7CiAKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCi0gICAgc2hvdWxkQmVQYXJhbGxlbCA9IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJz
ID4gMTsKKyAgICBzaG91bGRCZVBhcmFsbGVsID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMo
KSA+IDE7CiAjZWxzZQotICAgIEFTU0VSVChPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyA9PSAx
KTsKKyAgICBBU1NFUlQoT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSA9PSAxKTsKICAgICBz
aG91bGRCZVBhcmFsbGVsID0gZmFsc2U7CiAjZW5kaWYKICAgICAKQEAgLTQ2OSw3ICs0NjksNyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCBpZGxl
VGhyZWFkQ291bnQgPSBPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycyAtIG1fc2hhcmVkLm1fbnVt
YmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CisgICAgICAgICAgICBzaXplX3QgaWRsZVRocmVh
ZENvdW50ID0gT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIG1fc2hhcmVkLm1fbnVtYmVy
T2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnM7CiAgICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNl
bGxzRnJvbShtX3NoYXJlZC5tX3NoYXJlZE1hcmtTdGFjaywgaWRsZVRocmVhZENvdW50KTsKICAg
ICAgICAgICAgIG1fc2hhcmVkLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlz
aW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogICAgICAgICB2b2lkIG1lcmdlT3BhcXVlUm9vdHNJZlByb2ZpdGFibGUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fb3BhcXVlUm9vdHMuc2l6
ZSgpKSA8IE9wdGlvbnM6Om9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZCkKKyAgICAgICAgICAgIGlm
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGFxdWVSb290cy5zaXplKCkpIDwgT3B0aW9uczo6
b3BhcXVlUm9vdE1lcmdlVGhyZXNob2xkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgbWVyZ2VPcGFxdWVSb290cygpOwogICAgICAgICB9CkBAIC0zNTAsNyArMzUwLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIHZvaWQgTWFya1N0YWNrOjphZGRPcGFxdWVS
b290KHZvaWQqIHJvb3QpCiAgICAgewogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLSAgICAgICAg
aWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzID09IDEpIHsKKyAgICAgICAgaWYgKE9wdGlv
bnM6Om51bWJlck9mR0NNYXJrZXJzKCkgPT0gMSkgewogICAgICAgICAgICAgLy8gUHV0IGRpcmVj
dGx5IGludG8gdGhlIHNoYXJlZCBIYXNoU2V0LgogICAgICAgICAgICAgbV9zaGFyZWQubV9vcGFx
dWVSb290cy5hZGQocm9vdCk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZG9uYXRlKCkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX2lzSW5QYXJhbGxlbE1vZGUpOwotICAgICAgICBpZiAoT3B0aW9uczo6bnVtYmVyT2ZH
Q01hcmtlcnMgPT0gMSkKKyAgICAgICAgaWYgKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkg
PT0gMSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGRvbmF0ZUtub3du
UGFyYWxsZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDEy
MTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTksNyArOTksNyBAQCB2b2lkIEpJVDo6ZW1pdE9wdGltaXphdGlvbkNoZWNrKE9wdGlt
aXphCiAgICAgaWYgKCFjYW5CZU9wdGltaXplZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihTaWduZWQsIFRydXN0ZWRJbW0zMihr
aW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJ
bmNyZW1lbnRGb3JMb29wIDogT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHVybiksIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNv
dW50ZXIoKSkpOworICAgIEp1bXAgc2tpcE9wdGltaXplID0gYnJhbmNoQWRkMzIoU2lnbmVkLCBU
cnVzdGVkSW1tMzIoa2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBPcHRpb25zOjpleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpIDogT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRl
ckluY3JlbWVudEZvclJldHVybigpKSwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRy
ZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhp
cywgY3RpX29wdGltaXplKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tMzIo
bV9ieXRlY29kZU9mZnNldCkpOwogICAgIGlmIChraW5kID09IEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDcgKzUzLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogewog
ICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUoKTsKICAgICBXVEY6OmluaXRp
YWxpemVUaHJlYWRpbmcoKTsKLSAgICBPcHRpb25zOjppbml0aWFsaXplT3B0aW9ucygpOworICAg
IE9wdGlvbnM6OmluaXRpYWxpemUoKTsKICNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiAxMjE3MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIGV4dGVybiBjb25zdCBI
YXNoVGFibGUgc3RyaW5nQ29uc3RydWN0b3IKICNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5B
QkxFKENMQVNTSUNfSU5URVJQUkVURVIpIHx8IEVOQUJMRShMTElOVCkpCiBzdGF0aWMgYm9vbCBl
bmFibGVBc3NlbWJsZXIoRXhlY3V0YWJsZUFsbG9jYXRvciYgZXhlY3V0YWJsZUFsbG9jYXRvcikK
IHsKLSAgICBpZiAoIWV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpIHx8ICFPcHRpb25zOjp1
c2VKSVQpCisgICAgaWYgKCFleGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWQoKSB8fCAhT3B0aW9u
czo6dXNlSklUKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogI2lmIFVTRShDRikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJ
KHJldmlzaW9uIDEyMTcxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIHZvaWQKIEpTR2xvYmFsT2JqZWN0OjpKU0dsb2Jh
bE9iamVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBHbG9iYWxPYmplY3RNZXRob2RUYWJsZSogZ2xvYmFsT2JqZWN0TWV0aG9kVGFibGUpCiAg
ICAgOiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0KGdsb2JhbERhdGEsIHN0cnVjdHVyZSwgJm1f
c3ltYm9sVGFibGUpCiAgICAgLCBtX2dsb2JhbFNjb3BlQ2hhaW4oKQotICAgICwgbV93ZWFrUmFu
ZG9tKE9wdGlvbnM6OmZvcmNlV2Vha1JhbmRvbVNlZWQgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFu
ZG9tU2VlZCA6IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKSkKKyAgICAsIG1fd2Vha1JhbmRv
bShPcHRpb25zOjpmb3JjZVdlYWtSYW5kb21TZWVkKCkgPyBPcHRpb25zOjpmb3JjZWRXZWFrUmFu
ZG9tU2VlZCgpIDogc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbU51bWJlcigpICogKHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSArIDEuMCkpKQogICAgICwgbV9ldmFsRW5h
YmxlZCh0cnVlKQogICAgICwgbV9nbG9iYWxPYmplY3RNZXRob2RUYWJsZShnbG9iYWxPYmplY3RN
ZXRob2RUYWJsZSA/IGdsb2JhbE9iamVjdE1ldGhvZFRhYmxlIDogJnNfZ2xvYmFsT2JqZWN0TWV0
aG9kVGFibGUpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDEzIEBACiAjaW5jbHVkZSAi
T3B0aW9ucy5oIgogCiAjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL051bWJl
ck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lmIE9TKERB
UldJTikgJiYgRU5BQkxFKFBBUkFMTEVMX0dDKQogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KQEAg
LTM3LDY3ICs0Miw5IEBACiAvLyBTZXQgdG8gMSB0byBjb250cm9sIHRoZSBoZXVyaXN0aWNzIHVz
aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KICNkZWZpbmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJ
U1RJQ1MgMAogCi0jaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCi0jaW5jbHVkZSA8c3Rk
aW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBPcHRpb25zIHsKLQotYm9vbCB1
c2VKSVQ7Ci0KLWJvb2wgc2hvd0Rpc2Fzc2VtYmx5OwotYm9vbCBzaG93REZHRGlzYXNzZW1ibHk7
Ci0KLXVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50
OwotCi11bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudDsKLXVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKLXVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRo
OworbmFtZXNwYWNlIEpTQyB7CiAKLWludDMyX3QgdGhyZXNob2xkRm9ySklUQWZ0ZXJXYXJtVXA7
Ci1pbnQzMl90IHRocmVzaG9sZEZvckpJVFNvb247Ci0KLWludDMyX3QgdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlcldhcm1VcDsKLWludDMyX3QgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlckxvbmdX
YXJtVXA7Ci1pbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKLQotaW50MzJfdCBleGVj
dXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcDsKLWludDMyX3QgZXhlY3V0aW9uQ291bnRlcklu
Y3JlbWVudEZvclJldHVybjsKLQotYm9vbCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHM7Ci1pbnQzMl90IG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVuQ2hlY2tw
b2ludHM7Ci0KLWRvdWJsZSBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKLWRvdWJsZSBj
b3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKLXVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNl
TWluaW11bUNvdW50OwotdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0K
LWRvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGU7Ci11bnNpZ25lZCBv
c3JFeGl0Q291bnRGb3JSZW9wdGltaXphdGlvbjsKLXVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJl
b3B0aW1pemF0aW9uRnJvbUxvb3A7Ci0KLXVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyTWF4OwotdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJTdGVwOwotCi11bnNp
Z25lZCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXk7Ci11bnNpZ25lZCBtYXhpbXVtT3B0aW1pemF0
aW9uRGVsYXk7Ci1kb3VibGUgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGU7Ci1kb3VibGUgZGVz
aXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0KLWRvdWJsZSBkb3VibGVWb3RlUmF0aW9Gb3JEb3Vi
bGVGb3JtYXQ7Ci0KLXVuc2lnbmVkIG1pbmltdW1OdW1iZXJPZlNjYW5zQmV0d2VlblJlYmFsYW5j
ZTsKLXVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVudFNpemU7Ci11bnNpZ25lZCBudW1iZXJPZkdD
TWFya2VyczsKLXVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsKLQotYm9vbCBmb3Jj
ZVdlYWtSYW5kb21TZWVkOwotdW5zaWduZWQgZm9yY2VkV2Vha1JhbmRvbVNlZWQ7Ci0KLSNpZiBF
TkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKIHN0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIq
IHN0cmluZywgYm9vbCYgdmFsdWUpCiB7CiAgICAgaWYgKCFzdHJjYXNlY21wKHN0cmluZywgInRy
dWUiKSB8fCAhc3RyY2FzZWNtcChzdHJpbmcsICJ5ZXMiKSB8fCAhc3RyY21wKHN0cmluZywgIjEi
KSkgewpAQCAtMTI2LDI3ICs3MywyMiBAQCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBjaGFyKiBz
dHJpbmcsIGRvCiAgICAgcmV0dXJuIHNzY2FuZihzdHJpbmcsICIlbGYiLCAmdmFsdWUpID09IDE7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Ci12b2lkIHNldEhldXJpc3Rp
YyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSwgVSB2YWx1ZSkKKyNpZiBFTkFCTEUoUlVO
X1RJTUVfSEVVUklTVElDUykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIG92ZXJyaWRlT3B0
aW9uV2l0aEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBj
b25zdCBjaGFyKiBzdHJpbmdWYWx1ZSA9IGdldGVudihuYW1lKTsKLSAgICBpZiAoIXN0cmluZ1Zh
bHVlKSB7Ci0gICAgICAgIHZhcmlhYmxlID0gc2FmZUNhc3Q8VD4odmFsdWUpOworICAgIGlmICgh
c3RyaW5nVmFsdWUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgCiAgICAgaWYgKHBhcnNl
KHN0cmluZ1ZhbHVlLCB2YXJpYWJsZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmcHJp
bnRmKHN0ZGVyciwgIldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSAlcz0lc1xuIiwgbmFtZSwgc3Ry
aW5nVmFsdWUpOwotICAgIHZhcmlhYmxlID0gc2FmZUNhc3Q8VD4odmFsdWUpOwogfQotCi0jZGVm
aW5lIFNFVCh2YXJpYWJsZSwgdmFsdWUpIHNldEhldXJpc3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2
YXJpYWJsZSwgdmFsdWUpCi0jZWxzZQotI2RlZmluZSBTRVQodmFyaWFibGUsIHZhbHVlKSB2YXJp
YWJsZSA9IHZhbHVlCiAjZW5kaWYKIAorCiBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU51bWJlck9m
R0NNYXJrZXJzKGludCBtYXhOdW1iZXJPZkdDTWFya2VycykKIHsKICAgICBpbnQgY3B1c1RvVXNl
ID0gMTsKQEAgLTE2Myw3NiArMTA1LDExNCBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZU51bWJl
ck9mR0NNYXJrZXJzCiAgICAgcmV0dXJuIGNwdXNUb1VzZTsKIH0KIAotdm9pZCBpbml0aWFsaXpl
T3B0aW9ucygpCi17Ci0gICAgU0VUKHVzZUpJVCwgdHJ1ZSk7Ci0gICAgCi0gICAgU0VUKHNob3dE
aXNhc3NlbWJseSwgZmFsc2UpOwotICAgIFNFVChzaG93REZHRGlzYXNzZW1ibHksIGZhbHNlKTsg
Ly8gREZHIGRpc2Fzc2VtYmx5IGlzIHNob3duIGlmIHNob3dEaXNhc3NlbWJseSB8fCBzaG93REZH
RGlzYXNzZW1ibHkKLSAgICAKLSAgICBTRVQobWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQsIDEwMDAwKTsKLSAgICAKLSAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9y
Q2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDE4MCk7Ci0gICAgU0VUKG1heGlt
dW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEw
MCk7Ci0gICAgCi0gICAgU0VUKG1heGltdW1JbmxpbmluZ0RlcHRoLCA1KTsKLQotICAgIFNFVCh0
aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcCwgICAgIDEwMCk7Ci0gICAgU0VUKHRocmVzaG9sZEZv
ckpJVFNvb24sICAgICAgICAgICAgMTAwKTsKIAotICAgIFNFVCh0aHJlc2hvbGRGb3JPcHRpbWl6
ZUFmdGVyV2FybVVwLCAgICAgMTAwMCk7Ci0gICAgU0VUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwLCA1MDAwKTsKLSAgICBTRVQodGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAg
ICAgICAgICAgIDEwMDApOworT3B0aW9uczo6RW50cnkgT3B0aW9uczo6c19vcHRpb25zW09wdGlv
bnM6Om51bWJlck9mT3B0aW9uc107CiAKLSAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVu
dEZvckxvb3AsICAgMSk7Ci0gICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4sIDE1KTsKLSAgICAKLSAgICBTRVQocmFuZG9taXplRXhlY3V0aW9uQ291bnRzQmV0d2VlbkNo
ZWNrcG9pbnRzLCBmYWxzZSk7Ci0gICAgU0VUKG1heGltdW1FeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHMsIDEwMDApOworLy8gUmVhbGl6ZSB0aGUgbmFtZXMgZm9yIGVhY2ggb2YgdGhl
IG9wdGlvbnM6Citjb25zdCBPcHRpb25zOjpFbnRyeUluZm8gT3B0aW9uczo6c19vcHRpb25zSW5m
b1tPcHRpb25zOjpudW1iZXJPZk9wdGlvbnNdID0geworI2RlZmluZSBGT1JfRUFDSF9PUFRJT04o
dHlwZV8sIG5hbWVfLCBkZWZhdWx0VmFsdWVfKSBcCisgICAgeyAjbmFtZV8sIE9wdGlvbnM6OnR5
cGVfIyNUeXBlIH0sCisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZP
Ul9FQUNIX09QVElPTgorfTsKKwordm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKK3sKKyAgICAv
LyBJbml0aWFsaXplIGVhY2ggb2YgdGhlIG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVl
czoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykg
XAorICAgIG5hbWVfKCkgPSBkZWZhdWx0VmFsdWVfOworICAgIEpTQ19PUFRJT05TKEZPUl9FQUNI
X09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04KKworICAgIC8vIEFsbG93IGVudmlyb25t
ZW50IHZhcnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBhcHBsaWNhYmxlLgorICAgIC8vIFRoZSBl
dm4gdmFyIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgb3B0aW9uIHByZWZpeGVkIHdpdGgKKyAg
ICAvLyAiSlNDXyIuCisjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCisjZGVmaW5lIEZP
Ul9FQUNIX09QVElPTih0eXBlXywgbmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICBvdmVycmlk
ZU9wdGlvbldpdGhIZXVyaXN0aWMobmFtZV8oKSwgIkpTQ18iICNuYW1lXyk7CisgICAgSlNDX09Q
VElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElPTgorICAgIAorI2Vu
ZGlmIC8vIFJVTl9USU1FX0hFVVJJU1RJQ1MKKworICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVy
ZSBuZWVkZWQgYW5kIG1ha2UgY29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CisgICAgQVNTRVJU
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkgPj0gdGhyZXNob2xkRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpKTsKKyAgICBBU1NFUlQodGhyZXNob2xkRm9yT3B0aW1pemVBZnRl
cldhcm1VcCgpID49IHRocmVzaG9sZEZvck9wdGltaXplU29vbigpKTsKKyAgICBBU1NFUlQodGhy
ZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpID49IDApOwogCi0gICAgU0VUKGxpa2VseVRv
VGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAwLjE1KTsKLSAgICBTRVQoY291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNv
bWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cgY2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxp
bmtpbmcgb3IgY2FjaGluZy4KLSAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQsIDEwMCk7Ci0gICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50LCAgICAxMCk7
Ci0gICAgCi0gICAgU0VUKG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSwgIDAu
Myk7Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uLCAgICAgICAgIDEwMCk7
Ci0gICAgU0VUKG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3AsIDUpOwotCi0g
ICAgU0VUKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3RlcCwgMSk7Ci0KLSAgICBTRVQobWlu
aW11bU9wdGltaXphdGlvbkRlbGF5LCAgIDEpOwotICAgIFNFVChtYXhpbXVtT3B0aW1pemF0aW9u
RGVsYXksICAgNSk7Ci0gICAgU0VUKGRlc2lyZWRQcm9maWxlTGl2ZW5lc3NSYXRlLCAwLjc1KTsK
LSAgICBTRVQoZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGUsIDAuMzUpOwotICAgIAotICAgIFNF
VChkb3VibGVWb3RlUmF0aW9Gb3JEb3VibGVGb3JtYXQsIDIpOwotICAgIAotICAgIFNFVChtaW5p
bXVtTnVtYmVyT2ZTY2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEwMCk7Ci0gICAgU0VUKGdjTWFya1N0
YWNrU2VnbWVudFNpemUsICAgICAgICAgICAgICAgcGFnZVNpemUoKSk7Ci0gICAgU0VUKG9wYXF1
ZVJvb3RNZXJnZVRocmVzaG9sZCwgICAgICAgICAgICAgMTAwMCk7Ci0gICAgU0VUKG51bWJlck9m
R0NNYXJrZXJzLCBjb21wdXRlTnVtYmVyT2ZHQ01hcmtlcnMoNykpOyAvLyBXZSBkb24ndCBzY2Fs
ZSBzbyB3ZWxsIGJleW9uZCA3LgotCi0gICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwID49IHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXApOwotICAgIEFT
U0VSVCh0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyV2FybVVwID49IHRocmVzaG9sZEZvck9wdGlt
aXplU29vbik7Ci0gICAgQVNTRVJUKHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPj0g
MCk7Ci0gICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmVvcHRp
bWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkKICAgICAvLyB0aGUgbGFyZ2Vz
dCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXhlY3V0ZSBjb3VudGVyLCB3
aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUgZXhlY3V0aW9uIGNvdW50ZXIg
YnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5kcwogICAgIC8vIHVwIGJlaW5n
IDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJpYmxlOyBpdCBwcm9iYWJseSB0YWtlcyB1
cCB+MTAwIGN5Y2xlcwogICAgIC8vIHRvdGFsIG9uIGEgMzItYml0IHByb2Nlc3Nvci4KLSAgICBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7Ci0gICAgd2hpbGUgKChzdGF0aWNfY2Fz
dDxpbnQ2NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCkgPDwgKHJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpIDw9IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSkKLSAgICAgICAgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgrKzsKLSAgICAKLSAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0
X3Q+KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlck1heCkgPiAwKTsKLSAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+
KHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCkgPD0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWF4KCkpKTsKLSAgICAKLSAgICBTRVQoZm9yY2VXZWFrUmFuZG9tU2VlZCwg
ZmFsc2UpOwotICAgIFNFVChmb3JjZWRXZWFrUmFuZG9tU2VlZCwgMCk7CisgICAgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgoKSA9IDA7CisgICAgd2hpbGUgKChzdGF0aWNfY2FzdDxpbnQ2
NF90Pih0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSA8PCAocmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXJNYXgoKSArIDEpKSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDMyPjo6bWF4KCkpKQorICAgICAgICByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCgpKys7CisKKyAgICBBU1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KHRo
cmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpIDw8IHJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyTWF4KCkpID4gMCk7CisgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxpbnQ2NF90Pih0
aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSA8PCByZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlck1heCgpKSA8PSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om51bWVyaWNfbGlt
aXRzPGludDMyPjo6bWF4KCkpKTsKK30KKworLy8gUGFyc2VzIGEgc2luZ2xlIGNvbW1hbmQgbGlu
ZSBvcHRpb24gaW4gdGhlIGZvcm1hdCAiPG9wdGlvbk5hbWU+PTx2YWx1ZT4iCisvLyAobm8gc3Bh
Y2VzIGFsbG93ZWQpIGFuZCBzZXQgdGhlIHNwZWNpZmllZCBvcHRpb24gaWYgYXBwcm9wcmlhdGUu
Citib29sIE9wdGlvbnM6OnNldE9wdGlvbihjb25zdCBjaGFyKiBhcmcpCit7CisgICAgLy8gYXJn
IHNob3VsZCBsb29rIGxpa2UgdGhpczoKKyAgICAvLyAgIDxqc2NPcHRpb25OYW1lPj08YXBwcm9w
cmlhdGUgdmFsdWU+CisgICAgY29uc3QgY2hhciogZXF1YWxTdHIgPSBzdHJjaHIoYXJnLCAnPScp
OworICAgIGlmICghZXF1YWxTdHIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IGNoYXIqIHZhbHVlU3RyID0gZXF1YWxTdHIgKyAxOworCisgICAgLy8gRm9yIGVhY2ggb3B0aW9u
LCBjaGVjayBpZiB0aGUgc3BlY2lmeSBhcmcgaXMgYSBtYXRjaC4gSWYgc28sIHNldCB0aGUgYXJn
CisgICAgLy8gaWYgdGhlIHZhbHVlIG1ha2VzIHNlbnNlLiBPdGhlcndpc2UsIG1vdmUgb24gdG8g
Y2hlY2tpbmcgdGhlIG5leHQgb3B0aW9uLgorI2RlZmluZSBGT1JfRUFDSF9PUFRJT04odHlwZV8s
IG5hbWVfLCBkZWZhdWx0VmFsdWVfKSAgICBcCisgICAgaWYgKCFzdHJuY21wKGFyZywgI25hbWVf
LCBlcXVhbFN0ciAtIGFyZykpIHsgICAgICAgIFwKKyAgICAgICAgdHlwZV8gdmFsdWU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBib29sIHN1Y2Nlc3MgPSBw
YXJzZSh2YWx1ZVN0ciwgdmFsdWUpOyAgICAgICAgICBcCisgICAgICAgIGlmIChzdWNjZXNzKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG5hbWVfKCkg
PSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJu
IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmV0dXJu
IGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworICAg
IEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKKyN1bmRlZiBGT1JfRUFDSF9PUFRJT04KKwor
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIG9wdGlvbiBtYXRjaGVkLgogfQogCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6T3B0aW9ucwordm9pZCBPcHRpb25zOjpkdW1wQWxsT3B0aW9ucyhGSUxF
KiBzdHJlYW0pCit7CisgICAgZnByaW50ZihzdHJlYW0sICJKU0MgcnVudGltZSBvcHRpb25zOlxu
Iik7CisgICAgZm9yIChpbnQgaWQgPSAwOyBpZCA8IG51bWJlck9mT3B0aW9uczsgaWQrKykKKyAg
ICAgICAgZHVtcE9wdGlvbihzdGF0aWNfY2FzdDxPcHRpb25JRD4oaWQpLCBzdHJlYW0sICIgICAi
LCAiXG4iKTsKK30KKwordm9pZCBPcHRpb25zOjpkdW1wT3B0aW9uKE9wdGlvbklEIGlkLCBGSUxF
KiBzdHJlYW0sIGNvbnN0IGNoYXIqIGhlYWRlciwgY29uc3QgY2hhciogZm9vdGVyKQoreworICAg
IGlmIChpZCA+PSBudW1iZXJPZk9wdGlvbnMpCisgICAgICAgIHJldHVybjsgLy8gSWxsZWdhbCBv
cHRpb24uCisKKyAgICBmcHJpbnRmKHN0cmVhbSwgIiVzJXM6ICIsIGhlYWRlciwgc19vcHRpb25z
SW5mb1tpZF0ubmFtZSk7CisgICAgc3dpdGNoIChzX29wdGlvbnNJbmZvW2lkXS50eXBlKSB7Cisg
ICAgY2FzZSBib29sVHlwZToKKyAgICAgICAgZnByaW50ZihzdHJlYW0sICIlcyIsIHNfb3B0aW9u
c1tpZF0udS5ib29sVmFsPyJ0cnVlIjoiZmFsc2UiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSB1bnNpZ25lZFR5cGU6CisgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJXUiLCBzX29wdGlvbnNb
aWRdLnUudW5zaWduZWRWYWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGRvdWJsZVR5cGU6
CisgICAgICAgIGZwcmludGYoc3RyZWFtLCAiJWxmIiwgc19vcHRpb25zW2lkXS51LmRvdWJsZVZh
bCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgaW50MzJUeXBlOgorICAgICAgICBmcHJpbnRm
KHN0cmVhbSwgIiVkIiwgc19vcHRpb25zW2lkXS51LmludDMyVmFsKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGZwcmludGYoc3RyZWFtLCAiJXMiLCBmb290ZXIpOworfQogCit9IC8vIG5h
bWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2NiArMjYsMTY3IEBACiAjaWZuZGVmIE9wdGlv
bnNfaAogI2RlZmluZSBPcHRpb25zX2gKIAorI2luY2x1ZGUgIkpTRXhwb3J0TWFjcm9zLmgiCiAj
aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KIAotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBPcHRpb25zIHsKK25hbWVzcGFjZSBKU0MgewogCi1leHRlcm4gYm9vbCB1c2VK
SVQ7CisvLyBIb3cgZG8gSlNDIFZNIG9wdGlvbnMgd29yaz8KKy8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PQorLy8gVGhlIEpTQ19PUFRJT05TKCkgbWFjcm8gYmVsb3cgZGVmaW5lcyBhIGxp
c3Qgb2YgYWxsIEpTQyBvcHRpb25zIGluIHVzZSwKKy8vIGFsb25nIHdpdGggdGhlaXIgdHlwZXMg
YW5kIGRlZmF1bHQgdmFsdWVzLiBUaGUgb3B0aW9ucyB2YWx1ZXMgYXJlIGFjdHVhbGx5CisvLyBy
ZWFsaXplZCBhcyBhbiBhcnJheSBvZiBPcHRpb25zOjpFbnRyeSBlbGVtZW50cy4KKy8vCisvLyAg
ICAgT3B0aW9uczo6aW5pdGlhbGl6ZSgpIHdpbGwgaW5pdGlhbGl6ZSB0aGUgYXJyYXkgb2Ygb3B0
aW9ucyB2YWx1ZXMgd2l0aAorLy8gdGhlIGRlZmF1bHRzIHNwZWNpZmllZCBpbiBKU0NfT1BUSU9O
UygpIGJlbG93LiBBZnRlciB0aGF0LCB0aGUgdmFsdWVzIGNhbgorLy8gYmUgcHJvZ3JhbW1hdGlj
YWxseSByZWFkIGFuZCB3cml0dGVuIHRvIHVzaW5nIGFuIGFjY2Vzc29yIG1ldGhvZCB3aXRoIHRo
ZQorLy8gc2FtZSBuYW1lIGFzIHRoZSBvcHRpb24uIEZvciBleGFtcGxlLCB0aGUgb3B0aW9uICJ1
c2VKSVQiIGNhbiBiZSByZWFkIGFuZAorLy8gc2V0IGxpa2Ugc286CisvLworLy8gICAgIGJvb2wg
aml0SXNPbiA9IE9wdGlvbnM6OnVzZUpJVCgpOyAgLy8gR2V0IHRoZSBvcHRpb24gdmFsdWUuCisv
LyAgICAgT3B0aW9uczo6dXNlSklUKCkgPSBmYWxzZTsgICAgICAgICAvLyBTZXRzIHRoZSBvcHRp
b24gdmFsdWUuCisvLworLy8gICAgIElmIHlvdSB3YW50IHRvIHR3ZWFrIGFueSBvZiB0aGVzZSB2
YWx1ZXMgcHJvZ3JhbW1hdGljYWxseSBmb3IgdGVzdGluZworLy8gcHVycG9zZXMsIHlvdSBjYW4g
ZG8gc28gaW4gT3B0aW9uczo6aW5pdGlhbGl6ZSgpIGFmdGVyIHRoZSBkZWZhdWx0IHZhbHVlcwor
Ly8gYXJlIHNldC4KKy8vCisvLyAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBlbmFibGUgUlVO
X1RJTUVfSEVVUklTVElDUyB3aGljaCB3aWxsIGFsbG93IHlvdQorLy8gdG8gb3ZlcnJpZGUgdGhl
IGRlZmF1bHQgdmFsdWVzIGJ5IHNwZWNpZnlpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRo
ZQorLy8gZm9ybTogSlNDXzxuYW1lIG9mIEpTQyBvcHRpb24+LgorLy8KKy8vIE5vdGU6IE9wdGlv
bnM6OmluaXRpYWxpemUoKSB0cmllcyB0byBlbnN1cmUgc29tZSBzYW5pdHkgb24gdGhlIG9wdGlv
biB2YWx1ZXMKKy8vIHdoaWNoIGFyZSBzZXQgYnkgZG9pbmcgc29tZSByYW5nZSBjaGVja3MsIGFu
ZCB2YWx1ZSBjb3JyZWN0aW9ucy4gVGhlc2UKKy8vIGNoZWNrcyBhcmUgZG9uZSBhZnRlciB0aGUg
b3B0aW9uIHZhbHVlcyBhcmUgc2V0LiBJZiB5b3UgYWx0ZXIgdGhlIG9wdGlvbgorLy8gdmFsdWVz
IGFmdGVyIHRoZSBzYW5pdHkgY2hlY2tzIChmb3IgeW91ciBvd24gdGVzdGluZyksIHRoZW4geW91
J3JlIGxpYWJsZSB0bworLy8gZW5zdXJlIHRoYXQgdGhlIG5ldyB2YWx1ZXMgc2V0IGFyZSBzYW5l
IGFuZCByZWFzb25hYmxlIGZvciB5b3VyIG93biBydW4uCisKKworI2RlZmluZSBKU0NfT1BUSU9O
Uyh2KSBcCisgICAgdihib29sLCB1c2VKSVQsICAgIHRydWUpIFwKKyAgICB2KGJvb2wsIHVzZURG
R0pJVCwgdHJ1ZSkgXAorICAgIFwKKyAgICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93
REZHRGlzYXNzZW1ibHkuICovIFwKKyAgICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2Up
IFwKKyAgICB2KGJvb2wsIHNob3dERkdEaXNhc3NlbWJseSwgZmFsc2UpIFwKKyAgICBcCisgICAg
dih1bnNpZ25lZCwgbWF4aW11bU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQs
IDEwMDAwKSBcCisgICAgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1GdW5jdGlvbkZvckNhbGxJ
bmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxODApIFwKKyAgICB2KHVuc2lnbmVkLCBt
YXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50
LCAxMDApIFwKKyAgICBcCisgICAgLyogRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8g
aW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4gKi8gXAorICAgIHYodW5zaWduZWQsIG1heGlt
dW1JbmxpbmluZ0RlcHRoLCA1KSBcCisgICAgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvckpJ
VEFmdGVyV2FybVVwLCAxMDApIFwKKyAgICB2KGludDMyLCB0aHJlc2hvbGRGb3JKSVRTb29uLCAx
MDApIFwKKyAgICBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVBZnRlcldhcm1V
cCwgMTAwMCkgXAorICAgIHYoaW50MzIsIHRocmVzaG9sZEZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwLCA1MDAwKSBcCisgICAgdihpbnQzMiwgdGhyZXNob2xkRm9yT3B0aW1pemVTb29uLCAxMDAw
KSBcCisgICAgXAorICAgIHYoaW50MzIsIGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29w
LCAxKSBcCisgICAgdihpbnQzMiwgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiwg
MTUpIFwKKyAgICBcCisgICAgdihib29sLCByYW5kb21pemVFeGVjdXRpb25Db3VudHNCZXR3ZWVu
Q2hlY2twb2ludHMsIGZhbHNlKSBcCisgICAgdihpbnQzMiwgbWF4aW11bUV4ZWN1dGlvbkNvdW50
c0JldHdlZW5DaGVja3BvaW50cywgMTAwMCkgXAorICAgIFwKKyAgICB2KGRvdWJsZSwgbGlrZWx5
VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDAuMTUpIFwKKyAgICB2KGRvdWJsZSwgY291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQsIDAuMDUpIFwKKyAgICB2KHVuc2lnbmVkLCBsaWtlbHlUb1Rha2VT
bG93Q2FzZU1pbmltdW1Db3VudCwgMTAwKSBcCisgICAgdih1bnNpZ25lZCwgY291bGRUYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQsIDEwKSBcCisgICAgXAorICAgIHYoZG91YmxlLCBvc3JFeGl0UHJv
bWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUsIDAuMykgXAorICAgIHYodW5zaWduZWQsIG9zckV4
aXRDb3VudEZvclJlb3B0aW1pemF0aW9uLCAxMDApIFwKKyAgICB2KHVuc2lnbmVkLCBvc3JFeGl0
Q291bnRGb3JSZW9wdGltaXphdGlvbkZyb21Mb29wLCA1KSBcCisgICAgXAorICAgIHYodW5zaWdu
ZWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4LCAwKSAgXAorICAgIHYodW5zaWduZWQs
IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3RlcCwgMSkgXAorICAgIFwKKyAgICB2KHVuc2ln
bmVkLCBtaW5pbXVtT3B0aW1pemF0aW9uRGVsYXksIDEpIFwKKyAgICB2KHVuc2lnbmVkLCBtYXhp
bXVtT3B0aW1pemF0aW9uRGVsYXksIDUpIFwKKyAgICB2KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVM
aXZlbmVzc1JhdGUsIDAuNzUpIFwKKyAgICB2KGRvdWJsZSwgZGVzaXJlZFByb2ZpbGVGdWxsbmVz
c1JhdGUsIDAuMzUpIFwKKyAgICBcCisgICAgdihkb3VibGUsIGRvdWJsZVZvdGVSYXRpb0ZvckRv
dWJsZUZvcm1hdCwgMikgXAorICAgIFwKKyAgICB2KHVuc2lnbmVkLCBtaW5pbXVtTnVtYmVyT2ZT
Y2Fuc0JldHdlZW5SZWJhbGFuY2UsIDEwMCkgXAorICAgIHYodW5zaWduZWQsIGdjTWFya1N0YWNr
U2VnbWVudFNpemUsIHBhZ2VTaXplKCkpIFwKKyAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkdDTWFy
a2VycywgY29tcHV0ZU51bWJlck9mR0NNYXJrZXJzKDcpKSBcCisgICAgdih1bnNpZ25lZCwgb3Bh
cXVlUm9vdE1lcmdlVGhyZXNob2xkLCAxMDAwKSBcCisgICAgXAorICAgIHYoYm9vbCwgZm9yY2VX
ZWFrUmFuZG9tU2VlZCwgZmFsc2UpIFwKKyAgICB2KHVuc2lnbmVkLCBmb3JjZWRXZWFrUmFuZG9t
U2VlZCwgMCkKKworCitjbGFzcyBPcHRpb25zIHsKK3B1YmxpYzoKKyAgICAvLyBUaGlzIHR5cGVk
ZWYgaXMgdG8gYWxsb3cgdXMgdG8gZWxpbWluYXRlIHRoZSAnXycgaW4gdGhlIGZpZWxkIG5hbWUg
aW4KKyAgICAvLyB1bmlvbiBpbnNpZGUgRW50cnkuIFRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgdGhl
IHN0eWxlIGNoZWNrZXIgaGFwcHkuCisgICAgdHlwZWRlZiBpbnQzMl90IGludDMyOworCisgICAg
Ly8gRGVjbGFyZSB0aGUgb3B0aW9uIElEczoKKyAgICBlbnVtIE9wdGlvbklEIHsKKyNkZWZpbmUg
Rk9SX0VBQ0hfT1BUSU9OKHR5cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgICAgICBP
UFRfIyNuYW1lXywKKyAgICAgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVm
IEZPUl9FQUNIX09QVElPTgorICAgICAgICBudW1iZXJPZk9wdGlvbnMKKyAgICB9OworCisKKyAg
ICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICAvLyBQYXJzZXMgYSBzaW5nbGUgY29t
bWFuZCBsaW5lIG9wdGlvbiBpbiB0aGUgZm9ybWF0ICI8b3B0aW9uTmFtZT49PHZhbHVlPiIKKyAg
ICAvLyAobm8gc3BhY2VzIGFsbG93ZWQpIGFuZCBzZXQgdGhlIHNwZWNpZmllZCBvcHRpb24gaWYg
YXBwcm9wcmlhdGUuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgc2V0T3B0aW9u
KGNvbnN0IGNoYXIqIGFyZyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVt
cEFsbE9wdGlvbnMoRklMRSogc3RyZWFtID0gc3Rkb3V0KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1w
T3B0aW9uKE9wdGlvbklEIGlkLCBGSUxFKiBzdHJlYW0gPSBzdGRvdXQsIGNvbnN0IGNoYXIqIGhl
YWRlciA9ICIiLCBjb25zdCBjaGFyKiBmb290ZXIgPSAiIik7CisKKyAgICAvLyBEZWNsYXJlIGFj
Y2Vzc29ycyBmb3IgZWFjaCBvcHRpb246CisjZGVmaW5lIEZPUl9FQUNIX09QVElPTih0eXBlXywg
bmFtZV8sIGRlZmF1bHRWYWx1ZV8pIFwKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB0eXBlXyYg
bmFtZV8oKSB7IHJldHVybiBzX29wdGlvbnNbT1BUXyMjbmFtZV9dLnUudHlwZV8jI1ZhbDsgfQor
CisgICAgSlNDX09QVElPTlMoRk9SX0VBQ0hfT1BUSU9OKQorI3VuZGVmIEZPUl9FQUNIX09QVElP
TgorCitwcml2YXRlOgorICAgIGVudW0gRW50cnlUeXBlIHsKKyAgICAgICAgYm9vbFR5cGUsCisg
ICAgICAgIHVuc2lnbmVkVHlwZSwKKyAgICAgICAgZG91YmxlVHlwZSwKKyAgICAgICAgaW50MzJU
eXBlCisgICAgfTsKKworICAgIC8vIEZvciBzdG9yaW5nIGZvciBhbiBvcHRpb24gdmFsdWU6Cisg
ICAgc3RydWN0IEVudHJ5IHsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgYm9vbCBib29s
VmFsOworICAgICAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWw7CisgICAgICAgICAgICBkb3Vi
bGUgZG91YmxlVmFsOworICAgICAgICAgICAgaW50MzIgaW50MzJWYWw7CisgICAgICAgIH0gdTsK
KyAgICB9OworCisgICAgLy8gRm9yIHN0b3JpbmcgY29uc3RhbnQgbWV0YSBkYXRhIGFib3V0IGVh
Y2ggb3B0aW9uOgorICAgIHN0cnVjdCBFbnRyeUluZm8geworICAgICAgICBjb25zdCBjaGFyKiBu
YW1lOworICAgICAgICBFbnRyeVR5cGUgdHlwZTsKKyAgICB9OworCisgICAgT3B0aW9ucygpOwor
CisgICAgLy8gRGVjbGFyZSB0aGUgb3B0aW9uczoKKyNkZWZpbmUgRk9SX0VBQ0hfT1BUSU9OKHR5
cGVfLCBuYW1lXywgZGVmYXVsdFZhbHVlXykgXAorICAgIHR5cGVfIG1fIyNuYW1lXzsKKyAgICBK
U0NfT1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCisjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCisKKyAg
ICAvLyBEZWNsYXJlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIG9wdGlvbnMgc3RvcmU6
CisgICAgSlNfRVhQT1JUREFUQSBzdGF0aWMgRW50cnkgc19vcHRpb25zW251bWJlck9mT3B0aW9u
c107CisgICAgc3RhdGljIGNvbnN0IEVudHJ5SW5mbyBzX29wdGlvbnNJbmZvW251bWJlck9mT3B0
aW9uc107Cit9OwogCi1leHRlcm4gYm9vbCBzaG93RGlzYXNzZW1ibHk7Ci1leHRlcm4gYm9vbCBz
aG93REZHRGlzYXNzZW1ibHk7IC8vIHNob3dEaXNhc3NlbWJseSBpbXBsaWVzIHNob3dERkdEaXNh
c3NlbWJseS4KLQotZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OwotCi1leHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2Fs
bElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKLQot
ZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOyAvLyBEZXB0aCBvZiBpbmxpbmUg
c3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9IG9uZSBsZXZlbCwgZXRjLgotCi1leHRlcm4g
aW50MzJfdCB0aHJlc2hvbGRGb3JKSVRBZnRlcldhcm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVz
aG9sZEZvckpJVFNvb247Ci0KLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplQWZ0
ZXJXYXJtVXA7Ci1leHRlcm4gaW50MzJfdCB0aHJlc2hvbGRGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcDsKLWV4dGVybiBpbnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplU29vbjsKLWV4dGVybiBp
bnQzMl90IHRocmVzaG9sZEZvck9wdGltaXplTmV4dEludm9jYXRpb247Ci0KLWV4dGVybiBpbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwotZXh0ZXJuIGludDMyX3QgZXhl
Y3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKLQotZXh0ZXJuIGJvb2wgcmFuZG9taXpl
RXhlY3V0aW9uQ291bnRzQmV0d2VlbkNoZWNrcG9pbnRzOwotZXh0ZXJuIGludDMyX3QgbWF4aW11
bUV4ZWN1dGlvbkNvdW50c0JldHdlZW5DaGVja3BvaW50czsKLQotZXh0ZXJuIGRvdWJsZSBsaWtl
bHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKLWV4dGVybiBkb3VibGUgY291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQ7Ci1leHRlcm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQ7Ci1leHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7Ci0K
LWV4dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlOwotZXh0
ZXJuIHVuc2lnbmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uOwotZXh0ZXJuIHVuc2ln
bmVkIG9zckV4aXRDb3VudEZvclJlb3B0aW1pemF0aW9uRnJvbUxvb3A7Ci0KLWV4dGVybiB1bnNp
Z25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heDsKLWV4dGVybiB1bnNpZ25lZCByZW9w
dGltaXphdGlvblJldHJ5Q291bnRlclN0ZXA7Ci0KLWV4dGVybiB1bnNpZ25lZCBtaW5pbXVtT3B0
aW1pemF0aW9uRGVsYXk7Ci1leHRlcm4gdW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5
OwotZXh0ZXJuIGRvdWJsZSBkZXNpcmVkUHJvZmlsZUxpdmVuZXNzUmF0ZTsKLWV4dGVybiBkb3Vi
bGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1JhdGU7Ci0KLWV4dGVybiBkb3VibGUgZG91YmxlVm90
ZVJhdGlvRm9yRG91YmxlRm9ybWF0OwotCi1leHRlcm4gdW5zaWduZWQgbWluaW11bU51bWJlck9m
U2NhbnNCZXR3ZWVuUmViYWxhbmNlOwotZXh0ZXJuIHVuc2lnbmVkIGdjTWFya1N0YWNrU2VnbWVu
dFNpemU7Ci1KU19FWFBPUlREQVRBIGV4dGVybiB1bnNpZ25lZCBudW1iZXJPZkdDTWFya2VyczsK
LUpTX0VYUE9SVERBVEEgZXh0ZXJuIHVuc2lnbmVkIG9wYXF1ZVJvb3RNZXJnZVRocmVzaG9sZDsK
LQotZXh0ZXJuIGJvb2wgZm9yY2VXZWFrUmFuZG9tU2VlZDsKLWV4dGVybiB1bnNpZ25lZCBmb3Jj
ZWRXZWFrUmFuZG9tU2VlZDsKLQotdm9pZCBpbml0aWFsaXplT3B0aW9ucygpOwotCi19IH0gLy8g
bmFtZXNwYWNlIEpTQzo6T3B0aW9ucworfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBP
cHRpb25zX2gKLQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>