<?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>82155</bug_id>
          
          <creation_ts>2012-03-25 18:22:55 -0700</creation_ts>
          <short_desc>DFG OSR exit value recoveries should be computed lazily</short_desc>
          <delta_ts>2012-07-02 18:28:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>587394</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-25 18:22:55 -0700</bug_when>
    <thetext>Currently each OSR exit has a complete record of the value recoveries of all bytecode variables live at that exit. Each time a speculation check is emitted, we compute all of these value recoveries and save them.

This takes unnecessary space (since the value recovery for a variable at exit site K is likely to be identical to the value recovery for that variable at exit site K + 1) and unnecessary time (since we recompute those identical values repeatedly).

Instead, CodeBlock should record the sequence of variable-related changes in the DFG&apos;s representation of values. When an OSR exit is generated, the value recoveries can be lazily reconstructed from this sequence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587395</commentid>
    <comment_count>1</comment_count>
      <attachid>133708</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-25 18:25:08 -0700</bug_when>
    <thetext>Created attachment 133708
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587440</commentid>
    <comment_count>2</comment_count>
      <attachid>133728</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-25 22:03:39 -0700</bug_when>
    <thetext>Created attachment 133728
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587516</commentid>
    <comment_count>3</comment_count>
      <attachid>133744</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-26 00:47:09 -0700</bug_when>
    <thetext>Created attachment 133744
work in progress - a different approach

Taking a different approach, where we record:

1) The subset of the data flow graph that we need to have to compute value recoveries.

2) A stream of events including: fills, spills, deaths, setlocals, and movhints.

Fills, spills, and deaths only need to be recorded for nodes that are interesting to value recoveries.

This allows us to reconstruct the generation infos at any point after the fact. It also gives us the value source vectors. Together that allows us to execute the equivalent computeValueRecovery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588251</commentid>
    <comment_count>4</comment_count>
      <attachid>133917</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-26 16:02:11 -0700</bug_when>
    <thetext>Created attachment 133917
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589222</commentid>
    <comment_count>5</comment_count>
      <attachid>134124</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-27 13:31:40 -0700</bug_when>
    <thetext>Created attachment 134124
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589320</commentid>
    <comment_count>6</comment_count>
      <attachid>134143</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-27 14:57:57 -0700</bug_when>
    <thetext>Created attachment 134143
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589440</commentid>
    <comment_count>7</comment_count>
      <attachid>134166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-27 16:48:43 -0700</bug_when>
    <thetext>Created attachment 134166
work in progress

It compiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589513</commentid>
    <comment_count>8</comment_count>
      <attachid>134184</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-27 17:42:02 -0700</bug_when>
    <thetext>Created attachment 134184
work in progress

It ran its first program.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589772</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-28 02:21:43 -0700</bug_when>
    <thetext>It would appear that I did get the SunSpider speed-up that I was looking for, but it&apos;s marginal.  I may be fooling myself.



[pizlo@wartooth Internal] Tools/Scripts/run-jsc-benchmarks TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc VariableStream:/Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc --sunspider --inner 1 --outer 100 --remote oldmac,bigmac --local
Copying TipOfTree into /Volumes/Data/pizlo/Internal/BenchmarkTemp/benchdata...
Copying VariableStream into /Volumes/Data/pizlo/Internal/BenchmarkTemp/benchdata...
All VMs are in place.
Packaging benchmarking directory for remote hosts...
Sending benchmark payload to oldmac...
Running on oldmac...
5200/5200                                                     
Generating benchmark report at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_oldmac_20120328_0209_report.txt
And raw data at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_oldmac_20120328_0209.json

Benchmark report for SunSpider on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r112326)
&quot;VariableStream&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r112326)

Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
with 95% confidence intervals in milliseconds.

                                  TipOfTree               VariableStream                                  

3d-cube                         9.0728+-0.0142     ^      8.9108+-0.0177        ^ definitely 1.0182x faster
3d-morph                        8.9181+-0.0310     ?      8.9607+-0.1729        ?
3d-raytrace                    11.3844+-0.0367     ^     11.0494+-0.0237        ^ definitely 1.0303x faster
access-binary-trees             2.1083+-0.0047     ^      2.0977+-0.0057        ^ definitely 1.0051x faster
access-fannkuch                 9.2028+-0.0145     ?      9.2028+-0.0040        ?
access-nbody                    4.6560+-0.0118     ^      4.5568+-0.0063        ^ definitely 1.0218x faster
access-nsieve                   4.2503+-0.0103     ?      4.2575+-0.0108        ?
bitops-3bit-bits-in-byte        1.6304+-0.0063     ?      1.6315+-0.0072        ?
bitops-bits-in-byte             6.5841+-0.0149     ?      6.6019+-0.0141        ?
bitops-bitwise-and              4.0202+-0.0069            4.0202+-0.0067        
bitops-nsieve-bits              3.8827+-0.0050     !      3.8969+-0.0062        ! definitely 1.0037x slower
controlflow-recursive           2.8471+-0.0082     ?      2.8581+-0.0094        ?
crypto-aes                      9.6587+-0.0135     ^      9.5758+-0.0088        ^ definitely 1.0087x faster
crypto-md5                      3.8811+-0.0046     ^      3.8669+-0.0070        ^ definitely 1.0037x faster
crypto-sha1                     3.0996+-0.0056     !      3.1170+-0.0068        ! definitely 1.0056x slower
date-format-tofte              13.7325+-0.0341     ^     13.5543+-0.0398        ^ definitely 1.0131x faster
date-format-xparb              12.8675+-0.0363     ?     12.8921+-0.0450        ?
math-cordic                     5.0040+-0.0121     ?      5.0187+-0.0141        ?
math-partial-sums              10.7343+-0.0173           10.7094+-0.0339        
math-spectral-norm              3.2941+-0.0075     ^      3.2787+-0.0065        ^ definitely 1.0047x faster
regexp-dna                     11.9019+-0.0179     ?     11.9217+-0.0216        ?
string-base64                   5.6682+-0.0115            5.6625+-0.0183        
string-fasta                    8.6603+-0.0114     !      8.6959+-0.0165        ! definitely 1.0041x slower
string-tagcloud                15.6934+-0.0207           15.6509+-0.0222        
string-unpack-code             26.7153+-0.0359     ?     26.7949+-0.0713        ?
string-validate-input           7.7287+-0.0178     !      7.8270+-0.0264        ! definitely 1.0127x slower

&lt;arithmetic&gt; *                  7.9691+-0.0034     ^      7.9465+-0.0080        ^ definitely 1.0028x faster
&lt;geometric&gt;                     6.4588+-0.0029     ^      6.4428+-0.0045        ^ definitely 1.0025x faster
&lt;harmonic&gt;                      5.1958+-0.0037     ^      5.1872+-0.0040        ^ definitely 1.0017x faster

Sending benchmark payload to bigmac...
Running on bigmac...
5200/5200                                                     
Generating benchmark report at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_bigmac_20120328_0215_report.txt
And raw data at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_bigmac_20120328_0215.json

Benchmark report for SunSpider on bigmac (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r112326)
&quot;VariableStream&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r112326)

Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
with 95% confidence intervals in milliseconds.

                                  TipOfTree               VariableStream                                  

3d-cube                         7.3357+-0.0072     ^      7.2197+-0.0081        ^ definitely 1.0161x faster
3d-morph                        7.3669+-0.0173            7.3593+-0.0180        
3d-raytrace                     9.3486+-0.0254     ^      9.1235+-0.0109        ^ definitely 1.0247x faster
access-binary-trees             1.7455+-0.0069            1.7412+-0.0064        
access-fannkuch                 7.6001+-0.0031     !      7.6238+-0.0099        ! definitely 1.0031x slower
access-nbody                    3.8549+-0.0053     ^      3.7814+-0.0027        ^ definitely 1.0194x faster
access-nsieve                   3.5398+-0.0073     ?      3.5512+-0.0075        ?
bitops-3bit-bits-in-byte        1.3473+-0.0099     ?      1.3508+-0.0049        ?
bitops-bits-in-byte             5.4733+-0.0099            5.4666+-0.0108        
bitops-bitwise-and              3.3319+-0.0071     ?      3.3414+-0.0091        ?
bitops-nsieve-bits              3.2265+-0.0085     ?      3.2360+-0.0081        ?
controlflow-recursive           2.3347+-0.0077     ?      2.3389+-0.0081        ?
crypto-aes                      7.8193+-0.0081     ^      7.7482+-0.0096        ^ definitely 1.0092x faster
crypto-md5                      3.2321+-0.0055            3.2226+-0.0062        
crypto-sha1                     2.5992+-0.0080     !      2.6214+-0.0087        ! definitely 1.0086x slower
date-format-tofte              11.0332+-0.0229     ^     10.8673+-0.0198        ^ definitely 1.0153x faster
date-format-xparb              10.3785+-0.0556           10.3312+-0.0383        
math-cordic                     4.1416+-0.0052     ?      4.1527+-0.0081        ?
math-partial-sums               8.9177+-0.0103     ^      8.8960+-0.0055        ^ definitely 1.0024x faster
math-spectral-norm              2.7571+-0.0087            2.7448+-0.0084        
regexp-dna                      9.7353+-0.0121     !      9.7758+-0.0154        ! definitely 1.0042x slower
string-base64                   4.5591+-0.0102            4.5506+-0.0145        
string-fasta                    7.1483+-0.0111     ?      7.1703+-0.0136        ?
string-tagcloud                12.8586+-0.0179     ?     12.8755+-0.0137        ?
string-unpack-code             21.5617+-0.0292     ?     21.5697+-0.0234        ?
string-validate-input           6.1975+-0.0159     !      6.2321+-0.0129        ! definitely 1.0056x slower

&lt;arithmetic&gt; *                  6.5171+-0.0030     ^      6.4958+-0.0025        ^ definitely 1.0033x faster
&lt;geometric&gt;                     5.3081+-0.0025     ^      5.2954+-0.0021        ^ definitely 1.0024x faster
&lt;harmonic&gt;                      4.2882+-0.0038            4.2842+-0.0029          might be 1.0009x faster

Running locally...
5200/5200                                                     
Generating benchmark report at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_wartooth_20120328_0217_report.txt
And raw data at /Volumes/Data/pizlo/Internal/TipOfTree_VariableStream_SunSpider_wartooth_20120328_0217.json

Benchmark report for SunSpider on wartooth (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r112326)
&quot;VariableStream&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r112326)

Collected 100 samples per benchmark/VM, with 100 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution times
with 95% confidence intervals in milliseconds.

                                  TipOfTree               VariableStream                                  

3d-cube                         6.7561+-0.1459     ^      6.4877+-0.0579        ^ definitely 1.0414x faster
3d-morph                        6.9644+-0.2915     ?      7.0522+-0.3207        ? might be 1.0126x slower
3d-raytrace                     8.6955+-0.0818            8.5678+-0.1092          might be 1.0149x faster
access-binary-trees             1.7009+-0.0353            1.6882+-0.0357        
access-fannkuch                 6.4264+-0.1183     ?      6.6163+-0.2240        ? might be 1.0295x slower
access-nbody                    3.2247+-0.0731            3.1766+-0.0891          might be 1.0151x faster
access-nsieve                   3.0165+-0.0859            2.9559+-0.0461          might be 1.0205x faster
bitops-3bit-bits-in-byte        1.4353+-0.0391            1.3867+-0.0205          might be 1.0350x faster
bitops-bits-in-byte             2.3393+-0.0468     ?      2.3406+-0.0446        ?
bitops-bitwise-and              3.7230+-0.1279            3.6903+-0.1132        
bitops-nsieve-bits              3.3064+-0.1035            3.2306+-0.0606          might be 1.0235x faster
controlflow-recursive           2.0716+-0.0761            2.0475+-0.0671          might be 1.0118x faster
crypto-aes                      7.6965+-0.1193            7.5897+-0.1252          might be 1.0141x faster
crypto-md5                      2.9156+-0.0714            2.8466+-0.0213          might be 1.0242x faster
crypto-sha1                     2.4435+-0.0637            2.4361+-0.0451        
date-format-tofte              10.2863+-0.0519           10.2762+-0.0532        
date-format-xparb               9.5949+-0.0712     ^      9.4645+-0.0514        ^ definitely 1.0138x faster
math-cordic                     3.7434+-0.1035     ?      3.7831+-0.1230        ? might be 1.0106x slower
math-partial-sums               6.4855+-0.1586            6.4043+-0.0624          might be 1.0127x faster
math-spectral-norm              2.5343+-0.0608            2.5067+-0.0745          might be 1.0110x faster
regexp-dna                      8.4074+-0.0721     ?      8.5258+-0.1156        ? might be 1.0141x slower
string-base64                   4.6353+-0.0910            4.5789+-0.0490          might be 1.0123x faster
string-fasta                    6.4247+-0.0936            6.4110+-0.0406        
string-tagcloud                11.2349+-0.0512     !     11.4188+-0.0542        ! definitely 1.0164x slower
string-unpack-code             19.4910+-0.0821           19.4458+-0.0712        
string-validate-input           5.9134+-0.0436     ?      6.0783+-0.1735        ? might be 1.0279x slower

&lt;arithmetic&gt; *                  5.8256+-0.0212            5.8079+-0.0232          might be 1.0030x faster
&lt;geometric&gt;                     4.7335+-0.0155            4.7062+-0.0166          might be 1.0058x faster
&lt;harmonic&gt;                      3.8626+-0.0135     ^      3.8303+-0.0134        ^ definitely 1.0084x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589778</commentid>
    <comment_count>10</comment_count>
      <attachid>134245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-28 02:38:28 -0700</bug_when>
    <thetext>Created attachment 134245
almost done

It works, but still needs the 32-bit version of some of the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589780</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-28 02:41:21 -0700</bug_when>
    <thetext>Attachment 134245 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;S...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGVariableEvent.h:235:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGMinifiedNode.h:58:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGMinifiedNode.h:58:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGMinifiedNode.h:65:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGVariableEventStream.h:52:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGVariableEventStream.h:52:  The parameter name &quot;codeOrigin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGVariableEventStream.h:52:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGVariableEventStream.h:53:  The parameter name &quot;operands&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGVariableEventStream.h:56:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGVariableEvent.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 10 in 38 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>589784</commentid>
    <comment_count>12</comment_count>
      <attachid>134245</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-28 02:45:33 -0700</bug_when>
    <thetext>Comment on attachment 134245
almost done

Attachment 134245 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12152070</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589785</commentid>
    <comment_count>13</comment_count>
      <attachid>134245</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-28 02:47:44 -0700</bug_when>
    <thetext>Comment on attachment 134245
almost done

Attachment 134245 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12146948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589813</commentid>
    <comment_count>14</comment_count>
      <attachid>134253</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-28 03:36:48 -0700</bug_when>
    <thetext>Created attachment 134253
the patch

Looks like it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589819</commentid>
    <comment_count>15</comment_count>
      <attachid>134253</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-28 03:43:31 -0700</bug_when>
    <thetext>Comment on attachment 134253
the patch

Attachment 134253 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12155053</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589822</commentid>
    <comment_count>16</comment_count>
      <attachid>134253</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-03-28 03:43:53 -0700</bug_when>
    <thetext>Comment on attachment 134253
the patch

Attachment 134253 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12155054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589823</commentid>
    <comment_count>17</comment_count>
      <attachid>134256</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-28 03:47:36 -0700</bug_when>
    <thetext>Created attachment 134256
the patch

Fixing Qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634991</commentid>
    <comment_count>18</comment_count>
      <attachid>134256</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-28 01:34:32 -0700</bug_when>
    <thetext>Comment on attachment 134256
the patch

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

It seems that it might be cleaner at some point to refactor GenerationInfo, so that rather than being a class representing a single value &amp; having a Vector of them, to instead have GenerationInfo be a container holding info for N variables, and make all methods be passed the virtual register to be operated on.  Then the generation info could hold a reference to m_stream as a member, which would better encapsulate the implementation.

Apologies again on the delay on reviewing this, r+, please re-test performance before landing.

&gt; Source/JavaScriptCore/bytecode/Operands.h:199
&gt; +    // Use const-cast because:

:-(

&gt; Source/JavaScriptCore/dfg/DFGMinifiedNode.h:42
&gt; +    switch (type) {

Given that this happens around the node generation loop, I wonder if it might be worth trying to make this a faster test than a switch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661759</commentid>
    <comment_count>19</comment_count>
      <attachid>150482</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 15:23:07 -0700</bug_when>
    <thetext>Created attachment 150482
start of rebasing

It probably doesn&apos;t even compile yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661862</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 18:27:01 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 134256 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134256&amp;action=review
&gt; 
&gt; It seems that it might be cleaner at some point to refactor GenerationInfo, so that rather than being a class representing a single value &amp; having a Vector of them, to instead have GenerationInfo be a container holding info for N variables, and make all methods be passed the virtual register to be operated on.  Then the generation info could hold a reference to m_stream as a member, which would better encapsulate the implementation.
&gt; 
&gt; Apologies again on the delay on reviewing this, r+, please re-test performance before landing.

The performance still looks good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661863</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-07-02 18:28:03 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/121717</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133708</attachid>
            <date>2012-03-25 18:25:08 -0700</date>
            <delta_ts>2012-03-25 22:03:39 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_1.diff</filename>
            <type>text/plain</type>
            <size>15857</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMDQxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDEyLTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIE9TUiBleGl0IHZhbHVlIHJlY292ZXJpZXMgc2hvdWxkIGJlIGNvbXB1dGVkIGxhemlseQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIxNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdv
cmsgaW4gcHJvZ3Jlc3MhIQorCisgICAgICAgICogYnl0ZWNvZGUvTW9kYWxWYWx1ZVJlY292ZXJ5
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6TW9kYWxWYWx1ZVJlY292
ZXJ5OjpNb2RhbFZhbHVlUmVjb3ZlcnkpOgorICAgICAgICAoTW9kYWxWYWx1ZVJlY292ZXJ5KToK
KyAgICAgICAgKEpTQzo6TW9kYWxWYWx1ZVJlY292ZXJ5Ojpjb21wYXJlTW9kZXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL011bHRpVmFsdWVSZWNvdmVyeS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6
CisgICAgICAgIChNdWx0aVZhbHVlUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpNdWx0aVZhbHVl
UmVjb3Zlcnk6Ok11bHRpVmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6Ok11bHRpVmFsdWVS
ZWNvdmVyeTo6c2V0KToKKyAgICAgICAgKEpTQzo6TXVsdGlWYWx1ZVJlY292ZXJ5OjpmaW5kQmVz
dCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeU1vZGUuaDogQWRkZWQuCisgICAg
ICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisg
ICAgICAgIChKU0MpOgorICAgICAgICAoVmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OlZh
cmlhYmxlRXZlbnQ6OlZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50
OjpieXRlY29kZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50OjpyZWNvdmVy
eSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRXZlbnQ6OmFwcGx5VG8pOgorICAgICAgICAqIGJ5
dGVjb2RlL1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAg
ICAgICAoVmFyaWFibGVFdmVudFN0cmVhbSk6CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChK
U0M6OlZhcmlhYmxlRXZlbnRTdHJlYW06OlRva2VuOjpUb2tlbik6CisgICAgICAgIChKU0M6OlZh
cmlhYmxlRXZlbnRTdHJlYW06OlRva2VuOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpWYXJp
YWJsZUV2ZW50U3RyZWFtOjpUb2tlbjo6aW5kZXgpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjpWYXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVF
dmVudFN0cmVhbTo6Y3VycmVudFN0YXRlVG9rZW4pOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpy
ZWNvbnN0cnVjdFN0YXRlQXRUb2tlbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisKIDIwMTItMDMtMjUgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgaW50LXRvLWRvdWJsZSBjb252ZXJz
aW9uIHNob3VsZCBiZSByZXZlYWxlZCB0byBDU0UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Nb2RhbFZhbHVlUmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kYWxWYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kYWxWYWx1ZVJlY292ZXJ5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNb2RhbFZhbHVlUmVjb3ZlcnlfaAorI2RlZmluZSBN
b2RhbFZhbHVlUmVjb3ZlcnlfaAorCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1
ZGUgIlZhbHVlUmVjb3ZlcnlNb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworc3RydWN0IE1vZGFsVmFsdWVSZWNvdmVyeSB7CisgICAgTW9kYWxWYWx1
ZVJlY292ZXJ5KCkgeyB9CisgICAgCisgICAgTW9kYWxWYWx1ZVJlY292ZXJ5KAorICAgICAgICBN
b2RlIG1vZGUsCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkZmdPcGVyYW5kLAorICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSkKKyAgICAgICAgOiBtX21vZGUobW9kZSkKKyAg
ICAgICAgLCBtX2RmZ09wZXJhbmQoZGZnT3BlcmFuZCkKKyAgICAgICAgLCBtX3JlY292ZXJ5KHJl
Y292ZXJ5KQorICAgIHsKKyAgICB9CisgICAgCisgICAgTW9kZSBtX21vZGU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIG1fZGZnT3BlcmFuZDsKKyAgICBWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgY29tcGFyZU1vZGVzKAorICAgICAgICBjb25zdCBNb2RhbFZh
bHVlUmVjb3ZlcnkmIGEsCisgICAgICAgIGNvbnN0IE1vZGFsVmFsdWVSZWNvdmVyeSYgYikKKyAg
ICB7CisgICAgICAgIHJldHVybiBhLm1fbW9kZSA8IGIubV9tb2RlOworICAgIH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gTW9kYWxWYWx1ZVJlY292ZXJ5X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL011bHRpVmFsdWVSZWNvdmVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NdWx0aVZhbHVlUmVj
b3ZlcnkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
dWx0aVZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE11bHRpVmFs
dWVSZWNvdmVyeV9oCisjZGVmaW5lIE11bHRpVmFsdWVSZWNvdmVyeV9oCisKKyNpbmNsdWRlICJN
b2RhbFZhbHVlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTXVsdGlWYWx1ZVJlY292ZXJ5
IHsKK3B1YmxpYzoKKyAgICBNdWx0aVZhbHVlUmVjb3ZlcnkoKSB7IH0KKyAgICAKKyAgICB2b2lk
IHNldChjb25zdCBNb2RhbFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAg
Ly8gRmlyc3Qgc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIuIElm
IHNvLCB3ZSByZXBsYWNlCisgICAgICAgIC8vIHRoZSByZWNvdmVyeSBmb3IgdGhhdCByZWdpc3Rl
ci4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3Quc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChtX2xpc3RbaV0ubV9kZmdPcGVyYW5kID09IHJlY292ZXJ5Lm1fZGZn
T3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5tX3JlY292ZXJ5LnRlY2hu
aXF1ZSgpID09IERvbnRLbm93KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGlzdFtpXSA9IG1f
bGlzdC5sYXN0KCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGlzdC5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbV9saXN0W2ldID0gcmVjb3Zlcnk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBXZSBkb24ndCBhbHJl
YWR5IGhhdmUgdGhpcyB2YWx1ZSByZWNvdmVyeS4gVGhpcyBtZWFucyB3ZSdyZSBhZGRpbmcgYQor
ICAgICAgICAvLyBuZXcgb25lLgorICAgICAgICBBU1NFUlQocmVjb3ZlcnkubV9yZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEb250S25vdyk7CisgICAgICAgIG1fbGlzdC5hcHBlbmQocmVjb3Zlcnkp
OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVJlY292ZXJ5IGZpbmRCZXN0KCkKKyAgICB7CisgICAg
ICAgIC8vIEZhc3QgY2FzZTogdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0IGlzIGEgUHJpbWFy
eSB0aGVuIHdlJ3JlIGRvbmUuCisgICAgICAgIGlmIChtX2xpc3RbMF0ubV9tb2RlID09IFByaW1h
cnlSZWNvdmVyeSkKKyAgICAgICAgICAgIHJldHVybiBtX2xpc3RbMF0ubV9yZWNvdmVyeTsKKyAg
ICAgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQobV9saXN0LmJlZ2luKCksIG1fbGlzdC5lbmQo
KSwgTW9kYWxWYWx1ZVJlY292ZXJ5Ojpjb21wYXJlTW9kZXMpOworICAgICAgICByZXR1cm4gbV9s
aXN0WzBdLm1fcmVjb3Zlcnk7CisgICAgfQorcHJpdmF0ZToKKyAgICBWZWN0b3I8TW9kYWxWYWx1
ZVJlY292ZXJ5LCAxPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIE11bHRpVmFsdWVSZWNvdmVyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVJlY292ZXJ5TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5TW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnlNb2RlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBWYWx1ZVJlY292ZXJ5TW9kZV9oCisjZGVmaW5lIFZhbHVlUmVj
b3ZlcnlNb2RlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gVmFsdWVSZWNvdmVyeU1vZGUg
eworICAgIC8vIFRoZSBvcmlnaW5hbCB1bm1vZGlmaWVkIHZhbHVlLgorICAgIFByaW1hcnlSZWNv
dmVyeSwKKyAgICAKKyAgICAvLyBBIHZhbHVlIG1vZGlmaWVkIGludG8gYSBtb3JlIGdlbmVyaWMg
Zm9ybS4gSXQgaXMgYW4gYWNjdXJhdGUgcmVwcmVzZW50YXRpb24KKyAgICAvLyBvZiB0aGUgb3Jp
Z2luYWwgdmFsdWUsIGJ1dCBpdCBtYXkgbm90IGJlIGFzIGVmZmljaWVudCBvZiBhIHJlcHJlc2Vu
dGF0aW9uLgorICAgIFVwY2FzdFJlY292ZXJ5LAorICAgIAorICAgIC8vIEEgdmFsdWUgbW9kaWZp
ZWQgaW50byBhIGxlc3MgZ2VuZXJpYyBmb3JtLiBJdCBpcyBub3QgYW4gYWNjdXJhdGUKKyAgICAv
LyByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgdmFsdWUsIGJ1dCBpZiBpdCBpcyB0aGUg
b25seSByZXByZXNlbnRhdGlvbgorICAgIC8vIHdlIGhhdmUgbGVmdCB0aGVuIGl0IGlzIGNvcnJl
Y3QgdG8gdXNlIGl0LiBJZiB0aGlzIGlzIHRoZSBvbmx5IHJlbWFpbmluZworICAgIC8vIGxpdmUg
dmFsdWUgdGhlbiB3ZSBrbm93IHRoYXQgdGhlIERGRyBoYXMgcHJvdmVkIHRoYXQgYWxsIHJlbWFp
bmluZworICAgIC8vIG9wZXJhdGlvbnMgb24gdGhpcyB2YWx1ZSB3aWxsIGJlIGNvbnRlbnQgd2l0
aCB1c2luZyB0aGlzIGxlc3MgZ2VuZXJpYyBmb3JtLgorICAgIERvd25jYXN0UmVjb3ZlcnkKK307
CisgICAgCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZhbHVlUmVjb3ZlcnlNb2Rl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVF
dmVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
cmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhcmlhYmxlRXZlbnRf
aAorI2RlZmluZSBWYXJpYWJsZUV2ZW50X2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2lu
Y2x1ZGUgIk1vZGFsVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgIk11bHRpVmFsdWVSZWNvdmVy
eS5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBEZXNj
cmliZXMgdGhpbmdzIHRoYXQgY2FuIGhhcHBlbiB0byB0aGUgbWFubmVyIGluIHdoaWNoIGEgdmFy
aWFibGUgaXMKKy8vIHJlY29yZGVkIGJ5IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBERkcuCitjbGFz
cyBWYXJpYWJsZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUV2ZW50KCkgeyB9CisgICAg
CisgICAgVmFyaWFibGVFdmVudCgKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlT3Bl
cmFuZCwKKyAgICAgICAgTW9kYWxWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAgICAgICA6IG1f
Ynl0ZWNvZGVPcGVyYW5kKGJ5dGVjb2RlT3BlcmFuZCkKKyAgICAgICAgLCBtX3JlY292ZXJ5KHJl
Y292ZXJ5KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
T3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPcGVyYW5kOyB9CisgICAgY29uc3Qg
TW9kYWxWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3Zlcnk7
IH0KKyAgICAKKyAgICB2b2lkIGFwcGx5VG8oT3BlcmFuZHM8TXVsdGlWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMpCisgICAgeworICAgICAgICBvcGVyYW5kcy5vcGVyYW5kKG1fYnl0ZWNvZGVPcGVy
YW5kKS5zZXQobV9yZWNvdmVyeSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZpcnR1YWxSZWdp
c3RlciBtX2J5dGVjb2RlT3BlcmFuZDsKKyAgICBNb2RhbFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVy
eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVFdmVudF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZUV2ZW50U3Ry
ZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKyNkZWZpbmUgVmFyaWFibGVFdmVudFN0cmVhbV9oCisK
KyNpbmNsdWRlICJWYXJpYWJsZUV2ZW50LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSB7CitwdWJsaWM6Cisg
ICAgY2xhc3MgVG9rZW4geworICAgIHB1YmxpYzoKKyAgICAgICAgVG9rZW4oKTogbV9pbmRleChV
SU5UX01BWCkgeyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleCAhPSBVSU5UX01BWDsgfQorICAgICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghISp0aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2luZGV4OworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworICAgIAorICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0oKSB7IH0KKyAgICAKKyAg
ICBUb2tlbiBjdXJyZW50U3RhdGVUb2tlbigpIGNvbnN0CisgICAgeworICAgICAgICBUb2tlbiBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gbV9ldmVudHMuc2l6ZSgpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBWYXJp
YWJsZUV2ZW50JiB2YXJpYWJsZUV2ZW50KQorICAgIHsKKyAgICAgICAgbV9ldmVudHMuYXBwZW5k
KHZhcmlhYmxlRXZlbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0U3RhdGVB
dFRva2VuKFRva2VuIHRva2VuLCBPcGVyYW5kczxNdWx0aVZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5k
cykKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCB0b2tlbi5t
X2luZGV4OyArK2luZGV4KQorICAgICAgICAgICAgbV9ldmVudHNbaW5kZXhdLmFwcGx5VG8ob3Bl
cmFuZHMpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhcmlhYmxlRXZlbnQ+
IG1fZXZlbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJs
ZUV2ZW50U3RyZWFtX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUyLDYgKzE5
NTIsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAgIENvZGVPcmln
aW4gbV9jb2RlT3JpZ2luRm9yT1NSOwogICAgIAorICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0qIG1f
dmFyaWFibGVFdmVudFN0cmVhbTsKKyAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAg
ICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1
ZVNvdXJjZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133728</attachid>
            <date>2012-03-25 22:03:39 -0700</date>
            <delta_ts>2012-03-26 00:47:09 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_2.diff</filename>
            <type>text/plain</type>
            <size>33935</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMDQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNCBA
QAorMjAxMi0wMy0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
ICogYnl0ZWNvZGUvTW9kYWxWYWx1ZVJlY292ZXJ5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToK
KyAgICAgICAgKEpTQzo6TW9kYWxWYWx1ZVJlY292ZXJ5OjpNb2RhbFZhbHVlUmVjb3ZlcnkpOgor
ICAgICAgICAoTW9kYWxWYWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6TW9kYWxWYWx1ZVJl
Y292ZXJ5Ojpjb21wYXJlTW9kZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL011bHRpVmFsdWVSZWNv
dmVyeS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChNdWx0aVZhbHVlUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpNdWx0aVZhbHVlUmVjb3Zlcnk6Ok11bHRpVmFsdWVSZWNvdmVy
eSk6CisgICAgICAgIChKU0M6Ok11bHRpVmFsdWVSZWNvdmVyeTo6c2V0KToKKyAgICAgICAgKEpT
Qzo6TXVsdGlWYWx1ZVJlY292ZXJ5OjpmaW5kQmVzdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeU1vZGUuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoVmFy
aWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRXZlbnQ6OlZhcmlhYmxlRXZlbnQp
OgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50OjpieXRlY29kZU9wZXJhbmQpOgorICAgICAg
ICAoSlNDOjpWYXJpYWJsZUV2ZW50OjpyZWNvdmVyeSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxl
RXZlbnQ6OmFwcGx5VG8pOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxlRXZlbnRTdHJlYW0u
aDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoVmFyaWFibGVFdmVudFN0cmVhbSk6
CisgICAgICAgIChUb2tlbik6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRXZlbnRTdHJlYW06OlRv
a2VuOjpUb2tlbik6CisgICAgICAgIChKU0M6OlZhcmlhYmxlRXZlbnRTdHJlYW06OlRva2VuOjpv
cGVyYXRvciEpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpUb2tlbjo6aW5k
ZXgpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpWYXJpYWJsZUV2ZW50U3Ry
ZWFtKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFdmVudFN0cmVhbTo6Y3VycmVudFN0YXRlVG9r
ZW4pOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjphcHBlbmQpOgorICAgICAg
ICAoSlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdFN0YXRlQXRUb2tlbik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJ
VCk6CisKKzIwMTItMDMtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBERkcgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBzaG91bGQgYmUgY29tcHV0ZWQgbGF6
aWx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MjE1
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgV29yayBpbiBwcm9ncmVzcyEhCisKKyAgICAgICAgKiBieXRlY29kZS9Nb2RhbFZhbHVlUmVj
b3ZlcnkuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpNb2RhbFZhbHVl
UmVjb3Zlcnk6Ok1vZGFsVmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChNb2RhbFZhbHVlUmVjb3Zl
cnkpOgorICAgICAgICAoSlNDOjpNb2RhbFZhbHVlUmVjb3Zlcnk6OmlzQWxyZWFkeUluUmVnaXN0
ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6TW9kYWxWYWx1ZVJlY292ZXJ5Ojpjb21wYXJlTW9kZXMp
OgorICAgICAgICAqIGJ5dGVjb2RlL011bHRpVmFsdWVSZWNvdmVyeS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6TXVsdGlWYWx1ZVJlY292ZXJ5OjpzZXQpOgorICAg
ICAgICAoSlNDOjpNdWx0aVZhbHVlUmVjb3Zlcnk6OmZpbmRCZXN0U2xvdyk6CisgICAgICAgICog
Ynl0ZWNvZGUvTXVsdGlWYWx1ZVJlY292ZXJ5Lmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKE11bHRpVmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6Ok11bHRpVmFsdWVSZWNv
dmVyeTo6TXVsdGlWYWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6TXVsdGlWYWx1ZVJlY292
ZXJ5OjpmaW5kQmVzdCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAg
ICAgICAoSlNDOjppc0FscmVhZHlJblJlZ2lzdGVyRmlsZSk6CisgICAgICAgIChKU0MpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnlNb2RlLmg6IEFkZGVkLgorICAgICAgICAoSlND
KToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDKToKKyAgICAgICAgKFZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZUV2
ZW50OjpWYXJpYWJsZUV2ZW50KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFdmVudDo6Ynl0ZWNv
ZGVPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVFdmVudDo6cmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZUV2ZW50OjphcHBseVRvKToKKyAgICAgICAgKiBieXRlY29kZS9W
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdFN0YXRlQXRUb2tlbik6CisgICAg
ICAgICogYnl0ZWNvZGUvVmFyaWFibGVFdmVudFN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qyk6CisgICAgICAgIChWYXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKFRva2VuKToKKyAg
ICAgICAgKEpTQzo6VmFyaWFibGVFdmVudFN0cmVhbTo6VG9rZW46OlRva2VuKToKKyAgICAgICAg
KEpTQzo6VmFyaWFibGVFdmVudFN0cmVhbTo6VG9rZW46Om9wZXJhdG9yISk6CisgICAgICAgIChK
U0M6OlZhcmlhYmxlRXZlbnRTdHJlYW06OlRva2VuOjppbmRleCk6CisgICAgICAgIChKU0M6OlZh
cmlhYmxlRXZlbnRTdHJlYW06OlZhcmlhYmxlRXZlbnRTdHJlYW0pOgorICAgICAgICAoSlNDOjpW
YXJpYWJsZUV2ZW50U3RyZWFtOjpjdXJyZW50U3RhdGVUb2tlbik6CisgICAgICAgIChKU0M6OlZh
cmlhYmxlRXZlbnRTdHJlYW06OmFwcGVuZCk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25J
bmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OkdlbmVyYXRpb25JbmZv
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEludGVnZXIpOgorICAgICAgICAo
SlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6R2VuZXJhdGlvbkluZm86OmluaXRDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6aW5pdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZv
Ojppbml0RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdFN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjp1c2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJhdGlvbkluZm86OnNldFNwaWxsZWQpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRp
b25JbmZvOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmZpbGxDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEludGVn
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQm9vbGVhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxEb3VibGUpOgorICAgICAgICAo
SlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsU3RvcmFnZSk6CisgICAgICAgIChHZW5lcmF0
aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmFzc29jaWF0ZVdp
dGhCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmFwcGVuZFRv
U3RyZWFtKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YWRkRmlsbFRvU3Ry
ZWFtKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YWRkU3BpbGxUb1N0cmVh
bSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxh
dGl2ZUpJVCk6CisKIDIwMTItMDMtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICAqIGJ5dGVjb2RlL01vZGFsVmFsdWVSZWNvdmVyeS5oOiBBZGRlZC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Nb2RhbFZhbHVlUmVjb3ZlcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9kYWxWYWx1ZVJlY292
ZXJ5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTW9k
YWxWYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBNb2RhbFZhbHVl
UmVjb3ZlcnlfaAorI2RlZmluZSBNb2RhbFZhbHVlUmVjb3ZlcnlfaAorCisjaW5jbHVkZSAiVmFs
dWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnlNb2RlLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IE1vZGFsVmFsdWVSZWNv
dmVyeSB7CisgICAgTW9kYWxWYWx1ZVJlY292ZXJ5KCkgeyB9CisgICAgCisgICAgTW9kYWxWYWx1
ZVJlY292ZXJ5KAorICAgICAgICBWYWx1ZVJlY292ZXJ5TW9kZSBtb2RlLAorICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZGZnT3BlcmFuZCwKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkpCisgICAgICAgIDogbV9tb2RlKG1vZGUpCisgICAgICAgICwgbV9kZmdPcGVyYW5kKGRm
Z09wZXJhbmQpCisgICAgICAgICwgbV9yZWNvdmVyeShyZWNvdmVyeSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIFZhbHVlUmVjb3ZlcnlNb2RlIG1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9kZmdPcGVyYW5kOworICAgIFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVyeTsKKyAgICAKKyAgICBi
b29sIGlzQWxyZWFkeUluUmVnaXN0ZXJGaWxlKFZpcnR1YWxSZWdpc3RlciBieXRlY29kZU9wZXJh
bmQpCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IGJ5dGVjb2RlT3BlcmFuZCA9PSBtX2Rm
Z09wZXJhbmQ7CisgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gSlNDOjppc0FscmVhZHlJblJlZ2lz
dGVyRmlsZShtX3JlY292ZXJ5LnRlY2huaXF1ZSgpKSk7CisgICAgICAgIGlmIChyZXN1bHQpCisg
ICAgICAgICAgICBBU1NFUlQobV9tb2RlID09IFByaW1hcnlSZWNvdmVyeSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sIGNvbXBhcmVNb2RlcygK
KyAgICAgICAgY29uc3QgTW9kYWxWYWx1ZVJlY292ZXJ5JiBhLAorICAgICAgICBjb25zdCBNb2Rh
bFZhbHVlUmVjb3ZlcnkmIGIpCisgICAgeworICAgICAgICByZXR1cm4gYS5tX21vZGUgPCBiLm1f
bW9kZTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIE1vZGFs
VmFsdWVSZWNvdmVyeV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9N
dWx0aVZhbHVlUmVjb3ZlcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9NdWx0aVZhbHVlUmVjb3ZlcnkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL011bHRpVmFsdWVSZWNvdmVyeS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk11bHRpVmFsdWVSZWNv
dmVyeS5oIgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgSlNDIHsKKwordm9p
ZCBNdWx0aVZhbHVlUmVjb3Zlcnk6OnNldChWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVPcGVyYW5k
LCBjb25zdCBNb2RhbFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5KQoreworICAgIC8vIFNwZWNpYWwg
Y2FzZTogaWYgdGhlIHJlY292ZXJ5IGluZGljYXRlcyB0aGF0IHdlIGhhdmUgYSB2YWx1ZSB0aGF0
IGlzCisgICAgLy8gYWxyZWFkeSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgdGhlbiB3ZSdyZSBkb25l
LiBUaGlzIGlzIGluZGljYXRlZCBieQorICAgIC8vIHZhcmlhYmxlcyB0aGF0IGhhdmUgZGZnT3Bl
cmFuZCA9PSBieXRlY29kZU9wZXJhbmQuIEl0IGFsc28gbWVhbnMgdGhhdAorICAgIC8vIHRoZSB0
ZWNobmlxdWUgc2hvdWxkIGJlIEFscmVhZHlJblJlZ2lzdGVyRmlsZVhZWi4gVGhpcyBpcyBhc3Nl
cnRlZCBpbgorICAgIC8vIE1vZGFsVmFsdWVSZWNvdmVyeTo6aXNBbHJlYWR5SW5SZWdpc3RlckZp
bGUoKS4KKyAgICBpZiAocmVjb3ZlcnkuaXNBbHJlYWR5SW5SZWdpc3RlckZpbGUoYnl0ZWNvZGVP
cGVyYW5kKSkgeworICAgICAgICBtX2xpc3Quc2hyaW5rKDEpOworICAgICAgICBtX2xpc3RbMF0g
PSByZWNvdmVyeTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgLy8gQW5v
dGhlciBzcGVjaWFsIGNhc2U6IGlmIHRoZSBjdXJyZW50IHJlY292ZXJ5IHRoYXQgdGhpcyBjbGFp
bXMgdG8gaGF2ZQorICAgIC8vIGlzIGFscmVhZHlJblJlZ2lzdGVyRmlsZSwgdGhlbiBjbGVhciBp
dCwgc2luY2Ugd2UncmUgYmFzaWNhbGx5IHNheWluZworICAgIC8vIHRoYXQgYWx0aG91Z2ggdGhl
cmUgaXMgYWxyZWFkeSBhIHZhbHVlIGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoaXMKKyAgICAv
LyBvcGVyYW5kIGluZGV4LCBpdCdzIG5vdyBzdGFsZS4KKyAgICBpZiAobV9saXN0LnNpemUoKSAm
JiBtX2xpc3RbMF0uaXNBbHJlYWR5SW5SZWdpc3RlckZpbGUoYnl0ZWNvZGVPcGVyYW5kKSkgewor
ICAgICAgICBBU1NFUlQobV9saXN0LnNpemUoKSA9PSAxKTsKKyAgICAgICAgbV9saXN0LnNocmlu
aygwKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZpcnN0IHNlZSBpZiB3ZSBhbHJlYWR5IGhh
dmUgdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLiBJZiBzbywgd2UgcmVwbGFjZQorICAgIC8vIHRoZSBy
ZWNvdmVyeSBmb3IgdGhhdCByZWdpc3Rlci4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9saXN0W2ldLm1fZGZnT3BlcmFuZCA9
PSByZWNvdmVyeS5tX2RmZ09wZXJhbmQpIHsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5tX3Jl
Y292ZXJ5LnRlY2huaXF1ZSgpID09IERvbnRLbm93KSB7CisgICAgICAgICAgICAgICAgbV9saXN0
W2ldID0gbV9saXN0Lmxhc3QoKTsKKyAgICAgICAgICAgICAgICBtX2xpc3QucmVtb3ZlTGFzdCgp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1f
bGlzdFtpXSA9IHJlY292ZXJ5OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgICAgICAKKyAgICAvLyBXZSBkb24ndCBhbHJlYWR5IGhhdmUgdGhpcyB2YWx1ZSByZWNv
dmVyeS4gVGhpcyBtZWFucyB3ZSdyZSBhZGRpbmcgYQorICAgIC8vIG5ldyBvbmUuCisgICAgQVNT
RVJUKHJlY292ZXJ5Lm1fcmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRG9udEtub3cpOworICAgIG1f
bGlzdC5hcHBlbmQocmVjb3ZlcnkpOworfQorCitWYWx1ZVJlY292ZXJ5IE11bHRpVmFsdWVSZWNv
dmVyeTo6ZmluZEJlc3RTbG93KCkKK3sKKyAgICBzdGQ6OnNvcnQobV9saXN0LmJlZ2luKCksIG1f
bGlzdC5lbmQoKSwgTW9kYWxWYWx1ZVJlY292ZXJ5Ojpjb21wYXJlTW9kZXMpOworICAgIHJldHVy
biBtX2xpc3RbMF0ubV9yZWNvdmVyeTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTXVsdGlWYWx1ZVJlY292ZXJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL011bHRpVmFsdWVSZWNvdmVy
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL011bHRp
VmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTXVsdGlWYWx1ZVJl
Y292ZXJ5X2gKKyNkZWZpbmUgTXVsdGlWYWx1ZVJlY292ZXJ5X2gKKworI2luY2x1ZGUgIk1vZGFs
VmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIE11bHRpVmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgTXVsdGlWYWx1
ZVJlY292ZXJ5KCkgeyB9CisgICAgCisgICAgdm9pZCBzZXQoVmlydHVhbFJlZ2lzdGVyIGJ5dGVj
b2RlT3BlcmFuZCwgY29uc3QgTW9kYWxWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSk7CisgICAgCisg
ICAgVmFsdWVSZWNvdmVyeSBmaW5kQmVzdCgpCisgICAgeworICAgICAgICAvLyBGYXN0IGNhc2U6
IHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCBpcyBhIFByaW1hcnkgdGhlbiB3ZSdyZSBkb25l
LgorICAgICAgICBpZiAoTElLRUxZKG1fbGlzdFswXS5tX21vZGUgPT0gUHJpbWFyeVJlY292ZXJ5
KSkKKyAgICAgICAgICAgIHJldHVybiBtX2xpc3RbMF0ubV9yZWNvdmVyeTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBmaW5kQmVzdFNsb3coKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IFZhbHVlUmVjb3ZlcnkgZmluZEJlc3RTbG93KCk7CisgICAgCisgICAgVmVjdG9yPE1vZGFsVmFs
dWVSZWNvdmVyeSwgMT4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBNdWx0aVZhbHVlUmVjb3ZlcnlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDYgKzY3LDIwIEBAIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CiAgICAgRG9u
dEtub3cKIH07CiAKK2lubGluZSBib29sIGlzQWxyZWFkeUluUmVnaXN0ZXJGaWxlKFZhbHVlUmVj
b3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKQoreworICAgIHN3aXRjaCAodGVjaG5pcXVlKSB7Cisg
ICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMjoKKyAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5i
b3hlZENlbGw6CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFu
OgorICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkRG91YmxlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCiBjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKIHB1YmxpYzoKICAgICBWYWx1ZVJlY292ZXJ5
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5TW9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJl
Y292ZXJ5TW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUmVjb3ZlcnlNb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYWx1
ZVJlY292ZXJ5TW9kZV9oCisjZGVmaW5lIFZhbHVlUmVjb3ZlcnlNb2RlX2gKKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gVmFsdWVSZWNvdmVyeU1vZGUgeworICAgIC8vIFRoZSBvcmlnaW5hbCB1
bm1vZGlmaWVkIHZhbHVlLgorICAgIFByaW1hcnlSZWNvdmVyeSwKKyAgICAKKyAgICAvLyBBIHZh
bHVlIG1vZGlmaWVkIGludG8gYSBtb3JlIGdlbmVyaWMgZm9ybS4gSXQgaXMgYW4gYWNjdXJhdGUg
cmVwcmVzZW50YXRpb24KKyAgICAvLyBvZiB0aGUgb3JpZ2luYWwgdmFsdWUsIGJ1dCBpdCBtYXkg
bm90IGJlIGFzIGVmZmljaWVudCBvZiBhIHJlcHJlc2VudGF0aW9uLgorICAgIFVwY2FzdFJlY292
ZXJ5LAorICAgIAorICAgIC8vIEEgdmFsdWUgbW9kaWZpZWQgaW50byBhIGxlc3MgZ2VuZXJpYyBm
b3JtLiBJdCBpcyBub3QgYW4gYWNjdXJhdGUKKyAgICAvLyByZXByZXNlbnRhdGlvbiBvZiB0aGUg
b3JpZ2luYWwgdmFsdWUsIGJ1dCBpZiBpdCBpcyB0aGUgb25seSByZXByZXNlbnRhdGlvbgorICAg
IC8vIHdlIGhhdmUgbGVmdCB0aGVuIGl0IGlzIGNvcnJlY3QgdG8gdXNlIGl0LiBJZiB0aGlzIGlz
IHRoZSBvbmx5IHJlbWFpbmluZworICAgIC8vIGxpdmUgdmFsdWUgdGhlbiB3ZSBrbm93IHRoYXQg
dGhlIERGRyBoYXMgcHJvdmVkIHRoYXQgYWxsIHJlbWFpbmluZworICAgIC8vIG9wZXJhdGlvbnMg
b24gdGhpcyB2YWx1ZSB3aWxsIGJlIGNvbnRlbnQgd2l0aCB1c2luZyB0aGlzIGxlc3MgZ2VuZXJp
YyBmb3JtLgorICAgIERvd25jYXN0UmVjb3ZlcnkKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIFZhbHVlUmVjb3ZlcnlNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVFdmVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFZhcmlhYmxlRXZlbnRfaAorI2RlZmluZSBWYXJpYWJsZUV2ZW50
X2gKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIk1vZGFsVmFsdWVSZWNvdmVy
eS5oIgorI2luY2x1ZGUgIk11bHRpVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgIk9wZXJhbmRz
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBEZXNjcmliZXMgdGhpbmdzIHRoYXQgY2FuIGhh
cHBlbiB0byB0aGUgbWFubmVyIGluIHdoaWNoIGEgdmFyaWFibGUgaXMKKy8vIHJlY29yZGVkIGJ5
IGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBERkcuCitjbGFzcyBWYXJpYWJsZUV2ZW50IHsKK3B1Ymxp
YzoKKyAgICBWYXJpYWJsZUV2ZW50KCkgeyB9CisgICAgCisgICAgVmFyaWFibGVFdmVudCgKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlT3BlcmFuZCwKKyAgICAgICAgTW9kYWxWYWx1
ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAgICAgICA6IG1fYnl0ZWNvZGVPcGVyYW5kKGJ5dGVjb2Rl
T3BlcmFuZCkKKyAgICAgICAgLCBtX3JlY292ZXJ5KHJlY292ZXJ5KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgVmFyaWFibGVFdmVudCgKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2Rl
T3BlcmFuZCwKKyAgICAgICAgVmFsdWVSZWNvdmVyeU1vZGUgbW9kZSwKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRmZ09wZXJhbmQsCisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5KQorICAgICAgICA6IG1fYnl0ZWNvZGVPcGVyYW5kKGJ5dGVjb2RlT3BlcmFuZCkKKyAgICAg
ICAgLCBtX3JlY292ZXJ5KG1vZGUsIGRmZ09wZXJhbmQsIHJlY292ZXJ5KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGJ5dGVjb2RlT3BlcmFuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVPcGVyYW5kOyB9CisgICAgY29uc3QgTW9kYWxWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3Zlcnk7IH0KKyAgICAKKyAgICB2b2lkIGFw
cGx5VG8oT3BlcmFuZHM8TXVsdGlWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpCisgICAgeworICAg
ICAgICBvcGVyYW5kcy5vcGVyYW5kKG1fYnl0ZWNvZGVPcGVyYW5kKS5zZXQobV9ieXRlY29kZU9w
ZXJhbmQsIG1fcmVjb3ZlcnkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbV9ieXRlY29kZU9wZXJhbmQ7CisgICAgTW9kYWxWYWx1ZVJlY292ZXJ5IG1fcmVjb3Zlcnk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZhcmlhYmxlRXZlbnRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0U3Rh
dGVBdFRva2VuKAorICAgIFRva2VuIHRva2VuLCBPcGVyYW5kczxNdWx0aVZhbHVlUmVjb3Zlcnk+
JiBvcGVyYW5kcykKK3sKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgdG9rZW4u
bV9pbmRleDsgKytpbmRleCkKKyAgICAgICAgbV9ldmVudHNbaW5kZXhdLmFwcGx5VG8ob3BlcmFu
ZHMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVFdmVudFN0cmVhbS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlRXZlbnRTdHJlYW0u
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhcmlhYmxlRXZlbnRTdHJlYW1faAorI2Rl
ZmluZSBWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKworI2luY2x1ZGUgIlZhcmlhYmxlRXZlbnQuaCIK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWYXJp
YWJsZUV2ZW50U3RyZWFtIHsKK3B1YmxpYzoKKyAgICBjbGFzcyBUb2tlbiB7CisgICAgcHVibGlj
OgorICAgICAgICBUb2tlbigpOiBtX2luZGV4KFVJTlRfTUFYKSB7IH0KKyAgICAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IFVJTlRfTUFYOyB9CisgICAgICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCEh
KnRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgICAgIH0KKyAgICBwcml2
YXRlOgorICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisgICAgCisgICAgVmFyaWFi
bGVFdmVudFN0cmVhbSgpIHsgfQorICAgIAorICAgIFRva2VuIGN1cnJlbnRTdGF0ZVRva2VuKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFRva2VuIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faW5k
ZXggPSBtX2V2ZW50cy5zaXplKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IFZhcmlhYmxlRXZlbnQmIHZhcmlhYmxlRXZlbnQpCisg
ICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQodmFyaWFibGVFdmVudCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgcmVjb25zdHJ1Y3RTdGF0ZUF0VG9rZW4oVG9rZW4gdG9rZW4sIE9wZXJhbmRz
PE11bHRpVmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKTsKKyAgICAKK3ByaXZhdGU6CisgICAgVmVj
dG9yPFZhcmlhYmxlRXZlbnQ+IG1fZXZlbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gMTEyMDQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJE
YXRhRm9ybWF0LmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8ZGZn
L0RGR0pJVENvbXBpbGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAg
LTQ2LDYgKzQ3LDcgQEAgY2xhc3MgR2VuZXJhdGlvbkluZm8gewogcHVibGljOgogICAgIEdlbmVy
YXRpb25JbmZvKCkKICAgICAgICAgOiBtX25vZGVJbmRleChOb05vZGUpCisgICAgICAgICwgbV9i
eXRlY29kZU9wZXJhbmQoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3VzZUNv
dW50KDApCiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICAgICAg
ICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25lKQpAQCAtNjAsNiArNjIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAg
bV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVl
OworICAgICAgICBtX2J5dGVjb2RlT3BlcmFuZCA9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CiAg
ICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0SW50ZWdlcihO
b2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTcw
LDYgKzczLDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5v
bmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAg
ICAgICAgbV9ieXRlY29kZU9wZXJhbmQgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwogICAgICAg
ICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC04Myw2
ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25l
OwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAg
ICAgIG1fYnl0ZWNvZGVPcGVyYW5kID0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC05
Nyw2ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAg
ICB1LnYudGFnR1BSID0gdGFnR1BSOwogICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBheWxvYWRH
UFI7CisgICAgICAgIG1fYnl0ZWNvZGVPcGVyYW5kID0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsK
ICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbmRpZgpAQCAtMTA4LDYgKzEx
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwog
ICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAg
IG1fYnl0ZWNvZGVPcGVyYW5kID0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAgQVNT
RVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRCb29sZWFuKE5vZGVJbmRleCBu
b2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpAQCAtMTE4LDYgKzEyNSw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAg
ICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1f
Ynl0ZWNvZGVPcGVyYW5kID0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKICAgICAgICAgQVNTRVJU
KG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXREb3VibGUoTm9kZUluZGV4IG5vZGVJ
bmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCkBAIC0xMjksNiArMTM3LDcgQEAg
cHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAg
IG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgbV9ieXRl
Y29kZU9wZXJhbmQgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBBU1NFUlQobV91
c2VDb3VudCk7CiAgICAgfQogICAgIHZvaWQgaW5pdFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRl
eCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCkBAIC0xMzksNiArMTQ4LDcgQEAgcHVi
bGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1f
Y2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgbV9ieXRlY29k
ZU9wZXJhbmQgPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwogICAgICAgICBBU1NFUlQobV91c2VD
b3VudCk7CiAgICAgfQogCkBAIC0xNDgsMTAgKzE1OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gTWFy
ayB0aGUgdmFsdWUgYXMgaGF2aW5nIGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1c2VDb3VudCku
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmFs
dWUsIGFuZCBhbnkKICAgICAvLyBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBiZSBm
cmVlZC4KLSAgICBib29sIHVzZSgpCisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVudFN0cmVhbSYg
c3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgZGZnT3BlcmFuZCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX3VzZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICEtLW1fdXNlQ291bnQ7CisgICAgICAgIGJv
b2wgcmVzdWx0ID0gIS0tbV91c2VDb3VudDsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIGFwcGVuZFRvU3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCwgVmFsdWVSZWNvdmVyeSgpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNoZWNrIHRo
ZSBvcGVyYW5kcyBvZiBvcGVyYXRpb25zIHRvIHNlZSBpZiB0aGV5IGFyZSBvbgpAQCAtMjI0LDcg
KzIzNyw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhIFZpcnR1YWxS
ZWdpc3RlciBpcyBiZWluZyBzcGlsbGVkIHRvIHRoZSBSZWdpc3RlckZpbGUgZm9yIHRoZSBmaXJz
dCB0aW1lLgotICAgIHZvaWQgc3BpbGwoRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCkKKyAgICB2b2lk
IHNwaWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIGRmZ09w
ZXJhbmQsIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBXZSBzaG91
bGRuJ3QgYmUgc3BpbGwgdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZy4KICAgICAgICAg
QVNTRVJUKCFtX2NhbkZpbGwpOwpAQCAtMjM1LDE1ICsyNDgsMTkgQEAgcHVibGljOgogICAgICAg
ICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fc3BpbGxGb3Jt
YXQgPSBzcGlsbEZvcm1hdDsKICAgICAgICAgbV9jYW5GaWxsID0gdHJ1ZTsKKyAgICAgICAgCisg
ICAgICAgIGFkZFNwaWxsVG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVyYW5kKTsKICAgICB9CiAKICAg
ICAvLyBDYWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAoY29uc3RhbnRz
IGFuZCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxsZWQpLCB0byBt
YXJrIHRoZW0gYXMgbm8gbG9uZ2VyIGJlaW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJzLgotICAgIHZv
aWQgc2V0U3BpbGxlZCgpCisgICAgdm9pZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZlbnRTdHJlYW0m
IHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIGRmZ09wZXJhbmQpCiAgICAgewogICAgICAgICAvLyBT
aG91bGQgb25seSBiZSBjYWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywg
YW5kIGFyZSBjdXJyZW50bHkgaW4gcmVnaXN0ZXJzLgogICAgICAgICBBU1NFUlQobV9jYW5GaWxs
ICYmIG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICBtX3JlZ2lz
dGVyRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CisgICAgICAgIAorICAgICAgICBhZGRTcGlsbFRv
U3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCk7CiAgICAgfQogICAgIAogICAgIHZvaWQga2lsbFNw
aWxsZWQoKQpAQCAtMjU1LDQ2ICsyNzIsOTAgQEAgcHVibGljOgogICAgIC8vIFJlY29yZCB0aGF0
IHRoaXMgdmFsdWUgaXMgZmlsbGVkIGludG8gbWFjaGluZSByZWdpc3RlcnMsCiAgICAgLy8gdHJh
Y2tpbmcgd2hpY2ggcmVnaXN0ZXJzLCBhbmQgd2hhdCBmb3JtYXQgdGhlIHZhbHVlIGhhcy4KICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZmlsbEpTVmFsdWUoR1BSUmVnIGdwciwgRGF0YUZv
cm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBmaWxsSlNWYWx1ZSgKKyAgICAg
ICAgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgZGZnT3BlcmFu
ZCwKKyAgICAgICAgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMp
CiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
bV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAg
IAorICAgICAgICBhZGRGaWxsVG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVyYW5kKTsKICAgICB9CiAj
ZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZvaWQgZmlsbEpTVmFsdWUoR1BSUmVnIHRhZ0dQ
UiwgR1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQor
ICAgIHZvaWQgZmlsbEpTVmFsdWUoCisgICAgICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVh
bSwgVmlydHVhbFJlZ2lzdGVyIGRmZ09wZXJhbmQsCisgICAgICAgIEdQUlJlZyB0YWdHUFIsIEdQ
UlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7
CiAgICAgICAgIEFTU0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX3JlZ2lz
dGVyRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOyAvLyBGSVhN
RTogZm9yIEpTVmFsdWVzIHdpdGgga25vd24gdHlwZSAoYm9vbGVhbiwgaW50ZWdlciwgY2VsbCBl
dGMuKSBubyB0YWdHUFIgaXMgbmVlZGVkPwogICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBheWxv
YWRHUFI7CisgICAgICAgIAorICAgICAgICBhZGRGaWxsVG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVy
YW5kKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsQ2VsbChHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmls
bENlbGwoCisgICAgICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lz
dGVyIGRmZ09wZXJhbmQsCisgICAgICAgIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3Jl
Z2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdENlbGw7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAg
ICAgICAKKyAgICAgICAgYWRkRmlsbFRvU3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCk7CiAgICAg
fQogI2VuZGlmCi0gICAgdm9pZCBmaWxsSW50ZWdlcihHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmls
bEludGVnZXIoCisgICAgICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJl
Z2lzdGVyIGRmZ09wZXJhbmQsCisgICAgICAgIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBt
X3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHUuZ3ByID0gZ3By
OworICAgICAgICAKKyAgICAgICAgYWRkRmlsbFRvU3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCk7
CiAgICAgfQotICAgIHZvaWQgZmlsbEJvb2xlYW4oR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxC
b29sZWFuKAorICAgICAgICBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdp
c3RlciBkZmdPcGVyYW5kLAorICAgICAgICBHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgbV9y
ZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRCb29sZWFuOwogICAgICAgICB1LmdwciA9IGdwcjsK
KyAgICAgICAgCisgICAgICAgIGFkZEZpbGxUb1N0cmVhbShzdHJlYW0sIGRmZ09wZXJhbmQpOwog
ICAgIH0KLSAgICB2b2lkIGZpbGxEb3VibGUoRlBSUmVnIGZwcikKKyAgICB2b2lkIGZpbGxEb3Vi
bGUoCisgICAgICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVy
IGRmZ09wZXJhbmQsCisgICAgICAgIEZQUlJlZyBmcHIpCiAgICAgewogICAgICAgICBBU1NFUlQo
ZnByICE9IEludmFsaWRGUFJSZWcpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZv
cm1hdERvdWJsZTsKICAgICAgICAgdS5mcHIgPSBmcHI7CisgICAgICAgIAorICAgICAgICBhZGRG
aWxsVG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVyYW5kKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsU3Rv
cmFnZShHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmlsbFN0b3JhZ2UoCisgICAgICAgIFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIGRmZ09wZXJhbmQsCisgICAgICAg
IEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1h
dFN0b3JhZ2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgYWRkRmls
bFRvU3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNz
b2NpYXRlV2l0aEJ5dGVjb2RlKAorICAgICAgICBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0s
IFZpcnR1YWxSZWdpc3RlciBkZmdPcGVyYW5kLCBWaXJ0dWFsUmVnaXN0ZXIgYnl0ZWNvZGVPcGVy
YW5kLCBWYWx1ZVJlY292ZXJ5TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVn
aXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgfHwgbV9zcGlsbEZvcm1hdCAhPSBEYXRhRm9y
bWF0Tm9uZSk7CisgICAgICAgIAorICAgICAgICBtX2J5dGVjb2RlT3BlcmFuZCA9IGJ5dGVjb2Rl
T3BlcmFuZDsKKyAgICAgICAgbV9tb2RlID0gbW9kZTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X3JlZ2lzdGVyRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICBhZGRGaWxs
VG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVyYW5kKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYWRkU3BpbGxUb1N0cmVhbShzdHJlYW0sIGRmZ09wZXJh
bmQpOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUoKQpAQCAtMzAzLDggKzM2NCw0MSBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kVG9TdHJlYW0oVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgZGZnT3BlcmFuZCwgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBzdHJlYW0uYXBwZW5kKFZhcmlh
YmxlRXZlbnQobV9ieXRlY29kZU9wZXJhbmQsIG1fbW9kZSwgZGZnT3BlcmFuZCwgcmVjb3Zlcnkp
KTsgICAgICAgIAorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEZpbGxUb1N0cmVhbShWYXJpYWJs
ZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdpc3RlciBkZmdPcGVyYW5kKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkg
eworICAgICAgICAgICAgYXBwZW5kVG9TdHJlYW0oc3RyZWFtLCBkZmdPcGVyYW5kLCBWYWx1ZVJl
Y292ZXJ5OjppbkZQUih1LmZwcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9y
bWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICBhcHBlbmRUb1N0cmVhbShzdHJlYW0s
IGRmZ09wZXJhbmQsIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih1LnYudGFnR1BSLCB1LnYucGF5bG9h
ZEdQUikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
CisgICAgICAgIGFwcGVuZFRvU3RyZWFtKHN0cmVhbSwgZGZnT3BlcmFuZCwgVmFsdWVSZWNvdmVy
eTo6aW5HUFIodS52LmdwciwgbV9yZWdpc3RlckZvcm1hdCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGFkZFNwaWxsVG9TdHJlYW0oVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFs
UmVnaXN0ZXIgZGZnT3BlcmFuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NwaWxsRm9ybWF0
ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgCisgICAgICAgIGFwcGVuZFRvU3RyZWFtKHN0
cmVhbSwgZGZnT3BlcmFuZCwgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUo
ZGZnT3BlcmFuZCwgbV9zcGlsbEZvcm1hdCkpOworICAgIH0KKyAgICAKICAgICAvLyBUaGUgaW5k
ZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVn
aXN0ZXIuCiAgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBt
X2J5dGVjb2RlT3BlcmFuZDsKKyAgICBWYWx1ZVJlY292ZXJ5TW9kZSBtX21vZGU7CiAgICAgdWlu
dDMyX3QgbV91c2VDb3VudDsKICAgICBEYXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7CiAgICAg
RGF0YUZvcm1hdCBtX3NwaWxsRm9ybWF0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTUyLDYgKzE5NTIsOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAg
IENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yT1NSOwogICAgIAorICAgIFZhcmlhYmxlRXZlbnRT
dHJlYW0qIG1fdmFyaWFibGVFdmVudFN0cmVhbTsKKyAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1f
c3RhdGU7CiAgICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihj
b25zdCBWYWx1ZVNvdXJjZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133744</attachid>
            <date>2012-03-26 00:47:09 -0700</date>
            <delta_ts>2012-03-26 16:02:11 -0700</delta_ts>
            <desc>work in progress - a different approach</desc>
            <filename>variablestream_patch_3.diff</filename>
            <type>text/plain</type>
            <size>17782</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDEyLTAzLTI2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIE9TUiBleGl0IHZhbHVlIHJlY292ZXJpZXMgc2hvdWxkIGJlIGNvbXB1dGVkIGxhemlseQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIxNTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdv
cmsgaW4gcHJvZ3JlcyEhCisKKyAgICAgICAgKiBkZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRl
ZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpNaW5pZmllZEdyYXBoOjpNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZH
OjpNaW5pZmllZEdyYXBoOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6
YXBwZW5kKToKKyAgICAgICAgKiBkZmcvREZHTWluaWZpZWROb2RlLmg6IEFkZGVkLgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5pZmllZEdyYXBoKToKKyAg
ICAgICAgKE1pbmlmaWVkTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpN
aW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6bm9kZVdpdGhD
aGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpub2RlV2l0aENvbnN0YW50
SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6b3ApOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlm
aWVkTm9kZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0
YW50SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Z2V0SW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAoSlND
OjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnRJbmRleCk6CisgICAgICAgICogZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFi
bGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6VmFyaWFibGVFdmVu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZmlsbEdQUik6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZmlsbFBhaXIpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkZWF0aCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlRXZlbnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om5vZGVJ
bmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZGF0YUZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUV2ZW50Ojp0YWdHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OnBheWxvYWRHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZwcik6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dmlydHVhbFJlZ2lzdGVyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5kKToKKyAgICAgICAgKiBkZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChWYXJpYWJsZUV2ZW50U3RyZWFtKToKKwogMjAxMi0wMy0yNSAgS2V2aW4gT2xsaXZpZXIgIDxr
ZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3hdIFVucmV2aWV3ZWQgYnVpbGQg
Zml4LiBNb3ZlIFdURiB0byBpdHMgb3duIHN0YXRpYyBsaWIgYnVpbGQuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTWluaWZpZWRHcmFwaF9oCisjZGVmaW5lIERGR01pbmlmaWVk
R3JhcGhfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR01pbmlmaWVkTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgTWluaWZpZWRHcmFwaCB7CitwdWJsaWM6CisgICAgTWluaWZp
ZWRHcmFwaCgpIHsgfQorCisgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2Vh
cmNoPE1pbmlmaWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKKyAg
ICAgICAgICAgICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgV1RGOjpLZXlNdXN0
Tm90QmVQcmVzZW50SW5BcnJheSk7CisgICAgICAgIGlmIChlbnRyeS0+aW5kZXgoKSAhPSBub2Rl
SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGVudHJ5OworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBNaW5pZmllZE5vZGUmIG5vZGUpCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fbGlzdC5zaXplKCkgfHwgbm9kZS5pbmRleCgpID4gbV9saXN0
Lmxhc3QoKS5pbmRleCgpKTsKKyAgICAgICAgbV9saXN0LmFwcGVuZChub2RlKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPE1pbmlmaWVkTm9kZT4gbV9saXN0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdNaW5pZmllZEdyYXBoX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdNaW5pZmllZE5vZGVfaAorI2RlZmluZSBERkdNaW5pZmllZE5vZGVfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05v
ZGVUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworaW5saW5lIGJv
b2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAg
ICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworY2xhc3MgTWluaWZpZWROb2RlIHsKK3B1YmxpYzoKKyAgICBNaW5pZmllZE5vZGUoKSB7
IH0KKyAgICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIG5vZGVXaXRoQ2hpbGQoTm9kZUluZGV4
IGluZGV4LCBOb2RlVHlwZSBvcCwgTm9kZUluZGV4IGNoaWxkKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc0NoaWxkKG9wKSk7CisgICAgICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX29wID0gb3A7CisgICAg
ICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gY2hpbGQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBNaW5pZmllZE5vZGUgbm9kZVdpdGhDb25zdGFudElu
ZGV4KE5vZGVJbmRleCBpbmRleCwgTm9kZVR5cGUgb3AsIHVuc2lnbmVkIGNvbnN0YW50SW5kZXgp
CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnRJbmRleChvcCkpOworICAgICAgICBN
aW5pZmllZE5vZGUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAg
ICAgICByZXN1bHQubV9vcCA9IG9wOworICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGNo
aWxkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXgg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTm9kZVR5cGUgb3AoKSBjb25z
dCB7IHJldHVybiBtX29wOyB9CisgICAgCisgICAgTm9kZUlkbmV4IGNoaWxkMSgpIGNvbnN0IHsK
KyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKKyAgICAgICAgcmV0dXJuIG1fY2hpbGRP
ckluZm87CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXgoKSBjb25zdCB7
CisgICAgICAgIEFTU0VSVChoYXNDb25zdGFudEluZGV4KG1fb3ApKTsKKyAgICAgICAgcmV0dXJu
IG1fY2hpbGRPckluZm87CisgICAgfQorICAgIAorICAgIHN0YXRpYyBOb2RlSW5kZXggZ2V0SW5k
ZXgoTWluaWZpZWROb2RlKiBub2RlKSB7IHJldHVybiBub2RlLT5pbmRleCgpOyB9CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyBib29sIGhhc0NoaWxkKE5vZGVUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAg
ICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50
SW5kZXgoTm9kZVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlID09IEpTQ29u
c3RhbnQ7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGVUeXBl
IG1fb3A7CisgICAgdW5zaWduZWQgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlm
aWVkIGdyYXBoIGhhdmUgb25seSBvbmUgY2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
TWluaWZpZWROb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJp
YWJsZUV2ZW50X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2VudW0gVmFyaWFibGVFdmVudEtpbmQgeworICAgIEJpcnRoVG9GaWxs
LAorICAgIEJpcnRoVG9TcGlsbCwKKyAgICBGaWxsLAorICAgIFNwaWxsLAorICAgIERlYXRoLAor
ICAgIE1vdkhpbnQsCisgICAgU2V0TG9jYWwsCisgICAgSW52YWxpZEV2ZW50S2luZAorfTsKKwor
Y2xhc3MgVmFyaWFibGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgpCisgICAg
ICAgIDogbV9raW5kKEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1h
dCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwg
fHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAg
ZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS5ncHIgPSBncHI7Cisg
ICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9
IGRhdGFGb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsUGFpcihWYXJpYWJs
ZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCB0YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFIpCisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwp
OworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0g
bm9kZUluZGV4OworICAgICAgICBldmVudC51LnBhaXIudGFnR1BSID0gdGFnR1BSOworICAgICAg
ICBldmVudC51LnBhaXIucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIGV2ZW50Lm1f
a2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRKUzsK
KyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZpbGxGUFIoVmFyaWFibGVFdmVudEtp
bmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJ
RCBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBraW5k
ID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5t
X2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LmZwciA9IGZwcjsKKyAgICAgICAg
ZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gRGF0YUZv
cm1hdERvdWJsZTsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgVmFyaWFibGVFdmVudCBzcGlsbChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXgg
bm9kZUluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09IEJpcnRoVG9TcGlsbCB8fCBraW5k
ID09IFNwaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQu
bV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gdmlydHVh
bFJlZ2lzdGVyOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5t
X2RhdGFGb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZGVhdGgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXgg
PSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IERlYXRoOworICAgICAgICByZXR1
cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2Fs
KE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAg
ICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXgg
PSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7CisgICAg
ICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQg
PSBmb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhcmlhYmxlRXZlbnQgbW92SGludChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5k
ZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7Cisg
ICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAg
ICB9CisgICAgCisgICAgVmFyaWFibGVFdmVudEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgIT0gSW52YWxpZEV2ZW50S2lu
ZCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKyAgICAKKyAgICBEYXRhRm9ybWF0
IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0
aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IEJp
cnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9
PSBTZXRMb2NhbCk7CisgICAgICAgIHJldHVybiBtX2RhdGFGb3JtYXQ7CisgICAgfQorICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YUZvcm1hdCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgIT0g
RGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQVNTRVJU
KCEobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJu
IHUuZ3ByOworICAgIH0KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAgICAgQVNTRVJU
KG1fZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybiB1LnBhaXIudGFn
R1BSOworICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9r
aW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgcmV0dXJuIHUucGFpci5wYXlsb2FkR1BSOworICAgIH0KKyNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQg
ZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwg
fHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ID09IERhdGFG
b3JtYXREb3VibGUpOworICAgICAgICByZXR1cm4gdS5mcHI7CisgICAgfQorICAgIAorICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsKKyAgICAgICAg
cmV0dXJuIHUudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJhbmQoKSBjb25z
dCB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWwgfHwgbV9raW5kID09IE1vdkhp
bnQpOworICAgICAgICByZXR1cm4gdS52aXJ0dWFsUmVnOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgCisgICAgLy8gRm9yIEJpcnRoVG9GaWxsLCBG
aWxsOgorICAgIC8vICAgLSBUaGUgR1BSIG9yIEZQUiwgb3IgYSBHUFIgcGFpci4KKyAgICAvLyBG
b3IgQmlydGhUb1NwaWxsLCBTcGlsbDoKKyAgICAvLyAgIC0gVGhlIHZpcnR1YWwgcmVnaXN0ZXIu
CisgICAgLy8gRm9yIE1vdkhpbnQsIFNldExvY2FsOgorICAgIC8vICAgLSBUaGUgYnl0ZWNvZGUg
b3BlcmFuZC4KKyAgICAvLyBGb3IgRGVhdGg6CisgICAgLy8gICAtIFVudXNlZC4KKyAgICB1bmlv
biB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRh
Z0dQUjsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7
CisgICAgICAgIH0gcGFpcjsKKyNlbmRpZgorICAgICAgICBpbnQzMl90IHZpcnR1YWxSZWc7Cisg
ICAgfSB1OworICAgIAorICAgIGludDhfdCBtX2tpbmQ7CisgICAgaW50OF90IG1fZGF0YUZvcm1h
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVFdmVudF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50U3RyZWFt
X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudFN0cmVhbV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTWluaWZpZWRH
cmFwaC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnQuaCIKKyNpbmNsdWRlICJPcGVyYW5k
cy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3RvcjxWYXJp
YWJsZUV2ZW50PiB7CitwdWJsaWM6CisgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdChNaW5pZmll
ZEdyYXBoJiBncmFwaCwgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBv
cGVyYW5kcyk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW1faAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133917</attachid>
            <date>2012-03-26 16:02:11 -0700</date>
            <delta_ts>2012-03-27 13:31:40 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_4.diff</filename>
            <type>text/plain</type>
            <size>44894</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMi0wMy0yNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXMhIQorCisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OkdlbmVyYXRpb25JbmZvKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6
OkdlbmVyYXRpb25JbmZvOjppbml0SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJh
dGlvbkluZm86OmluaXRDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6
aW5pdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0RG91
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdFN0b3JhZ2UpOgor
ICAgICAgICAoR2VuZXJhdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnNwaWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9u
SW5mbzo6ZmlsbEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpm
aWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3Jh
Z2UpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZEdyYXBoLmg6IEFkZGVkLgorICAgICAgICAo
REZHKToKKyAgICAgICAgKE1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlm
aWVkR3JhcGg6Ok1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkR3Jh
cGg6OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphcHBlbmQpOgorICAg
ICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6OmJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoTWluaWZp
ZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Ok1pbmlmaWVkTm9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpub2RlV2l0aENoaWxkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om5vZGVXaXRoQ29uc3RhbnROdW1iZXIpOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok1pbmlmaWVkTm9kZTo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6b3ApOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y2hpbGQxKToKKyAgICAg
ICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0YW50bnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpNaW5pZmllZE5vZGU6OmdldEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5p
ZmllZE5vZGU6Omhhc0NoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhh
c0NvbnN0YW50TnVtYmVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aCk6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92
SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVj
b3JkU2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1ZhbHVlU291cmNlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpkYXRhRm9ybWF0VG9WYWx1ZVNvdXJjZUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OnZh
bHVlU291cmNlS2luZFRvRGF0YUZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6aXNJblJlZ2lz
dGVyRmlsZSk6CisgICAgICAgIChWYWx1ZVNvdXJjZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFs
dWVTb3VyY2U6OlZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
Zm9yUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvckRhdGFG
b3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
U291cmNlOjppc0luUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJj
ZTo6ZGF0YUZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRl
eCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAg
ICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKFZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OlZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsR1BSKToKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsUGFpcik6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudDo6ZmlsbEZQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmRlYXRoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6bW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6bm9kZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkYXRhRm9ybWF0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnRhZ0dQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dDo6cGF5bG9hZEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZnByKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAg
KFZhcmlhYmxlRXZlbnRTdHJlYW0pOgorCiAyMDEyLTAzLTI2ICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgVHJpZWQgdG8gZml4IHRoZSBXaW5kb3dzIGJ1aWxkLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAko
cmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX3JlZ2lzdGVyRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAgICAsIG1fc3BpbGxG
b3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAgICAgICAgICwgbV9jYW5GaWxsKGZhbHNlKQorICAgICAg
ICAsIG1fYm9ybkZvck9TUihmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC02MCw2ICs2MSw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAg
ICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9
IHRydWU7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91
c2VDb3VudCk7CiAgICAgfQogICAgIHZvaWQgaW5pdEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRl
eCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCkBAIC03MCw2ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2Nh
bkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9T
UiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2lmIFVTRShK
U1ZBTFVFNjQpCkBAIC04Myw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1h
dCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAg
dS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NF
UlQobV91c2VDb3VudCk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTk3LDYg
KzEwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUu
di50YWdHUFIgPSB0YWdHUFI7CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsK
KyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50
KTsKICAgICB9CiAjZW5kaWYKQEAgLTEwOCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
c3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAg
ICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRCb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpAQCAtMTE4
LDYgKzEyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRO
b25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7Cisg
ICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7
CiAgICAgfQogICAgIHZvaWQgaW5pdERvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJf
dCB1c2VDb3VudCwgRlBSUmVnIGZwcikKQEAgLTEyOSw2ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0g
ZmFsc2U7CiAgICAgICAgIHUuZnByID0gZnByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxz
ZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRTdG9y
YWdlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpA
QCAtMTM5LDE5ICsxNDcsNDQgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0
YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9
IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3Vz
ZUNvdW50KTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBub2RlIHRoYXQg
cHJvZHVjZWQgdGhpcyB2YWx1ZS4KICAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgeyByZXR1cm4g
bV9ub2RlSW5kZXg7IH0KKyAgICAKKyAgICBib29sIG5vdGljZU9TUkJpcnRoKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7
CisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGFw
cGVuZEZpbGwoQmlydGhUb0ZpbGwsIHN0cmVhbSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fc3BpbGxGb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpOworICAgICAgICBhcHBlbmRTcGlsbChCaXJ0aFRvU3BpbGwsIHN0cmVhbSwg
dmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgLy8g
TWFyayB0aGUgdmFsdWUgYXMgaGF2aW5nIGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1c2VDb3Vu
dCkuCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBvZiB0aGUg
dmFsdWUsIGFuZCBhbnkKICAgICAvLyBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBi
ZSBmcmVlZC4KLSAgICBib29sIHVzZSgpCisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAgICAgICBy
ZXR1cm4gIS0tbV91c2VDb3VudDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3VzZUNvdW50
OworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAgc3RyZWFt
LmFwcGVuZChWYXJpYWJsZUV2ZW50OjpkZWF0aChtX25vZGVJbmRleCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8g
Y2hlY2sgdGhlIG9wZXJhbmRzIG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRoZXkgYXJlIG9uCkBA
IC0yMjQsNyArMjU3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIGEg
VmlydHVhbFJlZ2lzdGVyIGlzIGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJlZ2lzdGVyRmlsZSBmb3Ig
dGhlIGZpcnN0IHRpbWUuCi0gICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQor
ICAgIHZvaWQgc3BpbGwoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQogICAgIHsKICAgICAg
ICAgLy8gV2Ugc2hvdWxkbid0IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxp
bmcuCiAgICAgICAgIEFTU0VSVCghbV9jYW5GaWxsKTsKQEAgLTIzNSw2ICsyNjgsOSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAg
bV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0OwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZFNw
aWxsKFNwaWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgLy8gQ2Fs
bGVkIG9uIHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxpbmcgKGNvbnN0YW50cyBhbmQgdmFs
dWVzIHRoYXQgaGF2ZQpAQCAtMjU1LDQ2ICsyOTEsNjcgQEAgcHVibGljOgogICAgIC8vIFJlY29y
ZCB0aGF0IHRoaXMgdmFsdWUgaXMgZmlsbGVkIGludG8gbWFjaGluZSByZWdpc3RlcnMsCiAgICAg
Ly8gdHJhY2tpbmcgd2hpY2ggcmVnaXN0ZXJzLCBhbmQgd2hhdCBmb3JtYXQgdGhlIHZhbHVlIGhh
cy4KICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHZvaWQgZmlsbEpTVmFsdWUoR1BSUmVnIGdwciwg
RGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBmaWxsSlNWYWx1ZShW
YXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZm9ybWF0
ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFGb3Jt
YXRKUyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHUuZ3By
ID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAg
IGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIHZvaWQgZmlsbEpTVmFsdWUoR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIs
IERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQgZmlsbEpTVmFsdWUo
VmFyaWFibEV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2Fk
R1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7CiAgICAgICAgIEFT
U0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0g
Zm9ybWF0OwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOyAvLyBGSVhNRTogZm9yIEpTVmFs
dWVzIHdpdGgga25vd24gdHlwZSAoYm9vbGVhbiwgaW50ZWdlciwgY2VsbCBldGMuKSBubyB0YWdH
UFIgaXMgbmVlZGVkPwogICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChG
aWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxDZWxsKEdQUlJlZyBncHIpCisgICAg
dm9pZCBmaWxsQ2VsbChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIpCiAg
ICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdENlbGw7CiAgICAgICAg
IHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAg
ICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9CiAjZW5kaWYKLSAgICB2b2lk
IGZpbGxJbnRlZ2VyKEdQUlJlZyBncHIpCisgICAgdm9pZCBmaWxsSW50ZWdlcihWYXJpYWJsZUV2
ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVy
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmls
bCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsQm9vbGVhbihHUFJSZWcgZ3ByKQorICAg
IHZvaWQgZmlsbEJvb2xlYW4oVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3By
KQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRCb29sZWFuOwog
ICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1Ip
CisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQg
ZmlsbERvdWJsZShGUFJSZWcgZnByKQorICAgIHZvaWQgZmlsbERvdWJsZShWYXJpYWJsZUV2ZW50
U3RyZWFtJiBzdHJlYW0sIEZQUlJlZyBmcHIpCiAgICAgewogICAgICAgICBBU1NFUlQoZnByICE9
IEludmFsaWRGUFJSZWcpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdERv
dWJsZTsKICAgICAgICAgdS5mcHIgPSBmcHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3Ju
Rm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KLSAg
ICB2b2lkIGZpbGxTdG9yYWdlKEdQUlJlZyBncHIpCisgICAgdm9pZCBmaWxsU3RvcmFnZShWYXJp
YWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3Jl
Z2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZp
bGwoRmlsbCwgc3RyZWFtKTsKICAgICB9CiAKICAgICBib29sIGFsaXZlKCkKQEAgLTMwOSw2ICsz
NjYsNyBAQCBwcml2YXRlOgogICAgIERhdGFGb3JtYXQgbV9yZWdpc3RlckZvcm1hdDsKICAgICBE
YXRhRm9ybWF0IG1fc3BpbGxGb3JtYXQ7CiAgICAgYm9vbCBtX2NhbkZpbGw7CisgICAgYm9vbCBt
X2Jvcm5Gb3JPU1I7CiAgICAgdW5pb24gewogICAgICAgICBHUFJSZWcgZ3ByOwogICAgICAgICBG
UFJSZWcgZnByOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZEdyYXBoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR01pbmlmaWVkR3Jh
cGhfaAorI2RlZmluZSBERkdNaW5pZmllZEdyYXBoX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdNaW5pZmllZE5vZGUu
aCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE1pbmlmaWVkR3Jh
cGggeworcHVibGljOgorICAgIE1pbmlmaWVkR3JhcGgoKSB7IH0KKworICAgIE1pbmlmaWVkTm9k
ZSogYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9saXN0LnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBNaW5pZmllZE5vZGUqIGVudHJ5
ID0KKyAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxNaW5pZmllZE5vZGUsIE5vZGVJbmRleCwgTWlu
aWZpZWROb2RlOjpnZXRJbmRleD4oCisgICAgICAgICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1f
bGlzdC5zaXplKCksIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgICAgICBp
ZiAoZW50cnktPmluZGV4KCkgIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
TWluaWZpZWROb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2xpc3Quc2l6ZSgp
IHx8IG5vZGUuaW5kZXgoKSA+IG1fbGlzdC5sYXN0KCkuaW5kZXgoKSk7CisgICAgICAgIG1fbGlz
dC5hcHBlbmQobm9kZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxNaW5pZmllZE5v
ZGU+IG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZpZWRHcmFwaF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWluaWZpZWROb2RlX2gKKyNkZWZpbmUgREZHTWlu
aWZpZWROb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsZHVlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVHlwZSB0
eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBj
YXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBVSW50
MzJUb051bWJlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworY2xhc3MgTWluaWZpZWROb2RlIHsKK3B1YmxpYzoK
KyAgICBNaW5pZmllZE5vZGUoKSB7IH0KKyAgICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIG5v
ZGVXaXRoQ2hpbGQoTm9kZUluZGV4IGluZGV4LCBOb2RlVHlwZSBvcCwgTm9kZUluZGV4IGNoaWxk
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG9wKSk7CisgICAgICAgIE1pbmlmaWVk
Tm9kZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJl
c3VsdC5tX29wID0gb3A7CisgICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gY2hpbGQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBNaW5pZmllZE5v
ZGUgbm9kZVdpdGhDb25zdGFudE51bWJlcihOb2RlSW5kZXggaW5kZXgsIE5vZGVUeXBlIG9wLCB1
bnNpZ25lZCBjb25zdGFudG51bWJlcikKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDb25zdGFu
dE51bWJlcihvcCkpOworICAgICAgICBNaW5pZmllZE5vZGUgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9vcCA9IG9wOworICAgICAgICBy
ZXN1bHQubV9jaGlsZE9ySW5mbyA9IGNoaWxkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIGZyb21Ob2RlKE5vZGVJbmRleCBub2Rl
SW5kZXgsIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAoaGFzQ2hpbGQobm9kZS5vcCgp
KSkKKyAgICAgICAgICAgIHJldHVybiBub2RlV2l0aENoaWxkKG5vZGVJbmRleCwgbm9kZS5vcCgp
LCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVX
aXRoQ29uc3RhbnROdW1iZXIobm9kZUluZGV4LCBub2RlLm9wKCksIG5vZGUuY29uc3RhbnROdW1i
ZXIoKSk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAg
ICAKKyAgICBOb2RlSWRuZXggY2hpbGQxKCkgY29uc3QgeworICAgICAgICBBU1NFUlQoaGFzQ2hp
bGQobV9vcCkpOworICAgICAgICByZXR1cm4gbV9jaGlsZE9ySW5mbzsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgY29uc3RhbnRudW1iZXIoKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChoYXND
b25zdGFudE51bWJlcihtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSogbm9k
ZSkgeyByZXR1cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
Ym9vbCBoYXNDaGlsZChOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlwZSB0eXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsKKyAgICB9CisgICAg
CisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICB1bnNpZ25l
ZCBtX2NoaWxkT3JJbmZvOyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3JhcGggaGF2ZSBvbmx5
IG9uZSBjaGlsZCBlYWNoLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNaW5pZmllZE5vZGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDYsNyArMTg0Niw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAg
ICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0
aGUgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZy
b20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwKICAg
ICAgICAgICAgICAgICAvLyBidXQgdGhhdCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUuCi0gICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVj
b3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmls
ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAKQEAg
LTE4NTUsNyArMTg1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigp
LCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluUmVn
aXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCks
IFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewpAQCAtMTg2NSw3ICsxODY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhj
ZWxsR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAg
ICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAg
dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5v
ZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCeXRlQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xODc1LDE0ICsxODc1LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOwogICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAg
ICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3Rl
ckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAg
ICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VG
b3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZp
bGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVT
b3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJG
aWxlKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShW
YWx1ZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDExMjA0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODMsMTIgKzg4MywzMSBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXggbm9kZUluZGV4LCBOb2Rl
JiBub2RlKQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZp
cnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgIAorICAgIGlmICghaW5mby5ub3RpY2VPU1JCaXJ0
aCgqbV9zdHJlYW0sIHZpcnR1YWxSZWdpc3RlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChub2RlLm9wKCkpKQorICAgICAgICBtX21pbmlm
aWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG5vZGVJbmRleCwgbm9kZSkp
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQog
ewogICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJ
bmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAg
IG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYgY2hpbGQg
PSBhdChub2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmlu
ZGV4KCksIGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJl
cikKKyAgICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hp
bGQuY2hpbGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZlbnQ6
Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCAr
OTIxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBE
RkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50
KCk7CiAjZW5kaWYKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZlbnQ6OnJl
c2V0KCkpOwogCiAgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1ZVNvdXJj
ZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQu
Z3JhcGgoKS5hcmd1bWVudElzQ2FwdHVyZWQoaSkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFsdWVT
b3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihh
dChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5k
ZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxl
RXZlbnQ6OnNldExvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpLCB2YWx1ZVNvdXJjZS5kYXRhRm9y
bWF0KCkpKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwpAQCAtOTE4LDEyICs5
NDIsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIEFT
U0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0
SGVhZC5sb2NhbChpKTsKKyAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2U7CiAgICAgICAg
IGlmIChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IG1faml0LmdyYXBoKCkubG9jYWxJc0NhcHR1cmVk
KGkpKQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJ
blJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQotICAgICAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJl
ZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihh
dChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAg
ICBtX3ZhcmlhYmxlc1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5k
KFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwog
ICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKQEAgLTk4Niw2ICsxMDEzLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBwcm94eSBub2Rlcy4KKyAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6CisgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgICAgICBub3Rp
Y2VPU1JCaXJ0aChtX2NvbXBpbGVJbmRleCwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAg
ICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICBHZW5lcmF0aW9u
SW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHU3BlY3Vs
YXRpdmVKSVRfaAogI2RlZmluZSBERkdTcGVjdWxhdGl2ZUpJVF9oCiAKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RTdGF0ZS5oIgpAQCAtMzMsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgi
CiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNp
bmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIApAQCAtNDYsODUgKzQ5LDYgQEAgY2xhc3MgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwogY2xhc3Mg
U3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAKLQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAg
IFNvdXJjZU5vdFNldCwKLSAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAotICAgIEludDMySW5SZWdp
c3RlckZpbGUsCi0gICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAotICAgIEJvb2xlYW5JblJlZ2lzdGVy
RmlsZSwKLSAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xh
c3MgVmFsdWVTb3VyY2UgewotcHVibGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291
cmNlS2luZCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNv
dXJjZUtpbmQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQp
OwotICAgICAgICBBU1NFUlQoa2luZCgpICE9IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX25v
ZGVJbmRleChub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVO
b2RlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24o
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMy
SW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlv
bikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0
dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIGlmIChpc0Jvb2xl
YW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNl
KEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNv
dXJjZU5vdFNldDsKLSAgICB9Ci0gICAgCi0gICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsK
LSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICAgICAgcmV0dXJuIG1fbm9kZUlu
ZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAgICAK
LXByaXZhdGU6Ci0gICAgc3RhdGljIE5vZGVJbmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1ZVNv
dXJjZUtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5vdFNl
dCAmJiBraW5kIDwgSGF2ZU5vZGUpOwotICAgICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsKLSAg
ICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlU291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRleChO
b2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQga2luZCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5kZXgpOwotICAgICAgICBpZiAoa2luZCA+
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIEhh
dmVOb2RlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihraW5k
KTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwotfTsKLQotCiBlbnVt
IEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duLCBHZW5l
cmF0ZWRPcGVyYW5kSW50ZWdlciwgR2VuZXJhdGVkT3BlcmFuZERvdWJsZSwgR2VuZXJhdGVkT3Bl
cmFuZEpTVmFsdWV9OwogCiAvLyA9PT0gU3BlY3VsYXRpdmVKSVQgPT09CkBAIC0zNjgsNiArMjky
LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZShOb2RlJik7CisgICAg
dm9pZCBub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXgsIE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGVN
b3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwogCkBAIC0xOTIx
LDYgKzE4NDYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW29wZXJh
bmRdOwogICAgIH0KICAgICAKKyAgICB2b2lkIHJlY29yZFNldExvY2FsKGludCBvcGVyYW5kLCBW
YWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSkKKyAgICB7CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJl
bmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+
YXBwZW5kKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKG9wZXJhbmQsIHZhbHVlU291cmNlLmRhdGFG
b3JtYXQoKSkpOworICAgIH0KKyAgICAKICAgICAvLyBUaGUgSklULCB3aGlsZSBhbHNvIHByb3Zp
ZGVzIE1hY3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkuCiAgICAgSklUQ29tcGlsZXImIG1faml0
OwogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdWYWx1ZVNvdXJjZV9oCisjZGVmaW5lIERGR1ZhbHVlU291cmNlX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAi
UHJlZGljdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gVmFsdWVTb3VyY2VLaW5kIHsKKyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJblJlZ2lz
dGVyRmlsZSwKKyAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAorICAgIENlbGxJblJlZ2lzdGVyRmls
ZSwKKyAgICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCisgICAgRG91YmxlSW5SZWdpc3RlckZpbGUs
CisgICAgSGF2ZU5vZGUKK307CisKK3N0YXRpYyBpbmxpbmUgVmFsdWVTb3VyY2VLaW5kIGRhdGFG
b3JtYXRUb1ZhbHVlU291cmNlS2luZChEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCit7CisgICAgc3dp
dGNoIChkYXRhRm9ybWF0KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAg
cmV0dXJuIEludDMySW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgor
ICAgICAgICByZXR1cm4gRG91YmxlSW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0
Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5JblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgorICAgICAgICByZXR1cm4gQ2VsbEluUmVnaXN0ZXJGaWxlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlSW5SZWdpc3RlckZpbGU7CisgICAgfQorfQorCitzdGF0aWMgaW5s
aW5lIERhdGFGb3JtYXQgdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KFZhbHVlU291cmNlS2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIEludDMySW5SZWdp
c3RlckZpbGU6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SW50ZWdlcjsKKyAgICBjYXNlIENl
bGxJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNh
c2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xl
YW47CisgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXREb3VibGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXROb25l
OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzSW5SZWdpc3RlckZpbGUoVmFsdWVT
b3VyY2VLaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1h
dChraW5kKSAhPSBEYXRhRm9ybWF0Tm9uZTsKK30KKworY2xhc3MgVmFsdWVTb3VyY2UgeworcHVi
bGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhG
cm9tS2luZChTb3VyY2VOb3RTZXQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
VmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKKyAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOworICAgICAgICBBU1NFUlQoa2lu
ZCgpICE9IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2Uo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOworICAg
ICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlIGZvckRhdGFGb3JtYXQoRGF0YUZvcm1h
dCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKGRhdGFGb3Jt
YXRUb1ZhbHVlU291cmNlS2luZChkYXRhRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1f
bm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNl
S2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRl
eChtX25vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJblJlZ2lzdGVyRmlsZSgp
IGNvbnN0IHsgcmV0dXJuIEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxlKGtpbmQoKSk7IH0KKyAg
ICAKKyAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChraW5kKCkpOworICAgIH0KKyAgICAKKyAg
ICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBz
dGF0aWMgTm9kZUluZGV4IG5vZGVJbmRleEZyb21LaW5kKFZhbHVlU291cmNlS2luZCBraW5kKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPj0gU291cmNlTm90U2V0ICYmIGtpbmQgPCBIYXZl
Tm9kZSk7CisgICAgICAgIHJldHVybiBOb05vZGUgLSBraW5kOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVmFsdWVTb3VyY2VLaW5kIGtpbmRGcm9tTm9kZUluZGV4KE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBraW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KE5vTm9kZSAtIG5vZGVJbmRleCk7CisgICAgICAgIGlmIChraW5kID49IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+KGtpbmQpOworICAgIH0KKyAgICAK
KyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhbHVlU291
cmNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50
X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2VudW0gVmFyaWFibGVFdmVudEtpbmQgeworICAgIC8vIE1hcmtzIHRoZSBiZWdpbm5p
bmcgb2YgYSBjaGVja3BvaW50LiBJZiB5b3UgaW50ZXJwcmV0IHRoZSB2YXJpYWJsZQorICAgIC8v
IGV2ZW50cyBzdGFydGluZyBhdCBhIFJlc2V0IHBvaW50IHRoZW4geW91J2xsIGdldCBldmVyeXRo
aW5nIHlvdSBuZWVkLgorICAgIFJlc2V0LAorICAgIAorICAgIC8vIE5vZGUgYmlydGhzLiBQb2lu
dHMgaW4gdGhlIGNvZGUgd2hlcmUgYSBub2RlIGJlY29tZXMgcmVsZXZhbnQgZm9yIE9TUi4KKyAg
ICAvLyBJdCBtYXkgYmUgdGhlIHBvaW50IHdoZXJlIGl0IGlzIGFjdHVhbGx5IGJvcm4gKGkuZS4g
YXNzaWduZWQpIG9yIGl0IG1heQorICAgIC8vIGJlIGEgbGF0ZXIgcG9pbnQsIGlmIGl0J3Mgb25s
eSBsYXRlciBpbiB0aGUgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zCisgICAgLy8gdGhhdCB3ZSBz
dGFydCB0byBjYXJlIGFib3V0IHRoaXMgbm9kZS4KKyAgICBCaXJ0aFRvRmlsbCwKKyAgICBCaXJ0
aFRvU3BpbGwsCisgICAgCisgICAgLy8gRXZlbnRzIHJlbGF0ZWQgdG8gaG93IGEgbm9kZSBpcyBy
ZXByZXNlbnRlZC4KKyAgICBGaWxsLAorICAgIFNwaWxsLAorICAgIAorICAgIC8vIERlYXRoIG9m
IGEgbm9kZSAtIGFmdGVyIHRoaXMgd2Ugbm8gbG9uZ2VyIGNhcmUgYWJvdXQgdGhpcyBub2RlLgor
ICAgIERlYXRoLAorICAgIAorICAgIC8vIEEgTW92SGludCBtZWFucyB0aGF0IGEgbm9kZSBpcyBi
ZWluZyBhc3NvY2lhdGVkIHdpdGggYSBieXRlY29kZSBvcGVyYW5kLAorICAgIC8vIGJ1dCB0aGF0
IGl0IGhhcyBub3QgYmVlbiBzdG9yZWQgaW50byB0aGF0IG9wZXJhbmQuCisgICAgTW92SGludCwK
KyAgICAKKyAgICAvLyBBIFNldExvY2FsIG1lYW5zIHRoYXQgYSBub2RlJ3MgdmFsdWUgaGFzIGFj
dHVhbGx5IGJlZW4gc3RvcmVkIGludG8gdGhlCisgICAgLy8gYnl0ZWNvZGUgb3BlcmFuZCB0aGF0
IGl0J3MgYXNzb2NpYXRlZCB3aXRoLgorICAgIFNldExvY2FsLAorICAgIAorICAgIC8vIFVzZWQg
dG8gaW5kaWNhdGUgYW4gdW5pbml0aWFsaXplZCBWYXJpYWJsZUV2ZW50LiBEb24ndCB1c2UgZm9y
IG90aGVyCisgICAgLy8gcHVycG9zZXMuCisgICAgSW52YWxpZEV2ZW50S2luZAorfTsKKworY2xh
c3MgVmFyaWFibGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgpCisgICAgICAg
IDogbV9raW5kKEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgVmFyaWFibGVFdmVudCByZXNldCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2
ZW50OworICAgICAgICBldmVudC5tX2tpbmQgPSBSZXNldDsKKyAgICAgICAgcmV0dXJuIGV2ZW50
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BSKFZhcmlhYmxl
RXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVF
dmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAg
ZXZlbnQudS5ncHIgPSBncHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAg
IGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGRhdGFGb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsK
KyAgICB9CisgICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgVmFyaWFibGVF
dmVudCBmaWxsUGFpcihWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4
LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBheWxvYWRHUFIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRv
RmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAg
ICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LnBhaXIudGFn
R1BSID0gdGFnR1BSOworICAgICAgICBldmVudC51LnBhaXIucGF5bG9hZEdQUiA9IHBheWxvYWRH
UFI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZv
cm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZp
bGxGUFIoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9B
c3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9
PSBCaXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2
ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51
LmZwciA9IGZwcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQu
bV9kYXRhRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgcmV0dXJuIGV2ZW50Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzcGlsbChWYXJpYWJsZUV2ZW50
S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09
IEJpcnRoVG9TcGlsbCB8fCBraW5kID09IFNwaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBl
dmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQu
dS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyOworICAgICAgICBldmVudC5tX2tpbmQgPSBr
aW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIHJldHVy
biBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZGVhdGgoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7Cisg
ICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9
IERlYXRoOworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YXJpYWJsZUV2ZW50IHNldExvY2FsKGludCBvcGVyYW5kLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAg
ICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50LnUudmlydHVh
bFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsOworICAgICAg
ICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChOb2RlSW5kZXggbm9k
ZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7
CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmly
dHVhbFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnQ7CisgICAg
ICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVFdmVudEtpbmQga2lu
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKyAgICAKKyAg
ICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwKKyAgICAgICAgICAgICAgIHx8IG1f
a2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsCisgICAgICAgICAgICAgICB8
fCBtX2tpbmQgPT0gRGVhdGggfHwgbV9raW5kID09IE1vdkhpbnQpOworICAgICAgICByZXR1cm4g
bV9pbmRleDsKKyAgICB9CisgICAgCisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09
IEZpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5k
ID09IFNwaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gU2V0TG9jYWwpOworICAgICAg
ICByZXR1cm4gbV9kYXRhRm9ybWF0OworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBC
aXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3Jt
YXQpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICE9IERhdGFGb3JtYXREb3VibGUpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEFTU0VSVCghKG1fZGF0YUZvcm1hdCAmIERh
dGFGb3JtYXRKUykpOworI2VuZGlmCisgICAgICAgIHJldHVybiB1LmdwcjsKKyAgICB9CisgICAg
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0
YWdHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmls
bCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOworICAgICAgICByZXR1cm4gdS5wYWlyLnRhZ0dQUjsKKyAgICB9CisgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybiB1
LnBhaXIucGF5bG9hZEdQUjsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsK
KyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAg
ICAgcmV0dXJuIHUuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhU
b1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7CisgICAgICAgIHJldHVybiB1LnZpcnR1YWxSZWc7
CisgICAgfQorICAgIAorICAgIGludCBvcGVyYW5kKCkgY29uc3QgeworICAgICAgICBBU1NFUlQo
bV9raW5kID09IFNldExvY2FsIHx8IG1fa2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJu
IHUudmlydHVhbFJlZzsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIE5vZGVJbmRleCBtX2lu
ZGV4OworICAgIAorICAgIC8vIEZvciBCaXJ0aFRvRmlsbCwgRmlsbDoKKyAgICAvLyAgIC0gVGhl
IEdQUiBvciBGUFIsIG9yIGEgR1BSIHBhaXIuCisgICAgLy8gRm9yIEJpcnRoVG9TcGlsbCwgU3Bp
bGw6CisgICAgLy8gICAtIFRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgIC8vIEZvciBNb3ZIaW50
LCBTZXRMb2NhbDoKKyAgICAvLyAgIC0gVGhlIGJ5dGVjb2RlIG9wZXJhbmQuCisgICAgLy8gRm9y
IERlYXRoOgorICAgIC8vICAgLSBVbnVzZWQuCisgICAgdW5pb24geworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lz
dGVySUQgZnByOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIHN0cnVjdCB7CisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFI7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOworICAgICAgICB9IHBhaXI7Cisj
ZW5kaWYKKyAgICAgICAgaW50MzJfdCB2aXJ0dWFsUmVnOworICAgIH0gdTsKKyAgICAKKyAgICBp
bnQ4X3QgbV9raW5kOworICAgIGludDhfdCBtX2RhdGFGb3JtYXQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1ZhcmlhYmxlRXZlbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVFdmVudFN0cmVhbV9oCisjZGVmaW5lIERGR1Zhcmlh
YmxlRXZlbnRTdHJlYW1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdWYXJpYWJsZUV2ZW50LmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFy
aWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworcHVibGlj
OgorICAgIAorICAgIHZvaWQgcmVjb25zdHJ1Y3QoTWluaWZpZWRHcmFwaCYgZ3JhcGgsIHVuc2ln
bmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNl
bmRpZiAvLyBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134124</attachid>
            <date>2012-03-27 13:31:40 -0700</date>
            <delta_ts>2012-03-27 14:57:57 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_5.diff</filename>
            <type>text/plain</type>
            <size>79712</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzA3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNiBA
QAorMjAxMi0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXMhIQorCisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6OnNpemUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgor
ICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChPcGVyYW5kcyk6
CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3Bl
cmFuZHM6OmlzVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRGb3JJ
bmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp2YXJpYWJsZUZvckluZGV4KToKKyAgICAg
ICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRGb3JJbmRleCk6CisgICAgICAgICogZGZnL0RGR0dl
bmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OkdlbmVy
YXRpb25JbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEludGVnZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SlNWYWx1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRDZWxsKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6aW5pdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjppbml0RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5m
bzo6aW5pdFN0b3JhZ2UpOgorICAgICAgICAoR2VuZXJhdGlvbkluZm8pOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R2VuZXJhdGlvbkluZm86OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c2V0U3BpbGxl
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxKU1ZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbENlbGwpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJhdGlvbkluZm86OmZpbGxCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmZpbGxTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5k
RmlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmFwcGVuZFNwaWxsKToK
KyAgICAgICAgKiBkZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdy
YXBoOjpNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjph
dCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAg
KiBkZmcvREZHTWluaWZpZWROb2RlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAg
KEpTQzo6REZHOjpiZWxvbmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKE1pbmlmaWVkTm9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpNaW5pZmllZE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6bm9kZVdpdGhDaGlsZCk6CisgICAgICAgIChK
U0M6OkRGRzo6TWluaWZpZWROb2RlOjpub2RlV2l0aENvbnN0YW50TnVtYmVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmZyb21Ob2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZE5vZGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9w
KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAg
IChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1p
bmlmaWVkTm9kZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6Y29uc3RhbnRudW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Z2V0
SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnROdW1iZXIpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JF
eGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAoT1NSRXhpdCk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXRDb21waWxlci5oOgorICAgICAgICAoT1NSRXhpdENvbXBpbGVyKToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vdGljZU9TUkJpcnRoKToK
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAg
ICAgICAoU3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHVmFsdWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
SlNDOjpERkc6OmRhdGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6dmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjppc0lu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKFZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9y
RGF0YUZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVTb3VyY2U6OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
U291cmNlOjpkYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6dmFs
dWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAgICAg
ICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKFZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OlZh
cmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnJlc2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsR1BSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsUGFpcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVFdmVudDo6ZmlsbEZQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6
c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmRlYXRoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFyaWFibGVFdmVudDo6bW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6bm9kZUluZGV4
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkYXRhRm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
cmlhYmxlRXZlbnQ6OnRhZ0dQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6
cGF5bG9hZEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZnByKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnZhcmlhYmxlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAg
ICAoTWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRH
ZW5lcmF0aW9uSW5mbzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFi
bGVFdmVudFN0cmVhbSk6CisKIDIwMTItMDMtMjcgIFByYXRpayBTb2xhbmtpICA8cHNvbGFua2lA
YXBwbGUuY29tPgogCiAgICAgICAgIENvbXBpbGVyIHdhcm5pbmcgd2hlbiBKSVQgaXMgbm90IGVu
YWJsZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShy
ZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDYgKzEyNCwzOSBAQCBwdWJsaWM6CiAgICAgICAg
IHNldExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKICAgICB9CiAgICAgCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKTsg
fQorICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaW5kZXggLSBudW1iZXJPZkFy
Z3VtZW50cygpXTsKKyAgICB9CisgICAgVCYgYXQoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tpbmRleCAtIG51bWJl
ck9mQXJndW1lbnRzKCldOworICAgIH0KKyAgICBjb25zdCBUJiBvcGVyYXRvcltdKHNpemVfdCBp
bmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgVCYgb3BlcmF0b3JbXShzaXpl
X3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgYm9vbCBpc0FyZ3VtZW50KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpOyB9
CisgICAgYm9vbCBpc1ZhcmlhYmxlKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJn
dW1lbnQoaW5kZXgpOyB9CisgICAgaW50IGFyZ3VtZW50Rm9ySW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICBpbnQgdmFyaWFi
bGVGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5k
ZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIGludCBvcGVyYW5kRm9ySW5kZXgo
c2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudFRvT3BlcmFuZChpbmRleCk7
CisgICAgICAgIHJldHVybiBpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCk7CisgICAgfQorICAg
IAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1hdChEYXRhRm9y
bWF0Tm9uZSkKICAgICAgICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAg
ICAsIG1fY2FuRmlsbChmYWxzZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFsc2UpCiAgICAg
ewogICAgIH0KIApAQCAtNjAsNiArNjEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJG
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3Jt
YXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jvcm5Gb3JPU1Ig
PSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGlu
aXRJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcg
Z3ByKQpAQCAtNzAsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3By
ID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1f
dXNlQ291bnQpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODMsNiArODYsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAg
bV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5G
b3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCkBAIC05Nyw2ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Y2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwogICAgICAgICB1
LnYucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNl
OwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDgsNiAr
MTEzLDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7
CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAg
ICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAg
ICB9CiAgICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1
c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTExOCw2ICsxMjQsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFs
c2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsK
ICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXREb3VibGUo
Tm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCkBAIC0x
MjksNiArMTM2LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1h
dE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsK
KyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50
KTsKICAgICB9CiAgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50
MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTEzOSwxOSArMTQ3LDQ0IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZp
bGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9
IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAgICAgLy8gR2V0
IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAgCisgICAgYm9v
bCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ib3JuRm9yT1NS
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKSB7CisgICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9GaWxsLCBzdHJlYW0p
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgYXBwZW5k
U3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIAogICAgIC8vIE1hcmsgdGhlIHZhbHVlIGFzIGhhdmluZyBiZWVu
IHVzZWQgKGRlY3JlbWVudCB0aGUgdXNlQ291bnQpLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIHdhcyB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZhbHVlLCBhbmQgYW55CiAgICAgLy8gYXNzb2Np
YXRlZCBtYWNoaW5lIHJlZ2lzdGVycyBtYXkgYmUgZnJlZWQuCi0gICAgYm9vbCB1c2UoKQorICAg
IGJvb2wgdXNlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3VzZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICEtLW1fdXNlQ291bnQ7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gIS0tbV91c2VDb3VudDsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1
bHQgJiYgbV9ib3JuRm9yT1NSKSB7CisgICAgICAgICAgICBBU1NFUlQobV9ub2RlSW5kZXggIT0g
Tm9Ob2RlKTsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6ZGVhdGgo
bV9ub2RlSW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNoZWNrIHRoZSBvcGVyYW5kcyBvZiBvcGVyYXRp
b25zIHRvIHNlZSBpZiB0aGV5IGFyZSBvbgpAQCAtMjI0LDcgKzI1Nyw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhIFZpcnR1YWxSZWdpc3RlciBpcyBiZWluZyBzcGls
bGVkIHRvIHRoZSBSZWdpc3RlckZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIHZvaWQgc3Bp
bGwoRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCkKKyAgICB2b2lkIHNwaWxsKFZhcmlhYmxlRXZlbnRT
dHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1h
dCBzcGlsbEZvcm1hdCkKICAgICB7CiAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBiZSBzcGlsbCB2
YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLgogICAgICAgICBBU1NFUlQoIW1fY2FuRmls
bCk7CkBAIC0yMzUsMTUgKzI2OCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3Jt
YXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0
OwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9y
bkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZFNwaWxsKFNwaWxsLCBzdHJlYW0sIHZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIG9uIHZhbHVlcyB0aGF0IGRvbid0IG5l
ZWQgc3BpbGxpbmcgKGNvbnN0YW50cyBhbmQgdmFsdWVzIHRoYXQgaGF2ZQogICAgIC8vIGFscmVh
ZHkgYmVlbiBzcGlsbGVkKSwgdG8gbWFyayB0aGVtIGFzIG5vIGxvbmdlciBiZWluZyBpbiBtYWNo
aW5lIHJlZ2lzdGVycy4KLSAgICB2b2lkIHNldFNwaWxsZWQoKQorICAgIHZvaWQgc2V0U3BpbGxl
ZChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewogICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdmFsdWVz
IHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywgYW5kIGFyZSBjdXJyZW50bHkgaW4gcmVnaXN0ZXJz
LgogICAgICAgICBBU1NFUlQobV9jYW5GaWxsICYmIG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZv
cm1hdE5vbmUpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kU3Bp
bGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBraWxsU3BpbGxlZCgpCkBAIC0yNTUsNDYgKzI5NCw2NyBAQCBwdWJsaWM6CiAgICAgLy8gUmVj
b3JkIHRoYXQgdGhpcyB2YWx1ZSBpcyBmaWxsZWQgaW50byBtYWNoaW5lIHJlZ2lzdGVycywKICAg
ICAvLyB0cmFja2luZyB3aGljaCByZWdpc3RlcnMsIGFuZCB3aGF0IGZvcm1hdCB0aGUgdmFsdWUg
aGFzLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBmaWxsSlNWYWx1ZShHUFJSZWcgZ3By
LCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lkIGZpbGxKU1ZhbHVl
KFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3Jt
YXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgdS5n
cHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAg
ICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgdm9pZCBmaWxsSlNWYWx1ZShHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQ
UiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBmaWxsSlNWYWx1
ZShWYXJpYWJsRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxv
YWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBmb3JtYXQ7CiAgICAgICAgIHUudi50YWdHUFIgPSB0YWdHUFI7IC8vIEZJWE1FOiBmb3IgSlNW
YWx1ZXMgd2l0aCBrbm93biB0eXBlIChib29sZWFuLCBpbnRlZ2VyLCBjZWxsIGV0Yy4pIG5vIHRh
Z0dQUiBpcyBuZWVkZWQ/CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxs
KEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmlsbENlbGwoR1BSUmVnIGdwcikKKyAg
ICB2b2lkIGZpbGxDZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikK
ICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Q2VsbDsKICAgICAg
ICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAg
ICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNlbmRpZgotICAgIHZv
aWQgZmlsbEludGVnZXIoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxJbnRlZ2VyKFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChG
aWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxCb29sZWFuKEdQUlJlZyBncHIpCisg
ICAgdm9pZCBmaWxsQm9vbGVhbihWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBn
cHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEJvb2xlYW47
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9T
UikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9p
ZCBmaWxsRG91YmxlKEZQUlJlZyBmcHIpCisgICAgdm9pZCBmaWxsRG91YmxlKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIg
IT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0
RG91YmxlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jv
cm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQot
ICAgIHZvaWQgZmlsbFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxTdG9yYWdlKFZh
cmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1f
cmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAgdS5ncHIgPSBncHI7
CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5k
RmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUoKQpAQCAtMzAzLDEy
ICszNjMsMzMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVuZEZp
bGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkg
eworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZChWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKGtpbmQs
IG1fbm9kZUluZGV4LCB1LmZwcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpIHsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6Zmls
bFBhaXIoa2luZCwgbV9ub2RlSW5kZXgsIHUucGFpci50YWdHUFIsIHUucGFpci5wYXlsb2FkR1BS
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzdHJl
YW0uYXBwZW5kKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIoa2luZCwgbV9ub2RlSW5kZXgsIHUuZ3By
LCBtX3JlZ2lzdGVyRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kU3BpbGwo
VmFyaWFibGVFdmVudCBraW5kLCBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBzdHJlYW0uYXBwZW5kKFZh
cmlhYmxlRXZlbnQ6OnNwaWxsKGtpbmQsIG1fbm9kZUluZGV4LCB2aXJ0dWFsUmVnaXN0ZXIsIG1f
c3BpbGxGb3JtYXQpKTsKKyAgICB9CisgICAgCiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2Rl
IHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgogICAgIE5v
ZGVJbmRleCBtX25vZGVJbmRleDsKICAgICB1aW50MzJfdCBtX3VzZUNvdW50OwogICAgIERhdGFG
b3JtYXQgbV9yZWdpc3RlckZvcm1hdDsKICAgICBEYXRhRm9ybWF0IG1fc3BpbGxGb3JtYXQ7CiAg
ICAgYm9vbCBtX2NhbkZpbGw7CisgICAgYm9vbCBtX2Jvcm5Gb3JPU1I7CiAgICAgdW5pb24gewog
ICAgICAgICBHUFJSZWcgZ3ByOwogICAgICAgICBGUFJSZWcgZnByOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR01pbmlmaWVkR3JhcGhfaAorI2RlZmluZSBERkdNaW5pZmllZEdy
YXBoX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdNaW5pZmllZE5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIE1pbmlmaWVkR3JhcGggeworcHVibGljOgorICAgIE1pbmlmaWVk
R3JhcGgoKSB7IH0KKworICAgIE1pbmlmaWVkTm9kZSogYXQoTm9kZUluZGV4IG5vZGVJbmRleCkK
KyAgICB7CisgICAgICAgIGlmICghbV9saXN0LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBNaW5pZmllZE5vZGUqIGVudHJ5ID0KKyAgICAgICAgICAgIGJpbmFyeVNlYXJj
aDxNaW5pZmllZE5vZGUsIE5vZGVJbmRleCwgTWluaWZpZWROb2RlOjpnZXRJbmRleD4oCisgICAg
ICAgICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1fbGlzdC5zaXplKCksIFdURjo6S2V5TXVzdE5v
dEJlUHJlc2VudEluQXJyYXkpOworICAgICAgICBpZiAoZW50cnktPmluZGV4KCkgIT0gbm9kZUlu
ZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3QgTWluaWZpZWROb2RlJiBub2RlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX2xpc3Quc2l6ZSgpIHx8IG5vZGUuaW5kZXgoKSA+IG1fbGlzdC5s
YXN0KCkuaW5kZXgoKSk7CisgICAgICAgIG1fbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxNaW5pZmllZE5vZGU+IG1fbGlzdDsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHTWluaWZpZWRHcmFwaF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
TWluaWZpZWROb2RlX2gKKyNkZWZpbmUgREZHTWluaWZpZWROb2RlX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsZHVlICJERkdOb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworaW5saW5lIGJvb2wgYmVs
b25nc0luTWluaWZpZWRHcmFwaChOb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNl
IEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Y2xhc3MgTWluaWZpZWROb2RlIHsKK3B1YmxpYzoKKyAgICBNaW5pZmllZE5vZGUoKSB7IH0KKyAg
ICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIG5vZGVXaXRoQ2hpbGQoTm9kZUluZGV4IGluZGV4
LCBOb2RlVHlwZSBvcCwgTm9kZUluZGV4IGNoaWxkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c0NoaWxkKG9wKSk7CisgICAgICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX29wID0gb3A7CisgICAgICAgIHJl
c3VsdC5tX2NoaWxkT3JJbmZvID0gY2hpbGQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBNaW5pZmllZE5vZGUgbm9kZVdpdGhDb25zdGFudE51bWJlcihO
b2RlSW5kZXggaW5kZXgsIE5vZGVUeXBlIG9wLCB1bnNpZ25lZCBjb25zdGFudG51bWJlcikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihvcCkpOworICAgICAgICBNaW5p
ZmllZE5vZGUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAg
ICByZXN1bHQubV9vcCA9IG9wOworICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGNoaWxk
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTWluaWZp
ZWROb2RlIGZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCisgICAgewor
ICAgICAgICBpZiAoaGFzQ2hpbGQobm9kZS5vcCgpKSkKKyAgICAgICAgICAgIHJldHVybiBub2Rl
V2l0aENoaWxkKG5vZGVJbmRleCwgbm9kZS5vcCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG5vZGVXaXRoQ29uc3RhbnROdW1iZXIobm9kZUluZGV4
LCBub2RlLm9wKCksIG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBOb2RlVHlwZSBv
cCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KKyAgICAKKyAgICBib29sIGhhc0NoaWxkMSgpIGNv
bnN0IHsgcmV0dXJuIGhhc0NoaWxkKG1fb3ApOyB9CisgICAgCisgICAgTm9kZUlkbmV4IGNoaWxk
MSgpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKKyAgICAgICAgcmV0
dXJuIG1fY2hpbGRPckluZm87CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBj
b25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQorICAgIAorICAgIHVuc2ln
bmVkIGNvbnN0YW50bnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDb25z
dGFudE51bWJlcihtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSogbm9kZSkg
eyByZXR1cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9v
bCBoYXNDaGlsZChOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6
CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsKKyAgICB9CisgICAgCisg
ICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICB1bnNpZ25lZCBt
X2NoaWxkT3JJbmZvOyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3JhcGggaGF2ZSBvbmx5IG9u
ZSBjaGlsZCBlYWNoLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNaW5pZmllZE5vZGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDExMjA0
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCi1PU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNv
dmVyeUluZGV4KQorT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVT
b3VyY2UoanNWYWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkK
ICAgICAsIG1fY2hlY2soY2hlY2spCkBAIC00MiwyNCArNDIsMTAgQEAgT1NSRXhpdDo6T1NSRXhp
dChFeGl0S2luZCBraW5kLCBKU1ZhbHVlUwogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5
SW5kZXgpCiAgICAgLCBtX2tpbmQoa2luZCkKICAgICAsIG1fY291bnQoMCkKLSAgICAsIG1fYXJn
dW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICwgbV92YXJpYWJsZXMoaml0LT5t
X3ZhcmlhYmxlcy5zaXplKCkpCisgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogICAg
ICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CiAgICAgQVNTRVJU
KG1fY29kZU9yaWdpbi5pc1NldCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1fYXJn
dW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2Fy
Z3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJp
YWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJs
ZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFi
bGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0
Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0uZHVt
cChvdXQpOwotICAgIGZwcmludGYob3V0LCAiIDogIik7Ci0gICAgZm9yICh1bnNpZ25lZCB2YXJp
YWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAg
ICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOwogfQogCiBib29sIE9TUkV4aXQ6
OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBwcml2YXRlOgogLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBz
cGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBzdHJ1Y3Qg
T1NSRXhpdCB7Ci0gICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklU
KiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpT
VmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCBy
ZWNvdmVyeUluZGV4ID0gMCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29k
ZTsKICAgICAKQEAgLTk5LDM4ICs5OSw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBFeGl0S2lu
ZCBtX2tpbmQ7CiAgICAgdWludDMyX3QgbV9jb3VudDsKICAgICAKLSAgICAvLyBDb252ZW5pZW50
IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKLSAgICAv
LyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxlLgotICAgIGludCBudW1iZXJP
ZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3Zhcmlh
Ymxlcy5zaXplKCk7IH0KLSAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGlu
dCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVu
dHMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKLSAgICAg
ICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpXTsKLSAgICB9
Ci0gICAgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeUZvck9wZXJhbmQoaW50IG9wZXJhbmQp
Ci0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCldOwotICAg
ICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07Ci0gICAgfQotICAgIGJvb2wgaXNBcmd1
bWVudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5z
aXplKCk7IH0KLSAgICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAh
aXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIGludCB2YXJp
YWJsZUZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRl
eCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgaW50IG9wZXJhbmRGb3JJbmRleChp
bnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1l
bnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChpbmRleCk7
Ci0gICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAg
CiAgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRm
Z0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7CiAgICAgICAg
IGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQpAQCAtMTQwLDgg
KzEwOCw3IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAKICAgICB2b2lkIGR1bXAoRklMRSogb3V0
KSBjb25zdDsKICAgICAKLSAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7
Ci0gICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIHVuc2lnbmVk
IG1fc3RyZWFtSW5kZXg7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSog
cmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhp
dCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBTcGVjdWxh
dGlvblJlY292ZXJ5KiByZWNvdmVyeSkKIHsKICAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQpAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50
cywKICAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55
IHVuYm94ZWQgaW50cy4KICAgICAgICAgICAgIAotICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIFZlY3Rvcjxib29s
PiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMob3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXpl
KCk7ICsraSkKICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7CiAK
QEAgLTEyOCw4ICsxMjgsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QgCiAgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlVUludDMy
cyA9IGZhbHNlOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZToKQEAgLTE0NCw4ICsxNDQsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVu
dGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQogICAgICAgICAgICAgLy8gdG8gYmUg
cmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGlu
CiAgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICBp
ZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgaWYgKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClvcGVyYW5kcy5tbnVtYmVyT2ZMb2NhbHMoKSkg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmFuZHMubG9jYWwocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoK
ICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgICAg
IGNhc2UgVUludDMySW5HUFI6CkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9m
IGludGVnZXJzLgogICAgIAogICAgIGlmIChoYXZlVW5ib3hlZEludDMycyB8fCBoYXZlVUludDMy
cykgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJl
Y292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
VW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmdwcigpICE9
IGFscmVhZHlCb3hlZCkKQEAgLTIyNyw3ICsyMjcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMy
OgotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgQXNzZW1i
bHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oVGFnVHlwZU51
bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFVJbnQzMklu
R1BSOiB7CkBAIC0yNzgsMTkgKzI3OCwxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0
IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAogICAgIC8vICAg
IG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQg
bmVlZHMgdG8gYmUgZHVtcGVkLgogICAgIAotICAgIGluaXRpYWxpemVQb2lzb25lZChleGl0Lm1f
dmFyaWFibGVzLnNpemUoKSk7CisgICAgaW5pdGlhbGl6ZVBvaXNvbmVkKG9wZXJhbmRzLm51bWJl
ck9mTG9jYWxzKCkpOwogICAgIHVuc2lnbmVkIGN1cnJlbnRQb2lzb25JbmRleCA9IDA7CiAgICAg
Ci0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3Bl
cmFuZEZvckluZGV4KGluZGV4KTsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3Bl
cmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICBpbnQgb3BlcmFuZCA9IG9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNvdmVyeS5n
cHIoKSwgc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCk7Ci0gICAgICAgICAgICAg
ICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9
IGN1cnJlbnRQb2lzb25JbmRleDsKKyAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRp
Y2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRl
eDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CkBAIC0z
MDUsOCArMzA1LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgIGlmIChoYXZlRlBScykgewogICAgICAgICAvLyA3KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGll
cyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQogICAgICAgICAKLSAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVj
b3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CkBAIC0zMTcsMTcgKzMxNywx
NyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIC8v
IDgpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNj
cmF0Y2ggc3RvcmFnZSBpZgogICAgICAgICAvLyAgICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCBy
ZWdpc3RlciBpcyBwb2lzb25lZC4KICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShp
bmRleCk7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IEluRlBSKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgR1BSUmVn
IGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIo
KSkpOwotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAg
ICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKGdwciwgc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRl
eCk7Ci0gICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKKyAgICAgICAgICAgICAgICBt
X3BvaXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9
IGN1cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgr
KzsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdw
ciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3By
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0zMzUs
MTMgKzMzNSwxMyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgCiAgICAgLy8gOSkgQm94IGFsbCB1bmJveGVkIGRvdWJsZXMgaW4gdGhlIHJlZ2lzdGVyIGZp
bGUuCiAgICAgaWYgKGhhdmVVbmJveGVkRG91YmxlcykgewotICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMu
c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBBbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3VibGUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSksIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAgICBtX2pp
dC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTM1Nyw4ICszNTcsOCBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAvLyB0aGF0IGlz
IGZhciBmcm9tIGd1YXJhbnRlZWQuCiAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgZGlz
cGxhY2VtZW50SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6
ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVy
eS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3Rl
ckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdp
c3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7CkBAIC0zODQsMTMgKzM4NCwxMyBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMkRpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRp
c3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZh
dWx0OgpAQCAtNDE2LDggKzQxNiw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25z
LgogICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IG51bWJlck9m
UG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFu
ZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAg
IGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CkBAIC00NDUsMTQgKzQ0NSwxNCBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1
ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAg
ICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKQEAgLTQ2NywxMSArNDY3LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICAvLyAxMSkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdp
c3RlcnMuCiAgICAgCiAgICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7
Ci0gICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8
IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAg
ICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQp
b3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKICAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJd
OworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kcy5s
b2NhbCh2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSkgewogICAgICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6CkBAIC00OTQsMTQgKzQ5NCwxNCBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQogICAgICAg
ICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAKLSAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7
ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjpl
bmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTEyMDQwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw2ICs2MywxMCBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgICAgIC0+aml0Q29tcGlsZSgqZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIAor
ICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCisgICAgT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4gb3BlcmFuZHM7CisgICAgY29kZUJsb2NrLT52YXJpYWJsZUV2ZW50U3RyZWFtKCku
cmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiwgY29kZUJsb2NrLT5taW5p
ZmllZERGRygpLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzKTsKKyAgICAKICAgICBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUlu
ZGV4KQogICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3Zlcnko
ZXhpdC5tX3JlY292ZXJ5SW5kZXggLSAxKTsKQEAgLTc1LDcgKzc5LDcgQEAgdm9pZCBjb21waWxl
T1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIEFzc2VtYmx5SGVscGVycyBqaXQoZ2xv
YmFsRGF0YSwgY29kZUJsb2NrKTsKICAgICAgICAgT1NSRXhpdENvbXBpbGVyIGV4aXRDb21waWxl
cihqaXQpOwogICAgICAgICAKLSAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQs
IHJlY292ZXJ5KTsKKyAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIG9wZXJh
bmRzLCByZWNvdmVyeSk7CiAgICAgICAgIAogICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29t
cGlsZUV4aXQoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKyAgICB2b2lk
IGNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKIAogcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FC
TEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDYsNyArMTg0
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRy
aWV2ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlh
YmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmls
ZSwKICAgICAgICAgICAgICAgICAvLyBidXQgdGhhdCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUu
Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9j
YWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAg
ICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lz
dGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAKQEAgLTE4NTUsNyArMTg1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVl
LmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVT
b3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQz
MkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxv
Y2FsKCksIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg2NSw3ICsxODY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAg
ICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1
ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExv
Y2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCeXRl
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xODc1LDE0ICsxODc1LDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOwog
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQo
bm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7CisgICAgICAg
ICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5S
ZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdp
c3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwg
VmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwog
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKLSAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNv
dXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04ODMsMTIgKzg4MywzMSBAQCBib29sIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXggbm9kZUluZGV4
LCBOb2RlJiBub2RlKQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBu
b2RlLnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5l
cmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgIAorICAgIGlmICghaW5mby5ub3RpY2VP
U1JCaXJ0aCgqbV9zdHJlYW0sIHZpcnR1YWxSZWdpc3RlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAoYmVsb25nc0luTWluaWZpZWRHcmFwaChub2RlLm9wKCkpKQorICAgICAgICBt
X21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG5vZGVJbmRleCwg
bm9kZSkpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBu
b2RlKQogewogICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNl
dE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkp
OwogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYg
Y2hpbGQgPSBhdChub2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxk
MSgpLmluZGV4KCksIGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJU
b051bWJlcikKKyAgICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwg
YXQoY2hpbGQuY2hpbGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxl
RXZlbnQ6Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0K
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTkw
MiwxNCArOTIxLDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVh
a3BvaW50KCk7CiAjZW5kaWYKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZl
bnQ6OnJlc2V0KCkpOwogCiAgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1
ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwg
bV9qaXQuZ3JhcGgoKS5hcmd1bWVudElzQ2FwdHVyZWQoaSkpCi0gICAgICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAg
dmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGlj
dGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwor
ICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChu
b2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICBt
X2FyZ3VtZW50c1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kKFZh
cmlhYmxlRXZlbnQ6OnNldExvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpLCB2YWx1ZVNvdXJjZS5k
YXRhRm9ybWF0KCkpKTsKICAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwpAQCAtOTE4
LDEyICs5NDIsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgog
ICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlh
Ymxlc0F0SGVhZC5sb2NhbChpKTsKKyAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2U7CiAg
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlIHx8IG1faml0LmdyYXBoKCkubG9jYWxJc0Nh
cHR1cmVkKGkpKQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2Uo
VmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQotICAgICAgICAgICAg
bV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAg
ICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6
Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCkpOworICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGlj
dGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwor
ICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+
YXBwZW5kKFZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKGksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQo
KSkpOwogICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKQEAgLTk4Niw2ICsxMDEzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBwcm94eSBub2Rlcy4K
KyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMy
VG9Eb3VibGU6CisgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgbm90aWNlT1NSQmlydGgobV9jb21w
aWxlSW5kZXgsIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgIGlmIChub2RlLmhh
c1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTEyMDQwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR1NwZWN1bGF0aXZlSklUX2gKICNkZWZp
bmUgREZHU3BlY3VsYXRpdmVKSVRfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKQEAgLTMz
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHVmFsdWVT
b3VyY2UuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWYWx1ZVJl
Y292ZXJ5LmgiCiAKQEAgLTQ2LDg1ICs0OSw2IEBAIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQ7CiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kOwogCi0KLWVudW0gVmFsdWVTb3VyY2VLaW5kIHsKLSAgICBTb3VyY2VOb3RTZXQsCi0g
ICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwKLSAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAotICAgIENl
bGxJblJlZ2lzdGVyRmlsZSwKLSAgICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCi0gICAgRG91Ymxl
SW5SZWdpc3RlckZpbGUsCi0gICAgSGF2ZU5vZGUKLX07Ci0KLWNsYXNzIFZhbHVlU291cmNlIHsK
LXB1YmxpYzoKLSAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUlu
ZGV4RnJvbUtpbmQoU291cmNlTm90U2V0KSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxp
Y2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCi0gICAgICAg
IDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNlTm90U2V0KTsKLSAgICAgICAgQVNTRVJU
KGtpbmQoKSAhPSBIYXZlTm9kZSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFZhbHVlU291
cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7Ci0gICAgfQotICAg
IAotICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsK
LSAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8IGlzQnl0ZUFycmF5
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShD
ZWxsSW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3Rl
ckZpbGUpOwotICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7Ci0gICAg
fQotICAgIAotICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCk7Ci0gICAgfQotICAgIAotICAg
IE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBIYXZlTm9kZSk7Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIHN0
YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVO
b2RlKTsKLSAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7Ci0gICAgfQotICAgIAotICAgIHN0
YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Tm9Ob2RlIC0gbm9kZUluZGV4KTsKLSAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KEhhdmVOb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7Ci0gICAgfQotICAgIAot
ICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKLX07Ci0KLQogZW51bSBHZW5lcmF0ZWRPcGVyYW5k
VHlwZSB7IEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93biwgR2VuZXJhdGVkT3BlcmFuZEludGVn
ZXIsIEdlbmVyYXRlZE9wZXJhbmREb3VibGUsIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlfTsKIAog
Ly8gPT09IFNwZWN1bGF0aXZlSklUID09PQpAQCAtMzY4LDYgKzI5Miw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgbm90aWNlT1NSQmly
dGgoTm9kZUluZGV4LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAg
ICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIApAQCAtMTkyMSw2ICsxODQ2LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAgICB9CiAgICAg
CisgICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQgb3BlcmFuZCwgVmFsdWVTb3VyY2UgdmFsdWVT
b3VyY2UpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3Bl
cmFuZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZChWYXJpYWJsZUV2
ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAgICB9
CisgICAgCiAgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2VtYmxl
ciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKICAgICAvLyBUaGUgY3Vy
cmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
VmFsdWVTb3VyY2VfaAorI2RlZmluZSBERkdWYWx1ZVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIK
KyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJjZU5vdFNldCwKKyAgICBW
YWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZpbGUsCisgICAgQ2VsbElu
UmVnaXN0ZXJGaWxlLAorICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwKKyAgICBEb3VibGVJblJl
Z2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKworc3RhdGljIGlubGluZSBWYWx1ZVNvdXJj
ZUtpbmQgZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKERhdGFGb3JtYXQgZGF0YUZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2Vy
OgorICAgICAgICByZXR1cm4gSW50MzJJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNl
IERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gQm9vbGVhbkluUmVnaXN0ZXJGaWxl
OworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJldHVybiBDZWxsSW5SZWdpc3Rl
ckZpbGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpOworICAgICAgICByZXR1cm4gVmFsdWVJblJlZ2lzdGVyRmlsZTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgRGF0YUZvcm1hdCB2YWx1ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQoVmFs
dWVTb3VyY2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1
ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2Ug
SW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnRlZ2VyOwor
ICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENl
bGw7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJldHVybiBEYXRh
Rm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRGF0
YUZvcm1hdE5vbmU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJlZ2lzdGVy
RmlsZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKK3sKKyAgICByZXR1cm4gdmFsdWVTb3VyY2VLaW5k
VG9EYXRhRm9ybWF0KGtpbmQpICE9IERhdGFGb3JtYXROb25lOworfQorCitjbGFzcyBWYWx1ZVNv
dXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1fbm9kZUluZGV4
KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQor
ICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZhbHVlU291cmNlS2luZCkp
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5vdFNldCk7CisgICAgICAg
IEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBW
YWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6IG1fbm9kZUluZGV4KG5v
ZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2UgZm9yUHJlZGljdGlvbihQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJl
ZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVy
RmlsZSk7CisgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSB8fCBpc0J5
dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVT
b3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rp
b24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbklu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3Rl
ckZpbGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2UgZm9yRGF0YUZvcm1h
dChEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVTb3Vy
Y2UoZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21O
b2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKKyAgICB9CisgICAgCisgICAg
VmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRG
cm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0luUmVn
aXN0ZXJGaWxlKCkgY29uc3QgeyByZXR1cm4gSlNDOjpERkc6OmlzSW5SZWdpc3RlckZpbGUoa2lu
ZCgpKTsgfQorICAgIAorICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KGtpbmQoKSk7CisgICAg
fQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnkgdmFsdWVSZWNvdmVyeSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNJblJlZ2lzdGVyRmlsZSgpKTsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZSgpOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGwo
KTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1Vu
Ym94ZWRCb29sZWFuKCk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVJblJlZ2lz
dGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdp
c3RlckZpbGVBc1VuYm94ZWREb3VibGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeSgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBu
b2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9k
ZSk7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wKEZJTEUqIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBOb2RlSW5k
ZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKKyAgICAg
ICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNv
dXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9k
ZUluZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVO
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBtX25vZGVJbmRleDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFsdWVTb3VyY2VfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhcmlhYmxlRXZlbnRfaAorI2RlZmluZSBE
RkdWYXJpYWJsZUV2ZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBW
YXJpYWJsZUV2ZW50S2luZCB7CisgICAgLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIGNoZWNr
cG9pbnQuIElmIHlvdSBpbnRlcnByZXQgdGhlIHZhcmlhYmxlCisgICAgLy8gZXZlbnRzIHN0YXJ0
aW5nIGF0IGEgUmVzZXQgcG9pbnQgdGhlbiB5b3UnbGwgZ2V0IGV2ZXJ5dGhpbmcgeW91IG5lZWQu
CisgICAgUmVzZXQsCisgICAgCisgICAgLy8gTm9kZSBiaXJ0aHMuIFBvaW50cyBpbiB0aGUgY29k
ZSB3aGVyZSBhIG5vZGUgYmVjb21lcyByZWxldmFudCBmb3IgT1NSLgorICAgIC8vIEl0IG1heSBi
ZSB0aGUgcG9pbnQgd2hlcmUgaXQgaXMgYWN0dWFsbHkgYm9ybiAoaS5lLiBhc3NpZ25lZCkgb3Ig
aXQgbWF5CisgICAgLy8gYmUgYSBsYXRlciBwb2ludCwgaWYgaXQncyBvbmx5IGxhdGVyIGluIHRo
ZSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMKKyAgICAvLyB0aGF0IHdlIHN0YXJ0IHRvIGNhcmUg
YWJvdXQgdGhpcyBub2RlLgorICAgIEJpcnRoVG9GaWxsLAorICAgIEJpcnRoVG9TcGlsbCwKKyAg
ICAKKyAgICAvLyBFdmVudHMgcmVsYXRlZCB0byBob3cgYSBub2RlIGlzIHJlcHJlc2VudGVkLgor
ICAgIEZpbGwsCisgICAgU3BpbGwsCisgICAgCisgICAgLy8gRGVhdGggb2YgYSBub2RlIC0gYWZ0
ZXIgdGhpcyB3ZSBubyBsb25nZXIgY2FyZSBhYm91dCB0aGlzIG5vZGUuCisgICAgRGVhdGgsCisg
ICAgCisgICAgLy8gQSBNb3ZIaW50IG1lYW5zIHRoYXQgYSBub2RlIGlzIGJlaW5nIGFzc29jaWF0
ZWQgd2l0aCBhIGJ5dGVjb2RlIG9wZXJhbmQsCisgICAgLy8gYnV0IHRoYXQgaXQgaGFzIG5vdCBi
ZWVuIHN0b3JlZCBpbnRvIHRoYXQgb3BlcmFuZC4KKyAgICBNb3ZIaW50LAorICAgIAorICAgIC8v
IEEgU2V0TG9jYWwgbWVhbnMgdGhhdCBhIG5vZGUncyB2YWx1ZSBoYXMgYWN0dWFsbHkgYmVlbiBz
dG9yZWQgaW50byB0aGUKKyAgICAvLyBieXRlY29kZSBvcGVyYW5kIHRoYXQgaXQncyBhc3NvY2lh
dGVkIHdpdGguCisgICAgU2V0TG9jYWwsCisgICAgCisgICAgLy8gVXNlZCB0byBpbmRpY2F0ZSBh
biB1bmluaXRpYWxpemVkIFZhcmlhYmxlRXZlbnQuIERvbid0IHVzZSBmb3Igb3RoZXIKKyAgICAv
LyBwdXJwb3Nlcy4KKyAgICBJbnZhbGlkRXZlbnRLaW5kCit9OworCit1bmlvbiBWYXJpYWJsZVJl
cHJlc2VudGF0aW9uIHsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBzdHJ1Y3QgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFI7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CisgICAgfSBw
YWlyOworI2VuZGlmCisgICAgaW50MzJfdCB2aXJ0dWFsUmVnOworfTsKKworY2xhc3MgVmFyaWFi
bGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgpCisgICAgICAgIDogbV9raW5k
KEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFi
bGVFdmVudCByZXNldCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAg
ICAgICBldmVudC5tX2tpbmQgPSBSZXNldDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BSKFZhcmlhYmxlRXZlbnRLaW5k
IGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdw
ciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0g
QmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQg
IT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQVNT
RVJUKCEoZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUykpOworI2VuZGlmCisgICAgICAgIFZhcmlh
YmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAg
ICAgIGV2ZW50LnUuZ3ByID0gZ3ByOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAg
ICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBkYXRhRm9ybWF0OworICAgICAgICByZXR1cm4gZXZl
bnQ7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RhdGljIFZhcmlh
YmxlRXZlbnQgZmlsbFBhaXIoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJ
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmly
dGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsK
KyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS5wYWly
LnRhZ0dQUiA9IHRhZ0dQUjsKKyAgICAgICAgZXZlbnQudS5wYWlyLnBheWxvYWRHUFIgPSBwYXls
b2FkR1BSOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2Rh
dGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9Cisj
ZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVu
dCBmaWxsRlBSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVu
dCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZl
bnQudS5mcHIgPSBmcHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2
ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgIHJldHVybiBldmVu
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc3BpbGwoVmFyaWFibGVF
dmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCA9PSBCaXJ0aFRvU3BpbGwgfHwga2luZCA9PSBTcGlsbCk7CisgICAgICAgIFZhcmlhYmxlRXZl
bnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2
ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgZXZlbnQubV9raW5k
ID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBy
ZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGRlYXRo
KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC5tX2tp
bmQgPSBEZWF0aDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChpbnQgb3BlcmFuZCwgRGF0YUZvcm1hdCBmb3JtYXQp
CisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC51LnZp
cnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRMb2NhbDsKKyAg
ICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTm9kZUluZGV4
IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2
ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51
LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50Owor
ICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlRXZlbnRLaW5k
IGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisgICAg
CisgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8
fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbAorICAgICAgICAgICAg
ICAgfHwgbV9raW5kID09IERlYXRoIHx8IG1fa2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0
dXJuIG1faW5kZXg7CisgICAgfQorICAgIAorICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2lu
ZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1f
a2luZCA9PSBTcGlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IFNldExvY2FsKTsKKyAg
ICAgICAgcmV0dXJuIG1fZGF0YUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRh
Rm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0RG91Ymxl
KTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBBU1NFUlQoIShtX2RhdGFGb3JtYXQg
JiBEYXRhRm9ybWF0SlMpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdS5ncHI7CisgICAgfQor
ICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgdGFnR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhU
b0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuIHUucGFpci50YWdHUFI7CisgICAgfQorICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7Cisg
ICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1
cm4gdS5wYWlyLnBheWxvYWRHUFI7CisgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmls
bCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7Cisg
ICAgICAgIHJldHVybiB1LmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJp
cnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOworICAgICAgICByZXR1cm4gdS52aXJ0dWFs
UmVnOworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgpIGNvbnN0IHsKKyAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBTZXRMb2NhbCB8fCBtX2tpbmQgPT0gTW92SGludCk7CisgICAgICAgIHJl
dHVybiB1LnZpcnR1YWxSZWc7CisgICAgfQorICAgIAorICAgIGNvbnN0IFZhcmlhYmxlUmVwcmVz
ZW50YXRpb24mIHZhcmlhYmxlUmVwcmVzZW50YXRpb24oKSBjb25zdCB7IHJldHVybiB1OyB9Cisg
ICAgCitwcml2YXRlOgorICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIAorICAgIC8vIEZvciBC
aXJ0aFRvRmlsbCwgRmlsbDoKKyAgICAvLyAgIC0gVGhlIEdQUiBvciBGUFIsIG9yIGEgR1BSIHBh
aXIuCisgICAgLy8gRm9yIEJpcnRoVG9TcGlsbCwgU3BpbGw6CisgICAgLy8gICAtIFRoZSB2aXJ0
dWFsIHJlZ2lzdGVyLgorICAgIC8vIEZvciBNb3ZIaW50LCBTZXRMb2NhbDoKKyAgICAvLyAgIC0g
VGhlIGJ5dGVjb2RlIG9wZXJhbmQuCisgICAgLy8gRm9yIERlYXRoOgorICAgIC8vICAgLSBVbnVz
ZWQuCisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiB1OworICAgIAorICAgIGludDhfdCBtX2tp
bmQ7CisgICAgaW50OF90IG1fZGF0YUZvcm1hdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFi
bGVFdmVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyB7CisgICAgYm9vbCBmaWxsZWQ7
IC8vIHRydWUgLT4gaW4gZ3ByL2Zwci9wYWlyLCBmYWxzZSAtPiBzcGlsbGVkCisgICAgVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiB1OworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIAorICAgIE1p
bmlmaWVkR2VuZXJhdGlvbkluZm8oKQorICAgICAgICA6IGZvcm1hdChEYXRhRm9ybWF0Tm9uZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAgICAgICAgZmlsbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRoVG9TcGlsbDoK
KyAgICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgICAgIGZpbGxlZCA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVhdGg6CisgICAgICAgICAgICBmb3JtYXQgPSBE
YXRhRm9ybWF0Tm9uZToKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdSA9IGV2ZW50
LnZhcmlhYmxlUmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgZm9ybWF0ID0gZXZlbnQuZGF0YUZv
cm1hdCgpOworICAgIH0KK307CisKK3ZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1
Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRH
cmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgdmFs
dWVSZWNvdmVyaWVzKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBK
SVRDb2RlOjpERkdKSVQpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIAorICAgIC8vIFN0ZXAgMTogRmluZCB0aGUg
bGFzdCBjaGVja3BvaW50LCBhbmQgZmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgcmVn
aXN0ZXJzIGFzIHdlIGdvLgorICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBpbmRleCAtIDE7Cisg
ICAgd2hpbGUgKGF0KHN0YXJ0SW5kZXgpLmtpbmQoKSAhPSBSZXNldCkKKyAgICAgICAgc3RhcnRJ
bmRleC0tOworICAgIAorICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11cCBvZiB0aGUgREZH
J3Mgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KKyAgICB1bnNpZ25lZCBudW1WYXJpYWJs
ZXM7CisgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBudW1WYXJp
YWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgKyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7
CisgICAgZWxzZQorICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7CisgICAgCisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJh
bmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAg
IFZlY3RvcjxNaW5pZmllZEdlbmVyYXRpb25JbmZvLCAzMj4gZ2VuZXJhdGlvbkluZm9zKGluZGV4
IC0gc3RhcnRJbmRleCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGlu
ZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsK
KyAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZXNldDoKKyAg
ICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGNh
c2UgRmlsbDoKKyAgICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgY2FzZSBEZWF0aDoKKyAgICAg
ICAgICAgIGdlbmVyYXRpb25JbmZvc1tldmVudC5ub2RlSW5kZXgoKSAtIHN0YXJ0SW5kZXhdLnVw
ZGF0ZShldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNb3ZIaW50Ogor
ICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZh
bHVlU291cmNlKGV2ZW50Lm5vZGVJbmRleCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5kYXRhRm9y
bWF0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIFN0ZXAgMzogUmVjb3JkIHRoZSB0aGluZ3MgdGhhdCBhcmUgbGl2ZSwgc28gd2UgY2FuIGdl
dCB0byB0aGVtIG1vcmUgcXVpY2tseS4KKyAgICBWZWN0b3I8dW5zaWduZWQsIDE2PiBpbmRpY2Vz
T2ZMaXZlVGhpbmdzOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBpbmRl
eDsgKytpKSB7CisgICAgICAgIGlmIChnZW5lcmF0aW9uSW5mb3NbaSAtIHN0YXJ0SW5kZXhdLmZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIGluZGljZXNPZkxpdmVUaGluZ3Mu
YXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDQ6IENvbXB1dGUgdmFsdWUgcmVj
b3ZlcmllcyEKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFs
dWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOworICAgICAgICBpZiAoc291cmNl
LmlzSW5SZWdpc3RlckZpbGUoKSkgeworICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0g
c291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc291cmNlLmtpbmQoKSA9PSBIYXZlTm9kZSk7Cisg
ICAgICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5ub2RlSW5kZXgoKSk7
CisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAg
IHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcigKKyAgICAgICAgICAgICAgICAgICAg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBub2RlLT5jb25zdGFudE51bWJlcigpKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWluaWZp
ZWRHZW5lcmF0aW9uSW5mbyogaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nbc291cmNlLm5vZGVJbmRl
eCgpIC0gc3RhcnRJbmRleF07CisgICAgICAgIGlmIChpbmZvLT5mb3JtYXQgPT0gRGF0YUZvcm1h
dE5vbmUpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJu
YXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgorICAgICAgICAg
ICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBJbnQzMlRvRG91YmxlOiBXZSBjYW4gdXNlIHRoaXMgaW4gcGxhY2Ugb2YgdGhl
IG9yaWdpbmFsIG5vZGUsIGJ1dAorICAgICAgICAgICAgLy8gICAgd2UnZCByYXRoZXIgbm90OyBz
byB3ZSB1c2UgaXQgb25seSBpZiBpdCBpcyB0aGUgb25seSByZW1haW5pbmcKKyAgICAgICAgICAg
IC8vICAgIGxpdmUgdmVyc2lvbi4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBWYWx1
ZVRvSW50MzI6IElmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVl
IGlzCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9u
bHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCisgICAgICAg
ICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2Fu
dCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFu
IGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBU
aGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVt
YmVyLCBidXQgaXRzCisgICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2
ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgICAg
ICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlh
dGUuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsK
KyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZS0+Y2hpbGQxKCk7Cisg
ICAgICAgICAgICAgICAgbm9kZSA9IGdyYXBoLmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAg
ICAgaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nbbm9kZUluZGV4IC0gc3RhcnRJbmRleF07CisgICAg
ICAgICAgICAgICAgaWYgKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMy
VG9Eb3VibGVJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVU
b0ludDMySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRv
TnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGljZXNPZkxpdmVUaGluZ3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZGljZXNPZkxp
dmVUaGluZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNDaGlsZDEo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0
aW9uSW5mb3Nbbm9kZUluZGV4IC0gc3RhcnRJbmRleF0uZm9ybWF0ICE9IERhdGFGb3JtYXROb25l
KTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyVG9Eb3VibGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gbm9kZUluZGV4OworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0gbm9kZUlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4VG9Vc2U7CisgICAgICAgICAgICAgICAgaWYgKGludDMy
VG9Eb3VibGVJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRv
VXNlID0gaW50MzJUb0RvdWJsZUluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVl
VG9JbnQzMkluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9V
c2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJU
b051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9V
c2UgPSB1aW50MzJUb051bWJlckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICBpbmZvID0gJmdlbmVyYXRpb25JbmZvc1tub2RlSW5kZXhUb1VzZSAtIHN0YXJ0
SW5kZXhdOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby0+Zm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFm
b3VuZCkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoaW5mby0+
Zm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpbmZvLT5m
aWxsZWQpIHsKKyAgICAgICAgICAgIGlmIChpbmZvLT5mb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6
OmluRlBSKGluZm8tPnUuZnByKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgaWYgKGluZm8tPmZvcm1h
dCAmIERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihpbmZvLT51LnRhZ0dQUiwgaW5mby0+dS5wYXlsb2FkR1BS
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAg
ICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mby0+
dS5ncHIsIGluZm8tPmZvcm1hdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0KKyAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKGluZm8tPnUudmlydHVhbFJlZywgaW5m
by0+Zm9ybWF0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVFdmVudFN0cmVhbV9oCisjZGVmaW5lIERGR1Zh
cmlhYmxlRXZlbnRTdHJlYW1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdWYXJpYWJsZUV2ZW50LmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
VmFyaWFibGVFdmVudFN0cmVhbSA6IHB1YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworcHVi
bGljOgorICAgIAorICAgIHZvaWQgcmVjb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGluZGV4
LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134143</attachid>
            <date>2012-03-27 14:57:57 -0700</date>
            <delta_ts>2012-03-27 16:48:43 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_6.diff</filename>
            <type>text/plain</type>
            <size>125121</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxMi0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXMhIQorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1pbmlmaWVkREZHKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaHJpbmtERkdEYXRhVG9GaXQpOgorICAgICAgICAoREZHRGF0YSk6
CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OnNpemUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9w
ZXJhbmRzOjppc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzVmFyaWFibGUp
OgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXJndW1lbnRGb3JJbmRleCk6CisgICAgICAgIChK
U0M6Ok9wZXJhbmRzOjp2YXJpYWJsZUZvckluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
Om9wZXJhbmRGb3JJbmRleCk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OkdlbmVyYXRpb25JbmZvKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6
OkdlbmVyYXRpb25JbmZvOjppbml0SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJh
dGlvbkluZm86OmluaXRDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6
aW5pdEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0RG91
YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdFN0b3JhZ2UpOgor
ICAgICAgICAoR2VuZXJhdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OnVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnNwaWxsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c2V0U3BpbGxlZCk6CisgICAgICAgIChKU0M6
OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpH
ZW5lcmF0aW9uSW5mbzo6ZmlsbENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25J
bmZvOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZp
bGxCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbERvdWJs
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxTdG9yYWdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kRmlsbCk6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmFwcGVuZFNwaWxsKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToK
KyAgICAgICAgKiBkZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdy
YXBoOjpNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjph
dCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogZGZnL0RG
R01pbmlmaWVkTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6YmVsb25nc0luTWluaWZpZWRHcmFwaCk6CisgICAgICAgIChNaW5pZmllZE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6TWluaWZpZWROb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpNaW5pZmllZE5vZGU6Om5vZGVXaXRoQ2hpbGQpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6bm9kZVdpdGhDb25zdGFudE51bWJlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRO
b2RlOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpoYXNDaGlsZDEpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok1pbmlmaWVkTm9kZTo6Y2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5v
ZGU6Omhhc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmNvbnN0
YW50bnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OmdldEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NvbnN0YW50TnVtYmVyKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRDb21waWxlcik6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om5vdGljZU9TUkJpcnRoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6dXNlKToKKyAgICAgICAgKFNwZWN1bGF0aXZlSklUKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVE
b3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVC
b29sZWFuKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFsdWVSZWNvdmVyeU92
ZXJyaWRlLmg6IEFkZGVkLgorICAgICAgICAoVmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAg
ICAgKFZhbHVlUmVjb3ZlcnlPdmVycmlkZTo6VmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAg
ICAgKiBkZmcvREZHVmFsdWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAg
ICAoSlNDOjpERkc6OmRhdGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6CisgICAgICAgIChKU0M6
OkRGRzo6dmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpp
c0luUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKFZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
U291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
Zm9yRGF0YUZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFsdWVTb3VyY2U6OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlU291cmNlOjpkYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
dmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRl
eCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAg
ICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50Lmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKFZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OlZhcmlhYmxlRXZlbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnJlc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsR1BSKToKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsUGFpcik6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudDo6ZmlsbEZQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dDo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmRlYXRoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6bW92SGludCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6bm9kZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkYXRhRm9ybWF0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OnRhZ0dQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVu
dDo6cGF5bG9hZEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZnByKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnQ6OnZhcmlhYmxlUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoTWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZp
ZWRHZW5lcmF0aW9uSW5mbzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFy
aWFibGVFdmVudFN0cmVhbSk6CisKIDIwMTItMDMtMjcgIE1hdHQgTGlsZWsgIDxtcmxAYXBwbGUu
Y29tPgogCiAgICAgICAgIFN0b3AgY29tcGlsaW5nIEludGVycHJldGVyLmNwcCB3aXRoIC1mbm8t
dmFyLXRyYWNraW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDEwIEBACiAjaW5jbHVk
ZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJERkdDb2RlQmxvY2tzLmgiCiAjaW5j
bHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCiAj
aW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCisjaW5jbHVk
ZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIK
ICNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdl
SW5mby5oIgpAQCAtMzEwLDEzICszMTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KCpn
bG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgdm9pZCBzaHJpbmtXZWFrUmVmZXJlbmNlc1RvRml0KCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICB9Ci0gICAgICAgIAogICAgICAgICB2b2lkIGFwcGVuZFdlYWtSZWZlcmVuY2VUcmFuc2l0
aW9uKEpTQ2VsbCogY29kZU9yaWdpbiwgSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQogICAgICAg
ICB7CiAgICAgICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTMyNCwxMSAr
MzE5LDI2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIFdlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uKCpnbG9iYWxEYXRhKCksIG93bmVyRXhlY3V0YWJsZSgpLCBjb2RlT3JpZ2luLCBm
cm9tLCB0bykpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNocmlua1dlYWtS
ZWZlcmVuY2VUcmFuc2l0aW9uc1RvRml0KCkKKyAgICAgICAgREZHOjpNaW5pZmllZEdyYXBoJiBt
aW5pZmllZERGRygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vz
c2FyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fZGZnRGF0YS0+bWluaWZpZWRERkc7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSYgdmFyaWFi
bGVFdmVudFN0cmVhbSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5l
Y2Vzc2FyeSgpOworICAgICAgICAgICAgcmV0dXJuIG1fZGZnRGF0YS0+dmFyaWFibGVFdmVudFN0
cmVhbTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzaHJpbmtERkdEYXRhVG9G
aXQoKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNocmlu
a1RvRml0KCk7CiAgICAgICAgICAgICBtX2RmZ0RhdGEtPnRyYW5zaXRpb25zLnNocmlua1RvRml0
KCk7CisgICAgICAgICAgICBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHLnNocmlua1RvRml0KCk7Cisg
ICAgICAgICAgICBtX2RmZ0RhdGEtPnZhcmlhYmxlRXZlbnRTdHJlYW0uc2hyaW5rVG9GaXQoKTsK
ICAgICAgICAgfQogI2VuZGlmCiAKQEAgLTExODYsNiArMTE5Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gc3BlY3VsYXRp
b25SZWNvdmVyeTsKICAgICAgICAgICAgIFZlY3RvcjxXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbj4g
dHJhbnNpdGlvbnM7CiAgICAgICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3
ZWFrUmVmZXJlbmNlczsKKyAgICAgICAgICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJp
YWJsZUV2ZW50U3RyZWFtOworICAgICAgICAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVk
REZHOwogICAgICAgICAgICAgYm9vbCBtYXlCZUV4ZWN1dGluZzsKICAgICAgICAgICAgIGJvb2wg
aXNKZXR0aXNvbmVkOwogICAgICAgICAgICAgYm9vbCBsaXZlbmVzc0hhc0JlZW5Qcm92ZWQ7IC8v
IEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
NiArMTI0LDM5IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUpOwog
ICAgIH0KICAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bWJlck9mQXJn
dW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOyB9CisgICAgY29uc3QgVCYgYXQoc2l6ZV90IGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVy
biBtX2xvY2Fsc1tpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCldOworICAgIH0KKyAgICBUJiBh
dChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3Vt
ZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAg
cmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKV07CisgICAgfQorICAg
IGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisKKyAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBp
bmRleCA8IG51bWJlck9mQXJndW1lbnRzKCk7IH0KKyAgICBib29sIGlzVmFyaWFibGUoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KKyAgICBpbnQgYXJn
dW1lbnRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAg
ICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0
dXJuIGFyZ3VtZW50VG9PcGVyYW5kKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAko
cmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0
aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX3JlZ2lzdGVyRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAgICAsIG1fc3BpbGxG
b3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAgICAgICAgICwgbV9jYW5GaWxsKGZhbHNlKQorICAgICAg
ICAsIG1fYm9ybkZvck9TUihmYWxzZSkKICAgICB7CiAgICAgfQogCkBAIC02MCw2ICs2MSw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAg
ICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9
IHRydWU7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91
c2VDb3VudCk7CiAgICAgfQogICAgIHZvaWQgaW5pdEludGVnZXIoTm9kZUluZGV4IG5vZGVJbmRl
eCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCkBAIC03MCw2ICs3Miw3IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2Nh
bkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9T
UiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2lmIFVTRShK
U1ZBTFVFNjQpCkBAIC04Myw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1h
dCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAg
dS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NF
UlQobV91c2VDb3VudCk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKQEAgLTk3LDYg
KzEwMSw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUu
di50YWdHUFIgPSB0YWdHUFI7CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsK
KyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50
KTsKICAgICB9CiAjZW5kaWYKQEAgLTEwOCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
c3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAg
ICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRCb29sZWFuKE5v
ZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpAQCAtMTE4
LDYgKzEyNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXRO
b25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7Cisg
ICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7
CiAgICAgfQogICAgIHZvaWQgaW5pdERvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJf
dCB1c2VDb3VudCwgRlBSUmVnIGZwcikKQEAgLTEyOSw2ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0g
ZmFsc2U7CiAgICAgICAgIHUuZnByID0gZnByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxz
ZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRTdG9y
YWdlKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpA
QCAtMTM5LDE5ICsxNDcsNDQgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0
YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9
IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3Vz
ZUNvdW50KTsKICAgICB9CiAKICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHRoZSBub2RlIHRoYXQg
cHJvZHVjZWQgdGhpcyB2YWx1ZS4KICAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgeyByZXR1cm4g
bV9ub2RlSW5kZXg7IH0KKyAgICAKKyAgICBib29sIG5vdGljZU9TUkJpcnRoKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAgICB7
CisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGFw
cGVuZEZpbGwoQmlydGhUb0ZpbGwsIHN0cmVhbSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fc3BpbGxGb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpOworICAgICAgICBhcHBlbmRTcGlsbChCaXJ0aFRvU3BpbGwsIHN0cmVhbSwg
dmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgLy8g
TWFyayB0aGUgdmFsdWUgYXMgaGF2aW5nIGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1c2VDb3Vu
dCkuCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBvZiB0aGUg
dmFsdWUsIGFuZCBhbnkKICAgICAvLyBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBi
ZSBmcmVlZC4KLSAgICBib29sIHVzZSgpCisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAgICAgICBy
ZXR1cm4gIS0tbV91c2VDb3VudDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3VzZUNvdW50
OworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAgc3RyZWFt
LmFwcGVuZChWYXJpYWJsZUV2ZW50OjpkZWF0aChtX25vZGVJbmRleCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8g
Y2hlY2sgdGhlIG9wZXJhbmRzIG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRoZXkgYXJlIG9uCkBA
IC0yMjQsNyArMjU3LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIGEg
VmlydHVhbFJlZ2lzdGVyIGlzIGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJlZ2lzdGVyRmlsZSBmb3Ig
dGhlIGZpcnN0IHRpbWUuCi0gICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQor
ICAgIHZvaWQgc3BpbGwoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQogICAgIHsKICAgICAg
ICAgLy8gV2Ugc2hvdWxkbid0IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxp
bmcuCiAgICAgICAgIEFTU0VSVCghbV9jYW5GaWxsKTsKQEAgLTIzNSwxNSArMjY4LDIxIEBAIHB1
YmxpYzoKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAg
ICBtX3NwaWxsRm9ybWF0ID0gc3BpbGxGb3JtYXQ7CiAgICAgICAgIG1fY2FuRmlsbCA9IHRydWU7
CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5k
U3BpbGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKICAgICAvLyBD
YWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAoY29uc3RhbnRzIGFuZCB2
YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxsZWQpLCB0byBtYXJrIHRo
ZW0gYXMgbm8gbG9uZ2VyIGJlaW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJzLgotICAgIHZvaWQgc2V0
U3BpbGxlZCgpCisgICAgdm9pZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVh
bSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIC8vIFNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB2YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLCBh
bmQgYXJlIGN1cnJlbnRseSBpbiByZWdpc3RlcnMuCiAgICAgICAgIEFTU0VSVChtX2NhbkZpbGwg
JiYgbV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5G
b3JPU1IpCisgICAgICAgICAgICBhcHBlbmRTcGlsbChTcGlsbCwgc3RyZWFtLCB2aXJ0dWFsUmVn
aXN0ZXIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGtpbGxTcGlsbGVkKCkKQEAgLTI1NSw0NiAr
Mjk0LDY3IEBAIHB1YmxpYzoKICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHZhbHVlIGlzIGZpbGxl
ZCBpbnRvIG1hY2hpbmUgcmVnaXN0ZXJzLAogICAgIC8vIHRyYWNraW5nIHdoaWNoIHJlZ2lzdGVy
cywgYW5kIHdoYXQgZm9ybWF0IHRoZSB2YWx1ZSBoYXMuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICB2b2lkIGZpbGxKU1ZhbHVlKEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZv
cm1hdEpTKQorICAgIHZvaWQgZmlsbEpTVmFsdWUoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFt
LCBHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7CiAg
ICAgICAgIEFTU0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX3JlZ2lzdGVy
Rm9ybWF0ID0gZm9ybWF0OwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7
CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVlKEdQ
UlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFG
b3JtYXRKUykKKyAgICB2b2lkIGZpbGxKU1ZhbHVlKFZhcmlhYmxFdmVudFN0cmVhbSYgc3RyZWFt
LCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBE
YXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgdS52LnRhZ0dQ
UiA9IHRhZ0dQUjsgLy8gRklYTUU6IGZvciBKU1ZhbHVlcyB3aXRoIGtub3duIHR5cGUgKGJvb2xl
YW4sIGludGVnZXIsIGNlbGwgZXRjLikgbm8gdGFnR1BSIGlzIG5lZWRlZD8KICAgICAgICAgdS52
LnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZv
ck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAg
dm9pZCBmaWxsQ2VsbChHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmlsbENlbGwoVmFyaWFibGVFdmVu
dFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZv
cm1hdCA9IERhdGFGb3JtYXRDZWxsOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisg
ICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0
cmVhbSk7CiAgICAgfQogI2VuZGlmCi0gICAgdm9pZCBmaWxsSW50ZWdlcihHUFJSZWcgZ3ByKQor
ICAgIHZvaWQgZmlsbEludGVnZXIoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcg
Z3ByKQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2Vy
OwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JP
U1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZv
aWQgZmlsbEJvb2xlYW4oR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxCb29sZWFuKFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Qm9vbGVhbjsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChG
aWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxEb3VibGUoRlBSUmVnIGZwcikKKyAg
ICB2b2lkIGZpbGxEb3VibGUoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBGUFJSZWcgZnBy
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVnKTsKICAgICAgICAg
bV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CiAgICAgICAgIHUuZnByID0gZnBy
OworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVu
ZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsU3RvcmFnZShHUFJSZWcg
Z3ByKQorICAgIHZvaWQgZmlsbFN0b3JhZ2UoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBH
UFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRT
dG9yYWdlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jv
cm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQog
CiAgICAgYm9vbCBhbGl2ZSgpCkBAIC0zMDMsMTIgKzM2MywzMyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kRmlsbChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBW
YXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0pCisgICAgeworICAgICAgICBpZiAobV9yZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICBzdHJlYW0uYXBwZW5k
KFZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIoa2luZCwgbV9ub2RlSW5kZXgsIHUuZnByKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBpZiAobV9yZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgc3Ry
ZWFtLmFwcGVuZChWYXJpYWJsZUV2ZW50OjpmaWxsUGFpcihraW5kLCBtX25vZGVJbmRleCwgdS5w
YWlyLnRhZ0dQUiwgdS5wYWlyLnBheWxvYWRHUFIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6Zmls
bEdQUihraW5kLCBtX25vZGVJbmRleCwgdS5ncHIsIG1fcmVnaXN0ZXJGb3JtYXQpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhcHBlbmRTcGlsbChWYXJpYWJsZUV2ZW50IGtpbmQsIFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKKyAg
ICB7CisgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6c3BpbGwoa2luZCwgbV9u
b2RlSW5kZXgsIHZpcnR1YWxSZWdpc3RlciwgbV9zcGlsbEZvcm1hdCkpOworICAgIH0KKyAgICAK
ICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0
aGlzIHZpcnR1YWwgcmVnaXN0ZXIuCiAgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwogICAgIHVp
bnQzMl90IG1fdXNlQ291bnQ7CiAgICAgRGF0YUZvcm1hdCBtX3JlZ2lzdGVyRm9ybWF0OwogICAg
IERhdGFGb3JtYXQgbV9zcGlsbEZvcm1hdDsKICAgICBib29sIG1fY2FuRmlsbDsKKyAgICBib29s
IG1fYm9ybkZvck9TUjsKICAgICB1bmlvbiB7CiAgICAgICAgIEdQUlJlZyBncHI7CiAgICAgICAg
IEZQUlJlZyBmcHI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw4ICsxOTEsNyBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGV4aXQubV9j
aGVjay5jb3JyZWN0TGF0ZUp1bXAobGlua0J1ZmZlcik7CiAgICAgfQogICAgIAotICAgIGNvZGVC
bG9jaygpLT5zaHJpbmtXZWFrUmVmZXJlbmNlc1RvRml0KCk7Ci0gICAgY29kZUJsb2NrKCktPnNo
cmlua1dlYWtSZWZlcmVuY2VUcmFuc2l0aW9uc1RvRml0KCk7CisgICAgY29kZUJsb2NrKCktPnNo
cmlua0RGR0RhdGFUb0ZpdCgpOwogfQogCiBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENv
ZGUmIGVudHJ5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZEdyYXBoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR01pbmlmaWVkR3Jh
cGhfaAorI2RlZmluZSBERkdNaW5pZmllZEdyYXBoX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdNaW5pZmllZE5vZGUu
aCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE1pbmlmaWVkR3Jh
cGggeworcHVibGljOgorICAgIE1pbmlmaWVkR3JhcGgoKSB7IH0KKworICAgIE1pbmlmaWVkTm9k
ZSogYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlmICghbV9saXN0LnNp
emUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBNaW5pZmllZE5vZGUqIGVudHJ5
ID0KKyAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxNaW5pZmllZE5vZGUsIE5vZGVJbmRleCwgTWlu
aWZpZWROb2RlOjpnZXRJbmRleD4oCisgICAgICAgICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1f
bGlzdC5zaXplKCksIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkpOworICAgICAgICBp
ZiAoZW50cnktPmluZGV4KCkgIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmQoY29uc3Qg
TWluaWZpZWROb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2xpc3Quc2l6ZSgp
IHx8IG5vZGUuaW5kZXgoKSA+IG1fbGlzdC5sYXN0KCkuaW5kZXgoKSk7CisgICAgICAgIG1fbGlz
dC5hcHBlbmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2hyaW5rVG9GaXQoKQorICAg
IHsKKyAgICAgICAgbV9saXN0LnNocmlua1RvRml0KCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IFZlY3RvcjxNaW5pZmllZE5vZGU+IG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZp
ZWRHcmFwaF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZE5vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWlu
aWZpZWROb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWluaWZpZWROb2Rl
X2gKKyNkZWZpbmUgREZHTWluaWZpZWROb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsZHVlICJERkdOb2RlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZp
ZWRHcmFwaChOb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
SlNDb25zdGFudDoKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6CisgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworY2xhc3MgTWluaWZp
ZWROb2RlIHsKK3B1YmxpYzoKKyAgICBNaW5pZmllZE5vZGUoKSB7IH0KKyAgICAKKyAgICBzdGF0
aWMgTWluaWZpZWROb2RlIG5vZGVXaXRoQ2hpbGQoTm9kZUluZGV4IGluZGV4LCBOb2RlVHlwZSBv
cCwgTm9kZUluZGV4IGNoaWxkKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG9wKSk7
CisgICAgICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0g
aW5kZXg7CisgICAgICAgIHJlc3VsdC5tX29wID0gb3A7CisgICAgICAgIHJlc3VsdC5tX2NoaWxk
T3JJbmZvID0gY2hpbGQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBNaW5pZmllZE5vZGUgbm9kZVdpdGhDb25zdGFudE51bWJlcihOb2RlSW5kZXggaW5k
ZXgsIE5vZGVUeXBlIG9wLCB1bnNpZ25lZCBjb25zdGFudG51bWJlcikKKyAgICB7CisgICAgICAg
IEFTU0VSVChoYXNDb25zdGFudE51bWJlcihvcCkpOworICAgICAgICBNaW5pZmllZE5vZGUgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9v
cCA9IG9wOworICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IGNoaWxkOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIGZyb21O
b2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
aGFzQ2hpbGQobm9kZS5vcCgpKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlV2l0aENoaWxkKG5v
ZGVJbmRleCwgbm9kZS5vcCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIG5vZGVXaXRoQ29uc3RhbnROdW1iZXIobm9kZUluZGV4LCBub2RlLm9wKCks
IG5vZGUuY29uc3RhbnROdW1iZXIoKSk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fb3A7IH0KKyAgICAKKyAgICBib29sIGhhc0NoaWxkMSgpIGNvbnN0IHsgcmV0dXJu
IGhhc0NoaWxkKG1fb3ApOyB9CisgICAgCisgICAgTm9kZUlkbmV4IGNoaWxkMSgpIGNvbnN0IHsK
KyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKKyAgICAgICAgcmV0dXJuIG1fY2hpbGRP
ckluZm87CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGNvbnN0YW50
bnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlciht
X29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSogbm9kZSkgeyByZXR1cm4gbm9k
ZS0+aW5kZXgoKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChO
b2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgIGNh
c2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBz
dGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4
IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICB1bnNpZ25lZCBtX2NoaWxkT3JJbmZv
OyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3JhcGggaGF2ZSBvbmx5IG9uZSBjaGlsZCBlYWNo
LgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdNaW5pZmllZE5vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1PU1JFeGl0
OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0
aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQor
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5k
ZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1
ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fY2hl
Y2soY2hlY2spCkBAIC00MiwyNCArNDIsMTAgQEAgT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlUwogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAg
LCBtX2tpbmQoa2luZCkKICAgICAsIG1fY291bnQoMCkKLSAgICAsIG1fYXJndW1lbnRzKGppdC0+
bV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5z
aXplKCkpCisgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CiAgICAgQVNTRVJUKG1fY29kZU9yaWdp
bi5pc1NldCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3Vt
ZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1
bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFy
aWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVd
ID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxl
XSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyAr
K2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0uZHVtcChvdXQpOwotICAg
IGZwcmludGYob3V0LCAiIDogIik7Ci0gICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZh
cmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQotICAgICAgICBtX3Zhcmlh
Ymxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOwogfQogCiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5oCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBwcml2YXRlOgog
Ly8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBw
YXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBzdHJ1Y3QgT1NSRXhpdCB7Ci0g
ICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCA9IDApOworICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2Us
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVj
dWxhdGl2ZUpJVCosIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
ID0gMCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICAKQEAg
LTk5LDM4ICs5OSw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBFeGl0S2luZCBtX2tpbmQ7CiAg
ICAgdWludDMyX3QgbV9jb3VudDsKICAgICAKLSAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVy
YXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKLSAgICAvLyBnZW5lcmljIG92
ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxlLgotICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMo
KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7
IH0KLSAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKLSAgICAgICAgcmV0dXJuIG1f
dmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpXTsKLSAgICB9Ci0gICAgVmFsdWVS
ZWNvdmVyeSYgdmFsdWVSZWNvdmVyeUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCi0gICAgewotICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHNbb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCldOwotICAgICAgICByZXR1cm4g
bV92YXJpYWJsZXNbb3BlcmFuZF07Ci0gICAgfQotICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KLSAg
ICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChp
bmRleCk7IH0KLSAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIGludCB2YXJpYWJsZUZvckluZGV4
KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1l
bnRzLnNpemUoKTsKLSAgICB9Ci0gICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChpbmRleCk7Ci0gICAgICAgIHJl
dHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7CiAgICAgICAgIGlmICghbV9jb3Vu
dCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQpAQCAtMTQwLDkgKzEwOCwxMCBAQCBz
dHJ1Y3QgT1NSRXhpdCB7CiAgICAgCiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CiAg
ICAgCi0gICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwotICAgIFZlY3Rv
cjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKKyAgICB1bnNpZ25lZCBtX3N0cmVhbUlu
ZGV4OwogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIAorICAgIE93blB0cjxWYWx1ZVJl
Y292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZn
Q29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZp
c2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3Zv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiBleGl0LCBjb25z
dCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3Zlcnkq
IHJlY292ZXJ5KQogewogICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
IG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkgY29uc3RhbnRzLAogICAgIC8vICAg
IGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRz
LgogICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
cyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQogICAg
ICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBmYWxzZTsKIApAQCAtMTI4LDggKzEy
OCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBib29s
IGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKICAgICBib29sIGhhdmVVSW50MzJzID0gZmFsc2U7CiAg
ICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ0
LDggKzE0NCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhh
dCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUg
aGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAg
IC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm1udW1iZXJPZkxvY2FscygpKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChvcGVyYW5kcy5sb2NhbChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgogICAgICAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJJ
bkdQUjoKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgLy8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCiAg
ICAgCiAgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzIHx8IGhhdmVVSW50MzJzKSB7Ci0gICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNo
IChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJ
bkdQUjoKICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVk
KQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6Ci0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4oVGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVtYmVyID4+IDMyKSks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3Bl
cmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6IHsKQEAgLTI3
OCwxOSArMjc4LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAK
ICAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hhbmdlIChsaWtl
IGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CiAgICAgLy8gICAgbW9zdCBPU1IgZmFp
bHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVkcyB0byBiZSBk
dW1wZWQuCiAgICAgCi0gICAgaW5pdGlhbGl6ZVBvaXNvbmVkKGV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICBpbml0aWFsaXplUG9pc29uZWQob3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSk7
CiAgICAgdW5zaWduZWQgY3VycmVudFBvaXNvbkluZGV4ID0gMDsKICAgICAKLSAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
ewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7Ci0gICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CisgICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAg
ICAgICBjYXNlIEluR1BSOgogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAg
ICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRl
eCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRl
eCldKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkg
ewogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBzY3JhdGNo
QnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBtX3BvaXNvblNj
cmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNv
bkluZGV4OworICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMu
dmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAg
ICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKQEAgLTMwNSw4ICszMDUsOCBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgaWYgKGhhdmVG
UFJzKSB7CiAgICAgICAgIC8vIDcpIEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJl
aW5nIG1vcmUgR1BScyB0aGFuIEZQUnMpCiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMu
c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlx
dWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKQEAgLTMxNywxNyArMzE3LDE3IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgLy8gOCkgRHVtcCBhbGwg
ZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdl
IGlmCiAgICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBv
aXNvbmVkLgogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAg
ICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5m
bzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZwcigpKSk7Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgIGlmIChvcGVy
YW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFu
ZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKLSAgICAgICAg
ICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRl
eCldID0gY3VycmVudFBvaXNvbkluZGV4OworICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRj
aEluZGljZXNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNv
bkluZGV4OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTMzNSwxMyArMzM1LDEzIEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAKICAgICAvLyA5
KSBCb3ggYWxsIHVuYm94ZWQgZG91YmxlcyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICBpZiAo
aGF2ZVVuYm94ZWREb3VibGVzKSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFu
ZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZERvdWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChp
bmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmJveERvdWJsZShG
UFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtMzU3LDggKzM1Nyw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3Vh
cmFudGVlZC4KICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRl
eCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspKTsKQEAgLTM4NCwxMyArMzg0LDEzIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAg
ICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5k
cy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3Rl
ckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5k
ZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MTYs
OCArNDE2LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
ICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCiAgICAgICAgIAog
ICAgICAgICAgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKQEAgLTQ0NSwxNCArNDQ1LDE0IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
ICAgICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKLSAg
ICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAg
IGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNl
IERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUklu
Zm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAt
NDY3LDExICs0NjcsMTEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgIC8vIDExKSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAK
ICAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9y
IChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1f
dmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgZm9yIChpbnQg
dmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClvcGVyYW5kcy5udW1i
ZXJPZkxvY2FscygpOyArK3ZpcnR1YWxSZWdpc3RlcikgewogICAgICAgICAgICAgaWYgKCFwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzLmxvY2FsKHZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEluR1BSOgogICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKQEAgLTQ5NCwxNCArNDk0LDE0IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgaWYgKGhhdmVVbmRlZmluZWQpCiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewot
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVj
b3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFu
ZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNo
bmlxdWUoKSAhPSBDb25zdGFudCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVy
eS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
cmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDE2IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAg
ICAgLT5qaXRDb21waWxlKCpnbG9iYWxEYXRhKTsKICAgICB9CiAgICAgCisgICAgLy8gQ29tcHV0
ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KKyAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVy
YW5kczsKKyAgICBjb2RlQmxvY2stPnZhcmlhYmxlRXZlbnRTdHJlYW0oKS5yZWNvbnN0cnVjdChj
b2RlQmxvY2ssIGV4aXQubV9jb2RlT3JpZ2luLCBjb2RlQmxvY2stPm1pbmlmaWVkREZHKCksIGV4
aXQubV9zdHJlYW1JbmRleCwgb3BlcmFuZHMpOworICAgIAorICAgIC8vIFRoZXJlIG1heSBiZSBh
biBvdmVycmlkZSwgZm9yIGZvcndhcmQgc3BlY3VsYXRpb25zLgorICAgIGlmICghIWV4aXQubV92
YWx1ZVJlY292ZXJ5T3ZlcnJpZGUpIHsKKyAgICAgICAgb3BlcmFuZHMuc2V0T3BlcmFuZCgKKyAg
ICAgICAgICAgIGV4aXQubV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGUtPm9wZXJhbmQsIGV4aXQubV92
YWx1ZVJlY292ZXJ5T3ZlcnJpZGUtPnJlY292ZXJ5KTsKKyAgICB9CisgICAgCiAgICAgU3BlY3Vs
YXRpb25SZWNvdmVyeSogcmVjb3ZlcnkgPSAwOwogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRl
eCkKICAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4
aXQubV9yZWNvdmVyeUluZGV4IC0gMSk7CkBAIC03NSw3ICs4NSw3IEBAIHZvaWQgY29tcGlsZU9T
UkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICBBc3NlbWJseUhlbHBlcnMgaml0KGdsb2Jh
bERhdGEsIGNvZGVCbG9jayk7CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBleGl0Q29tcGlsZXIo
aml0KTsKICAgICAgICAgCi0gICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdChleGl0LCBy
ZWNvdmVyeSk7CisgICAgICAgIGV4aXRDb21waWxlci5jb21waWxlRXhpdChleGl0LCBvcGVyYW5k
cywgcmVjb3ZlcnkpOwogICAgICAgICAKICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2NrKTsKICAgICAgICAgZXhpdC5tX2NvZGUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMTEyMDQwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBp
bGVFeGl0KGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CisgICAgdm9pZCBj
b21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
LCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CiAKIHByaXZhdGU6CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMTIwNDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3
ICs2MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOwor
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJu
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpA
QCAtOTAsNyArOTAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJ
CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNl
KHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBh
eWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgcGF5bG9hZEdQ
Uik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICBy
ZXR1cm4gcGF5bG9hZEdQUjsKICAgICB9CkBAIC0xMjIsMTMgKzEyMiwxMyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAgICAgICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAg
ICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAg
ICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQo
bm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgp
OwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3Rh
bnQobm9kZUluZGV4KSwgZnByKTsKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8K
QEAgLTE0MSw3ICsxNDEsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZp
bGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFt
LCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAKQEAg
LTE2MSw3ICsxNjEsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUlu
CiAgICAgICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZtX2ppdCk7CiAKICAgICAg
ICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGls
bGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgIHJldHVybiBmcHI7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMDYsNyArMjA2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAg
ICAgIG1fZ3Bycy51bmxvY2socGF5bG9hZEdQUik7CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnBy
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZpbGxE
b3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAg
ICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KQEAg
LTI1MSw3ICsyNTEsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5k
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRl
eCkucGF5bG9hZCgpKSwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHRh
Z0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwg
aXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgPyBEYXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIs
IHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50
ZWdlciA6IERhdGFGb3JtYXRKUyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBEYXRh
Rm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZvcm1hdCgpOwogICAgICAgICAgICAgQVNT
RVJUKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lICYmIHNwaWxsRm9ybWF0ICE9IERhdGFG
b3JtYXRTdG9yYWdlKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpm
aWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgcGF5bG9hZEdQUik7CiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIs
IHBheWxvYWRHUFIsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSA/IERhdGFGb3Jt
YXRKUyA6IHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJs
ZSA/IERhdGFGb3JtYXRKUyA6IHNwaWxsRm9ybWF0KTsKICAgICAgICAgfQogCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMzE5LDcgKzMxOSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJbmQKICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9n
cHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBmaWxsRm9y
bWF0KTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9h
ZEdQUiwgZmlsbEZvcm1hdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzM0
LDcgKzMzNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAg
ICAgICAgbV9mcHJzLnJlbGVhc2Uob2xkRlBSKTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdH
UFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFp
bihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9y
bWF0SlMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTEwMDQsNyArMTAwNCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAg
IEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
Q29uc3RhbnQpOwotICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAg
ICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5G
b3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAg
ICAgIH0KQEAgLTEwMTksNyArMTAxOSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
U3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgaW5mby5m
aWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTEwMzcsNyArMTAz
Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAg
bV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQ
Uik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgIGluZm8uZmlsbEludGVnZXIocGF5bG9hZEdQUik7
CisgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAg
ICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIHJldHVybkZvcm1h
dCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gcGF5bG9hZEdQUjsKQEAgLTEw
OTgsMTMgKzEwOTgsMTMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YgogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5m
by5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1f
c3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAg
ICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCksIGZwcik7CiAgICAgICAg
ICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTExMTUsNyArMTExNSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxs
b2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJz
LnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmls
bERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAg
ICAgICAgICAgIH0KIApAQCAtMTEzNyw3ICsxMTM3LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGlu
aygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnBy
KTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE3Myw3ICsxMTczLDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2dwcnMu
dW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2socGF5bG9hZEdQUik7CiAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91Ymxl
KCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICBy
ZXR1cm4gZnByOwogICAgIH0KQEAgLTEyMzAsNyArMTIzMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7Ci0gICAgICAgICAgICBpbmZv
LmZpbGxDZWxsKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KIApAQCAtMTI0MCw3ICsxMjQw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5m
by5maWxsQ2VsbChncHIpOworICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0cmVhbSwgZ3ByKTsK
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTEyNjIsNyArMTI2Miw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgbV9ncHJzLnJlbGVh
c2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ2Vs
bCk7Ci0gICAgICAgIGluZm8uZmlsbENlbGwocGF5bG9hZEdQUik7CisgICAgICAgIGluZm8uZmls
bENlbGwoKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7
CiAgICAgfQogCkBAIC0xMzAzLDcgKzEzMDMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoanNWYWx1ZS5hc0Jvb2xlYW4oKSksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxC
b29sZWFuKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KIApAQCAtMTMxNSw3ICsxMzE1
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5m
by5maWxsQm9vbGVhbihncHIpOworICAgICAgICBpbmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwg
Z3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTEzMzgsNyArMTMzOCw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJz
LnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQm9vbGVhbik7Ci0gICAgICAgIGluZm8uZmlsbEJvb2xlYW4ocGF5bG9hZEdQUik7CisgICAg
ICAgIGluZm8uZmlsbEJvb2xlYW4oKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAgICAgcmV0
dXJuIHBheWxvYWRHUFI7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExMjA0MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdl
cihOb2RlSQogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRl
Z2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRh
Rm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAg
fQpAQCAtNzMsNyArNzMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5v
ZGVJCiAgICAgICAgIC8vIFNpbmNlIHdlIHN0YXRpY2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxp
bmcgYW4gaW50ZWdlciwgYW5kIHZhbHVlcwogICAgICAgICAvLyBpbiB0aGUgUmVnaXN0ZXJGaWxl
IGFyZSBib3hlZCwgdGhpcyBtdXN0IGJlIERhdGFGb3JtYXRKU0ludGVnZXIuCiAgICAgICAgIC8v
IFdlIHdpbGwgY2hlY2sgdGhpcyB3aXRoIGEgaml0QXNzZXJ0IGJlbG93LgotICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIGluZm8uZmls
bEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICB1
bmxvY2soZ3ByKTsKICAgICB9CiAKQEAgLTEyNiw3ICsxMjYsNyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3Vs
ZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAg
ICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAg
ICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0
YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2Nh
dGUoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3Vi
bGUoTm9kZUluCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAg
ICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsK
LSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBm
cHI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91
bGQgbm90IGJlIHJlYWNoYWJsZT8KQEAgLTE0Myw3ICsxNDMsNyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtMTUzLDcgKzE1Myw3IEBA
IEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAg
ICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAg
ICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAg
ICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTYy
LDcgKzE2Miw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAg
ICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTczLDcgKzE3Myw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0
cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTUsNyArMjE1LDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICBtX2dwcnMu
dW5sb2NrKGpzVmFsdWVHcHIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwogICAg
ICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91Ymxl
KTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAg
cmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNDYsNyArMjQ2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICBtX2dwcnMucmVsZWFzZShncHIpOwogICAg
ICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91Ymxl
KTsKIAotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91
YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CiAKQEAgLTI3
MywxOCArMjczLDE4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkK
IAogICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3Rh
bnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7
Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3Jt
YXRKUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
c3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgc3BpbGxGb3JtYXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpA
QCAtMzIwLDcgKzMyMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9k
ZUkKICAgICAgICAgfQogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBtX2ppdC5v
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQogCkBAIC0zMjksNyArMzI5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICBHUFJSZWcgZ3ByID0gYm94RG91YmxlKGZw
cik7CiAKICAgICAgICAgLy8gVXBkYXRlIGFsbCBpbmZvCi0gICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICBtX2ZwcnMucmVsZWFz
ZShmcHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVySlMpOwogCkBAIC0xMDE2LDcgKzEwMTYsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgQVNTRVJUKGlzSW50
MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAg
ICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgaW5mby5maWxsSW50
ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAgLTEwMzEs
NyArMTAzMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAg
ICAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3YXMgc3BpbGxlZCBhcyBhbiBpbnRlZ2VyIHdl
IGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCiAgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIp
OworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CkBAIC0xMDQwLDE0ICsxMDQwLDE0IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAg
ICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CiAgICAgICAgICAgICByZXR1
cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICAvLyBGaWxsIGFzIEpT
VmFsdWUsIGFuZCBmYWxsIHRocm91Z2guCi0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2soZ3ByKTsK
ICAgICB9CiAKQEAgLTEwNTYsNyArMTA1Niw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAg
IG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAg
ICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3Qp
IHsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CkBAIC0x
MDc3LDcgKzEwNzcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgICAgICAgICAgaW5m
by5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1f
c3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGdwcjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdwciwgcmVzdWx0KTsKQEAg
LTExNTgsNyArMTE1OCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1fZnBy
cy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmls
bERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
IHsKQEAgLTExNjgsNyArMTE2OCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAgICAg
IG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwot
ICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZw
cjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwpAQCAtMTE4MSw3ICsxMTgx
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAg
ICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKLSAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgIHJldHVybiBmcHI7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTE5MCw3ICsxMTkwLDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgdW5s
b2NrKGdwcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTIwMSw3ICsxMjAx
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAg
ICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1h
dCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZv
cm1hdCk7CiAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xMjQzLDcgKzEyNDMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy51bmxvY2soanNWYWx1ZUdwcik7CiAgICAgICAg
IG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZpbGxEb3VibGUo
ZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAg
aW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KQEAgLTEyNzQs
NyArMTI3NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CiAKLSAgICAgICAgaW5mby5maWxsRG91
YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAg
ICAgIHJldHVybiBmcHI7CiAgICAgfQogCkBAIC0xMzEyLDcgKzEzMTIsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5p
c0NlbGwoKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihqc1ZhbHVlLmFzQ2VsbCgpKSwgZ3ByKTsKLSAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7Cisg
ICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1h
dEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUpOwpAQCAtMTMyMiwxMCArMTMyMiwxMCBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCi0gICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoaW5m
by5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwpCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Nl
bGwpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTEzNDAsNyArMTM0MCw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BS
UmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTM4NSw3
ICsxMzg1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAg
ICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OwpAQCAtMTM5NSwxMyArMTM5NSwxMyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCi0gICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVh
bSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9
IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgs
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJv
b2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCBncHIpOwogICAgICAgICB9Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBA
IC0xNDE4LDcgKzE0MTgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVC
b29sCiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
fjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwg
SW52YWxpZEdQUlJlZykpOwogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICB9CiAKQEAgLTE4NDYsNyArMTg0Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mg
bm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxv
Y2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwKICAgICAgICAgICAgICAgICAvLyBidXQgdGhh
dCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUuCi0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJl
Z2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgp
LCBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAKQEAgLTE4NTUsNyArMTg1NSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUu
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAg
ICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5SZWdp
c3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg2NSw3
ICsxODY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNl
bGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OmNsYXNzSW5m
b09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5m
bykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JP
cGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOwor
ICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2Uo
Q2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CkBAIC0xODc1LDE0ICsxODc1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKENl
bGxJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5s
b2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9w
ZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJl
Y29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJG
aWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CiAKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwo
KSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmVjb3JkU2V0
TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExMjA0MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMywyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK1Nw
ZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQorICAgIDogbV9j
b21waWxlT2theSh0cnVlKQorICAgICwgbV9qaXQoaml0KQorICAgICwgbV9jb21waWxlSW5kZXgo
MCkKKyAgICAsIG1faW5kZXhJbkJsb2NrKDApCisgICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKKyAgICAsIG1fYmxvY2tIZWFkcyhq
aXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCisgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSkKKyAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1f
bG9jYWxWYXJzKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKQorICAgICwgbV9zdGF0ZShqaXQuZ3JhcGgoKSkKKyAgICAsIG1fc3RyZWFtKCZq
aXQuY29kZUJsb2NrKCktPnZhcmlhYmxlRXZlbnRTdHJlYW0oKSkKKyAgICAsIG1fbWluaWZpZWRH
cmFwaCgmaml0LmNvZGVCbG9jaygpLT5taW5pZmllZERGRygpKQoreworfQorCiAvLyBPbiBXaW5k
b3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBvdGhlciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwg
aXQgZGlyZWN0bHkuCiAvLyBPbiBBUk12NyB3ZSBhc3NlcnQgdGhhdCBhbGwgZnVuY3Rpb24gcG9p
bnRlcnMgaGF2ZSB0byBsb3cgYml0IHNldCAocG9pbnQgdG8gdGh1bWIgY29kZSkuCiAjaWYgQ0FM
TElOR19DT05WRU5USU9OX0lTX1NURENBTEwgfHwgQ1BVKEFSTV9USFVNQjIpCkBAIC02NCw3ICs4
MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UoTm9kZUkKICAgICAgICAg
QVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBncHIpOwotICAgICAgICBpbmZvLmZpbGxTdG9yYWdlKGdwcik7CisgICAgICAgIGlu
Zm8uZmlsbFN0b3JhZ2UoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAg
IH0KICAgICAgICAgCkBAIC04ODMsMTIgKzg5OSwzMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCcmFuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2RlKQor
eworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOworICAgIAorICAgIGlmICghaW5mby5ub3RpY2VPU1JCaXJ0aCgqbV9zdHJl
YW0sIHZpcnR1YWxSZWdpc3RlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoYmVs
b25nc0luTWluaWZpZWRHcmFwaChub2RlLm9wKCkpKQorICAgICAgICBtX21pbmlmaWVkR3JhcGgt
PmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG5vZGVJbmRleCwgbm9kZSkpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQogewogICAgIEFT
U0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJbmRleEZvck9w
ZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNl
dE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChub2Rl
LmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCksIGNo
aWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAg
ICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hpbGQx
KCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQo
bm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCArOTM3LDE5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdfRU5BQkxF
KEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZlbnQ6OnJlc2V0KCkpOwog
CiAgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2su
dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOworICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNv
dXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQuZ3JhcGgoKS5h
cmd1bWVudElzQ2FwdHVyZWQoaSkpCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVl
U291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBW
YWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5k
ZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgdmFs
dWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICBtX2FyZ3VtZW50c1tpXSA9
IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxlRXZlbnQ6OnNl
dExvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsK
ICAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwpAQCAtOTE4LDEyICs5NTgsMTUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIEFTU0VSVChtX3Zh
cmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChpKTsKKyAgICAgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2U7CiAgICAgICAgIGlmIChub2Rl
SW5kZXggPT0gTm9Ob2RlIHx8IG1faml0LmdyYXBoKCkubG9jYWxJc0NhcHR1cmVkKGkpKQotICAg
ICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxl
KTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVy
RmlsZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRh
KCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0g
PSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICB2YWx1ZVNv
dXJjZSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihh
dChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAg
ICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5k
ZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOworICAgICAgICBtX3Zhcmlh
Ymxlc1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kKFZhcmlhYmxl
RXZlbnQ6OnNldExvY2FsKGksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAgIH0KICAg
ICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKQEAgLTk4Niw2ICsxMDI5LDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFz
aWNCbG9jayYKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBwcm94eSBub2Rlcy4KKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAg
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6CisgICAgICAgICAgICAgICAgbm90aWNlT1NSQmlydGgobV9jb21waWxlSW5kZXgsIG5vZGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKSB7CiAg
ICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25v
ZGUudmlydHVhbFJlZ2lzdGVyKCldOwpAQCAtMTAwNiwxNiArMTA2MCw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNlbmRpZgogICAgICAgICB9CiAgICAgICAg
IAotI2lmIERGR19FTkFCTEUoVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVTKQotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAg
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoYXJndW1lbnRUb09wZXJhbmQoaSkpLmR1bXAoc3RkZXJy
KTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coIiA6ICIpOwotICAgICAgICAKLSAgICAgICAg
Zm9yIChpbnQgb3BlcmFuZCA9IDA7IG9wZXJhbmQgPCAoaW50KW1fdmFyaWFibGVzLnNpemUoKTsg
KytvcGVyYW5kKQotICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCku
ZHVtcChzdGRlcnIpOwotI2VuZGlmCi0KICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAg
ICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKQEAgLTEyNTIsMTM2ICsxMjk2LDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmsKIAogVmFsdWVSZWNvdmVyeSBT
cGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2Um
IHZhbHVlU291cmNlKQogewotICAgIHN3aXRjaCAodmFsdWVTb3VyY2Uua2luZCgpKSB7Ci0gICAg
Y2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgICAgIAotICAgIGNhc2UgSW50MzJJblJlZ2lz
dGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZEludDMyKCk7Ci0KLSAgICBjYXNlIENlbGxJblJlZ2lzdGVyRmlsZToKLSAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZENlbGwoKTsKLQotICAgIGNhc2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbigp
OwotICAgICAgICAKLSAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkRG91YmxlKCk7
Ci0KLSAgICBjYXNlIEhhdmVOb2RlOiB7Ci0gICAgICAgIGlmIChpc0NvbnN0YW50KHZhbHVlU291
cmNlLm5vZGVJbmRleCgpKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25z
dGFudCh2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOwotICAgIAot
ICAgICAgICBOb2RlKiBub2RlUHRyID0gJmF0KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKTsKLSAg
ICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7Ci0gICAgICAgICAgICAvLyBJ
dCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBu
b2RlLCBvciBvcGVyYW5kLAotICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5l
ZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgotICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAg
Ci0gICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkg
fHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKLSAg
ICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhh
dCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50LgotICAgICAgICAgICAgLy8gVGhlcmUg
YXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJ
bnQzMlRvRG91YmxlOiBXZSBjYW4gdXNlIHRoaXMgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIG5v
ZGUsIGJ1dAotICAgICAgICAgICAgLy8gICAgd2UnZCByYXRoZXIgbm90OyBzbyB3ZSB1c2UgaXQg
b25seSBpZiBpdCBpcyB0aGUgb25seSByZW1haW5pbmcKLSAgICAgICAgICAgIC8vICAgIGxpdmUg
dmVyc2lvbi4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IElm
IHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCi0gICAgICAg
ICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4KLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJz
aW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCi0gICAgICAgICAgICAvLyAgICB0
aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5
IGZvcm1lZCBudW1iZXIKLSAgICAgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGlu
dGVybWVkaWF0ZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBUaGUgcmV2ZXJzZSBv
ZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRz
Ci0gICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFu
cyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCi0gICAgICAgICAgICAvLyAgICB0aGUg
bnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCi0gICAgICAg
IAotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgICAg
IGlmIChub2RlUHRyLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpLmluZGV4KCk7Ci0gICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGluZm9Q
dHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAg
ICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkg
PT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKCFmb3VuZCkgewotICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBpbnQzMlRvRG91YmxlSW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAg
ICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgICAg
IE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFs
UmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2
ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gYXQoaW5mby5u
b2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tl
ZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGludDMyVG9Eb3VibGVJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUlu
ZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRv
TnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW50MzJUb0RvdWJsZUluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBpbnQzMlRvRG91YmxlSW5kZXg7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4OwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9k
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBO
b05vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXhUb1Vz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZv
UHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsK
LSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAg
ICAgICAgfQorICAgIGlmICh2YWx1ZVNvdXJjZS5pc0luUmVnaXN0ZXJGaWxlKCkpCisgICAgICAg
IHJldHVybiB2YWx1ZVNvdXJjZS52YWx1ZVJlY292ZXJ5KCk7CiAgICAgCi0gICAgICAgIEFTU0VS
VChpbmZvUHRyLT5hbGl2ZSgpKTsKLQotICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lz
dGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnByKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAmIERhdGFGb3Jt
YXRKUykKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGluZm9Q
dHItPnRhZ0dQUigpLCBpbmZvUHRyLT5wYXlsb2FkR1BSKCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mb1B0ci0+Z3ByKCksIGluZm9QdHItPnJl
Z2lzdGVyRm9ybWF0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpbmZvUHRyLT5zcGlsbEZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
bm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpLCBpbmZvUHRyLT5zcGlsbEZvcm1hdCgpKTsKKyAg
ICBBU1NFUlQodmFsdWVTb3VyY2Uua2luZCgpID09IEhhdmVOb2RlKTsKKyAgICBpZiAoaXNDb25z
dGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5Ojpjb25zdGFudCh2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkp
OwogICAgIAotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3ZlcnkoKTsKLSAgICB9Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwotICAg
IH0KKyAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJiBub2RlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTEyMDQwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR1NwZWN1bGF0aXZlSklUX2gKICNkZWZpbmUg
REZHU3BlY3VsYXRpdmVKSVRfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKQEAgLTMzLDYg
KzM1LDcgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiREZHVmFsdWVTb3Vy
Y2UuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292
ZXJ5LmgiCiAKQEAgLTQ2LDg1ICs0OSw2IEBAIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ7
CiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVy
YW5kOwogCi0KLWVudW0gVmFsdWVTb3VyY2VLaW5kIHsKLSAgICBTb3VyY2VOb3RTZXQsCi0gICAg
VmFsdWVJblJlZ2lzdGVyRmlsZSwKLSAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAotICAgIENlbGxJ
blJlZ2lzdGVyRmlsZSwKLSAgICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCi0gICAgRG91YmxlSW5S
ZWdpc3RlckZpbGUsCi0gICAgSGF2ZU5vZGUKLX07Ci0KLWNsYXNzIFZhbHVlU291cmNlIHsKLXB1
YmxpYzoKLSAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4
RnJvbUtpbmQoU291cmNlTm90U2V0KSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0
IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCi0gICAgICAgIDog
bV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNlTm90U2V0KTsKLSAgICAgICAgQVNTRVJUKGtp
bmQoKSAhPSBIYXZlTm9kZSk7Ci0gICAgfQotICAgIAotICAgIGV4cGxpY2l0IFZhbHVlU291cmNl
KE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkK
LSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKLSAg
ICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8IGlzQnl0ZUFycmF5UHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxs
SW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZp
bGUpOwotICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7Ci0gICAgfQot
ICAgIAotICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCk7Ci0gICAgfQotICAgIAotICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBIYXZlTm9kZSk7Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRp
YyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2Rl
KTsKLSAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9O
b2RlIC0gbm9kZUluZGV4KTsKLSAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KEhhdmVOb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7Ci0gICAgfQotICAgIAotICAg
IE5vZGVJbmRleCBtX25vZGVJbmRleDsKLX07Ci0KLQogZW51bSBHZW5lcmF0ZWRPcGVyYW5kVHlw
ZSB7IEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93biwgR2VuZXJhdGVkT3BlcmFuZEludGVnZXIs
IEdlbmVyYXRlZE9wZXJhbmREb3VibGUsIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlfTsKIAogLy8g
PT09IFNwZWN1bGF0aXZlSklUID09PQpAQCAtMzA4LDcgKzIzMiw3IEBAIHB1YmxpYzoKIAogICAg
ICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBh
bmQgYW55CiAgICAgICAgIC8vIGFzc29jaWF0ZWQgcmVzb3VyY2VzIG1heSBiZSBmcmVlZC4KLSAg
ICAgICAgaWYgKCFpbmZvLnVzZSgpKQorICAgICAgICBpZiAoIWluZm8udXNlKCptX3N0cmVhbSkp
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gUmVsZWFzZSB0aGUgYXNzb2NpYXRl
ZCBtYWNoaW5lIHJlZ2lzdGVycy4KQEAgLTM2OCw2ICsyOTIsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKKyAgICB2b2lkIG5vdGljZU9TUkJpcnRoKE5v
ZGVJbmRleCwgTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAgIHZv
aWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKQEAgLTY1Nyw3ICs1ODIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAvLyBDaGVjayB0aGUgR2VuZXJhdGlvbkluZm8gdG8gc2VlIGlmIHRoaXMgdmFsdWUg
bmVlZCB3cml0aW5nCiAgICAgICAgIC8vIHRvIHRoZSBSZWdpc3RlckZpbGUgLSBpZiBub3QsIG1h
cmsgaXQgYXMgc3BpbGxlZCAmIHJldHVybi4KICAgICAgICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwo
KSkgewotICAgICAgICAgICAgaW5mby5zZXRTcGlsbGVkKCk7CisgICAgICAgICAgICBpbmZvLnNl
dFNwaWxsZWQoKm1fc3RyZWFtLCBzcGlsbE1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCkBAIC02NjcsMjAgKzU5MiwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVGhp
cyBpcyBzcGVjaWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpTIHZhbHVlIC0gYXMgaW4gaXQncyBub3Qg
dmlzaWJsZSB0byBKUwogICAgICAgICAgICAgLy8gY29kZS4KICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAg
ICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAgaW5m
by5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6
IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SW50
ZWdlcik7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZv
cm1hdEludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6IHsKICAgICAgICAgICAg
IG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNw
aWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdERvdWJsZSk7CisgICAg
ICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdERvdWJsZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjk2LDEz
ICs2MjEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU3BpbGwg
dGhlIHZhbHVlLCBhbmQgcmVjb3JkIGl0IGFzIHNwaWxsZWQgaW4gaXRzIGJveGVkIGZvcm0uCiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNw
aWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoKERhdGFGb3JtYXQpKHNwaWxsRm9ybWF0
IHwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3Bp
bGxNZSwgKERhdGFGb3JtYXQpKHNwaWxsRm9ybWF0IHwgRGF0YUZvcm1hdEpTKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICBjYXNlIERhdGFG
b3JtYXRDZWxsOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7CiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxs
TWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoc3BpbGxGb3JtYXQpOworICAgICAgICAgICAg
aW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC03MTAsNyArNjM1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKICAgICAgICAgICAgIC8vIE9uIEpTVkFMVUUz
Ml82NCBib3hpbmcgYSBkb3VibGUgaXMgYSBuby1vcC4KICAgICAgICAgICAgIG1faml0LnN0b3Jl
RG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAg
ICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgIGlu
Zm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTcxOSw3ICs2NDQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoaW5mby50YWdHUFIoKSwgSklUQ29tcGlsZXI6OnRhZ0ZvcihzcGls
bE1lKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8ucGF5bG9hZEdQUigpLCBKSVRD
b21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKHNw
aWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBz
cGlsbEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKICAgICAgICAgfQpAQCAt
MTgyMCw3ICsxNzQ1LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFw
cGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhp
cykpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7
CiAgICAgfQogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
anVtcFRvRmFpbCkKICAgICB7CkBAIC0xODQzLDcgKzE3NjgsNyBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKLSAgICAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3Bl
Y3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVu
ZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywg
bV9zdHJlYW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25S
ZWNvdmVyaWVzKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNv
dmVyeSkKICAgICB7CkBAIC0xODYzLDcgKzE3ODgsOCBAQCBwcml2YXRlOgogICAgICAgICBleGl0
Lm1fY29kZU9yaWdpbiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAgIGV4aXQubV9sYXN0
U2V0T3BlcmFuZCA9IHNldExvY2FsLmxvY2FsKCk7CiAgICAgICAgIAotICAgICAgICBleGl0LnZh
bHVlUmVjb3ZlcnlGb3JPcGVyYW5kKHNldExvY2FsLmxvY2FsKCkpID0gdmFsdWVSZWNvdmVyeTsK
KyAgICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZSA9IGFkb3B0UHRyKAorICAgICAg
ICAgICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShzZXRMb2NhbC5sb2NhbCgpLCB2YWx1ZVJl
Y292ZXJ5KSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRl
cm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAgLTE5MjEsNiArMTg0NywxMiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07CiAgICAgfQog
ICAgIAorICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoaW50IG9wZXJhbmQsIFZhbHVlU291cmNlIHZh
bHVlU291cmNlKQorICAgIHsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5k
KG9wZXJhbmQpID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmQoVmFyaWFi
bGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7Cisg
ICAgfQorICAgIAogICAgIC8vIFRoZSBKSVQsIHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3Nl
bWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBKSVRDb21waWxlciYgbV9qaXQ7CiAgICAgLy8gVGhl
IGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0ZWQuCkBAIC0xOTU0LDYgKzE4ODYsOSBAQCBwcml2
YXRlOgogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKKyAgICBWYXJpYWJs
ZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKKyAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3Jh
cGg7CisgICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25z
dCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihpbnQgb3BlcmFuZCkKQEAgLTI1NzMsMjAgKzI1MDgsNiBAQCBwcml2YXRlOgogICAgIEdQ
UlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLWlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3Vs
YXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKLSAg
ICAsIG1faml0KGppdCkKLSAgICAsIG1fY29tcGlsZUluZGV4KDApCi0gICAgLCBtX2luZGV4SW5C
bG9jaygwKQotICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1D
YWxsZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpKQotICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKLSAgICAsIG1f
bGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1f
c3RhdGUobV9qaXQuZ3JhcGgoKSkKLXsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVy
eU92ZXJyaWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGVfaAorI2RlZmluZSBERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorCitjbGFzcyBWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUgeworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZSgp
IHsgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZShpbnQgb3BlcmFuZCwgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgICAgIDogb3BlcmFuZChvcGVyYW5kKQorICAg
ICAgICAsIHJlY292ZXJ5KHJlY292ZXJ5KQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50IG9w
ZXJhbmQ7CisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKK307CisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFsdWVTb3VyY2VfaAorI2RlZmluZSBERkdWYWx1
ZVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgor
I2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYWx1ZVNvdXJjZUtpbmQg
eworICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMy
SW5SZWdpc3RlckZpbGUsCisgICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAorICAgIEJvb2xlYW5JblJl
Z2lzdGVyRmlsZSwKKyAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsK
Kworc3RhdGljIGlubGluZSBWYWx1ZVNvdXJjZUtpbmQgZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VL
aW5kKERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsK
KyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICByZXR1cm4gSW50MzJJblJlZ2lz
dGVyRmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgIHJldHVybiBEb3Vi
bGVJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICBy
ZXR1cm4gQm9vbGVhbkluUmVnaXN0ZXJGaWxlOworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Cisg
ICAgICAgIHJldHVybiBDZWxsSW5SZWdpc3RlckZpbGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKGRhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm4gVmFsdWVJ
blJlZ2lzdGVyRmlsZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgRGF0YUZvcm1hdCB2YWx1
ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCit7CisgICAgc3dp
dGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1
cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
cmV0dXJuIERhdGFGb3JtYXRJbnRlZ2VyOworICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgor
ICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3Rl
ckZpbGU6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIERvdWJs
ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNJblJlZ2lzdGVyRmlsZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKK3sK
KyAgICByZXR1cm4gdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KGtpbmQpICE9IERhdGFGb3Jt
YXROb25lOworfQorCitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3Vy
Y2UoKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNl
dCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNv
dXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRl
eEZyb21LaW5kKHZhbHVlU291cmNlS2luZCkpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ICE9IFNvdXJjZU5vdFNldCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOwor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3Vy
Y2UgZm9yUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAg
ICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByZXR1cm4g
VmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGlmIChpc0FycmF5UHJl
ZGljdGlvbihwcmVkaWN0aW9uKSB8fCBpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikp
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJu
IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgVmFsdWVTb3VyY2UgZm9yRGF0YUZvcm1hdChEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAg
eworICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5k
KGRhdGFGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJj
ZU5vdFNldDsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0luUmVnaXN0ZXJGaWxlKCkgY29uc3QgeyByZXR1cm4gSlND
OjpERkc6OmlzSW5SZWdpc3RlckZpbGUoa2luZCgpKTsgfQorICAgIAorICAgIERhdGFGb3JtYXQg
ZGF0YUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VLaW5k
VG9EYXRhRm9ybWF0KGtpbmQoKSk7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnkgdmFs
dWVSZWNvdmVyeSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJblJlZ2lzdGVyRmls
ZSgpKTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZUluUmVn
aXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJl
Z2lzdGVyRmlsZSgpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2VsbElu
UmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJ
blJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3VibGUoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRl
eDsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3Vy
Y2VLaW5kIGtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQg
JiYga2luZCA8IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBIYXZl
Tm9kZTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7
CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHVmFsdWVTb3VyY2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R1ZhcmlhYmxlRXZlbnRfaAorI2RlZmluZSBERkdWYXJpYWJsZUV2ZW50X2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYXJpYWJsZUV2ZW50S2luZCB7CisgICAgLy8gTWFy
a3MgdGhlIGJlZ2lubmluZyBvZiBhIGNoZWNrcG9pbnQuIElmIHlvdSBpbnRlcnByZXQgdGhlIHZh
cmlhYmxlCisgICAgLy8gZXZlbnRzIHN0YXJ0aW5nIGF0IGEgUmVzZXQgcG9pbnQgdGhlbiB5b3Un
bGwgZ2V0IGV2ZXJ5dGhpbmcgeW91IG5lZWQuCisgICAgUmVzZXQsCisgICAgCisgICAgLy8gTm9k
ZSBiaXJ0aHMuIFBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBhIG5vZGUgYmVjb21lcyByZWxldmFu
dCBmb3IgT1NSLgorICAgIC8vIEl0IG1heSBiZSB0aGUgcG9pbnQgd2hlcmUgaXQgaXMgYWN0dWFs
bHkgYm9ybiAoaS5lLiBhc3NpZ25lZCkgb3IgaXQgbWF5CisgICAgLy8gYmUgYSBsYXRlciBwb2lu
dCwgaWYgaXQncyBvbmx5IGxhdGVyIGluIHRoZSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMKKyAg
ICAvLyB0aGF0IHdlIHN0YXJ0IHRvIGNhcmUgYWJvdXQgdGhpcyBub2RlLgorICAgIEJpcnRoVG9G
aWxsLAorICAgIEJpcnRoVG9TcGlsbCwKKyAgICAKKyAgICAvLyBFdmVudHMgcmVsYXRlZCB0byBo
b3cgYSBub2RlIGlzIHJlcHJlc2VudGVkLgorICAgIEZpbGwsCisgICAgU3BpbGwsCisgICAgCisg
ICAgLy8gRGVhdGggb2YgYSBub2RlIC0gYWZ0ZXIgdGhpcyB3ZSBubyBsb25nZXIgY2FyZSBhYm91
dCB0aGlzIG5vZGUuCisgICAgRGVhdGgsCisgICAgCisgICAgLy8gQSBNb3ZIaW50IG1lYW5zIHRo
YXQgYSBub2RlIGlzIGJlaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGJ5dGVjb2RlIG9wZXJhbmQsCisg
ICAgLy8gYnV0IHRoYXQgaXQgaGFzIG5vdCBiZWVuIHN0b3JlZCBpbnRvIHRoYXQgb3BlcmFuZC4K
KyAgICBNb3ZIaW50LAorICAgIAorICAgIC8vIEEgU2V0TG9jYWwgbWVhbnMgdGhhdCBhIG5vZGUn
cyB2YWx1ZSBoYXMgYWN0dWFsbHkgYmVlbiBzdG9yZWQgaW50byB0aGUKKyAgICAvLyBieXRlY29k
ZSBvcGVyYW5kIHRoYXQgaXQncyBhc3NvY2lhdGVkIHdpdGguCisgICAgU2V0TG9jYWwsCisgICAg
CisgICAgLy8gVXNlZCB0byBpbmRpY2F0ZSBhbiB1bmluaXRpYWxpemVkIFZhcmlhYmxlRXZlbnQu
IERvbid0IHVzZSBmb3Igb3RoZXIKKyAgICAvLyBwdXJwb3Nlcy4KKyAgICBJbnZhbGlkRXZlbnRL
aW5kCit9OworCit1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBncHI7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBm
cHI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdHJ1Y3QgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEIHBheWxvYWRHUFI7CisgICAgfSBwYWlyOworI2VuZGlmCisgICAgaW50MzJfdCB2aXJ0
dWFsUmVnOworfTsKKworY2xhc3MgVmFyaWFibGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFi
bGVFdmVudCgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCByZXNldCgpCisgICAgeworICAgICAg
ICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2tpbmQgPSBSZXNldDsKKyAg
ICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVu
dCBmaWxsR1BSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsK
KyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgQVNTRVJUKCEoZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRK
UykpOworI2VuZGlmCisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50
Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUuZ3ByID0gZ3ByOworICAgICAg
ICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBkYXRh
Rm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZmlsbFBhaXIoVmFyaWFibGVFdmVu
dEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVy
SUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJ
bmRleDsKKyAgICAgICAgZXZlbnQudS5wYWlyLnRhZ0dQUiA9IHRhZ0dQUjsKKyAgICAgICAgZXZl
bnQudS5wYWlyLnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworICAgICAgICBldmVudC5tX2tpbmQg
PSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAg
ICAgIHJldHVybiBldmVudDsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsRlBSKFZhcmlhYmxlRXZlbnRLaW5kIGtp
bmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnBy
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBG
aWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRl
eCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS5mcHIgPSBmcHI7CisgICAgICAgIGV2ZW50
Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRE
b3VibGU7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZh
cmlhYmxlRXZlbnQgc3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJ
bmRleCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBmb3JtYXQp
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwga2luZCA9PSBT
cGlsbCk7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5k
ZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdp
c3RlcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRh
Rm9ybWF0ID0gZm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBWYXJpYWJsZUV2ZW50IGRlYXRoKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9k
ZUluZGV4OworICAgICAgICBldmVudC5tX2tpbmQgPSBEZWF0aDsKKyAgICAgICAgcmV0dXJuIGV2
ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChpbnQg
b3BlcmFuZCwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50
IGV2ZW50OworICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBl
dmVudC5tX2tpbmQgPSBTZXRMb2NhbDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9y
bWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJp
YWJsZUV2ZW50IG1vdkhpbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0g
bm9kZUluZGV4OworICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAg
ICBldmVudC5tX2tpbmQgPSBNb3ZIaW50OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQor
ICAgIAorICAgIFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZDsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2lu
ZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1f
a2luZCA9PSBTcGlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IERlYXRoIHx8IG1fa2lu
ZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorICAgIAorICAg
IERhdGFGb3JtYXQgZGF0YUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9r
aW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8fCBt
X2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbAorICAgICAgICAgICAgICAg
fHwgbV9raW5kID09IFNldExvY2FsKTsKKyAgICAgICAgcmV0dXJuIG1fZGF0YUZvcm1hdDsKKyAg
ICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZp
bGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YUZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
ICAgICBBU1NFUlQoIShtX2RhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpKTsKKyNlbmRpZgorICAg
ICAgICByZXR1cm4gdS5ncHI7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAg
ICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJu
IHUucGFpci50YWdHUFI7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
eWxvYWRHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRv
RmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBE
YXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm4gdS5wYWlyLnBheWxvYWRHUFI7CisgICAgfQor
I2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQ
UmVnaXN0ZXJJRCBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBC
aXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7CisgICAgICAgIHJldHVybiB1LmZwcjsKKyAgICB9Cisg
ICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwp
OworICAgICAgICByZXR1cm4gdS52aXJ0dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBpbnQgb3Bl
cmFuZCgpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbCB8fCBtX2tp
bmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiB1LnZpcnR1YWxSZWc7CisgICAgfQorICAg
IAorICAgIGNvbnN0IFZhcmlhYmxlUmVwcmVzZW50YXRpb24mIHZhcmlhYmxlUmVwcmVzZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiB1OyB9CisgICAgCitwcml2YXRlOgorICAgIE5vZGVJbmRleCBt
X2luZGV4OworICAgIAorICAgIC8vIEZvciBCaXJ0aFRvRmlsbCwgRmlsbDoKKyAgICAvLyAgIC0g
VGhlIEdQUiBvciBGUFIsIG9yIGEgR1BSIHBhaXIuCisgICAgLy8gRm9yIEJpcnRoVG9TcGlsbCwg
U3BpbGw6CisgICAgLy8gICAtIFRoZSB2aXJ0dWFsIHJlZ2lzdGVyLgorICAgIC8vIEZvciBNb3ZI
aW50LCBTZXRMb2NhbDoKKyAgICAvLyAgIC0gVGhlIGJ5dGVjb2RlIG9wZXJhbmQuCisgICAgLy8g
Rm9yIERlYXRoOgorICAgIC8vICAgLSBVbnVzZWQuCisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlv
biB1OworICAgIAorICAgIGludDhfdCBtX2tpbmQ7CisgICAgaW50OF90IG1fZGF0YUZvcm1hdDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVFdmVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0
aW9uSW5mbyB7CisgICAgYm9vbCBmaWxsZWQ7IC8vIHRydWUgLT4gaW4gZ3ByL2Zwci9wYWlyLCBm
YWxzZSAtPiBzcGlsbGVkCisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiB1OworICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgIAorICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8oKQorICAgICAg
ICA6IGZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
dXBkYXRlKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChldmVudC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2Fz
ZSBGaWxsOgorICAgICAgICAgICAgZmlsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJpcnRoVG9TcGlsbDoKKyAgICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAg
ICAgIGZpbGxlZCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVh
dGg6CisgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZToKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdSA9IGV2ZW50LnZhcmlhYmxlUmVwcmVzZW50YXRpb24oKTsKKyAg
ICAgICAgZm9ybWF0ID0gZXZlbnQuZGF0YUZvcm1hdCgpOworICAgIH0KK307CisKK3ZvaWQgVmFy
aWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCisgICAgT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzKSBjb25zdAoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpOworICAgIAorICAg
IC8vIFN0ZXAgMTogRmluZCB0aGUgbGFzdCBjaGVja3BvaW50LCBhbmQgZmlndXJlIG91dCB0aGUg
bnVtYmVyIG9mIHZpcnR1YWwgcmVnaXN0ZXJzIGFzIHdlIGdvLgorICAgIHVuc2lnbmVkIHN0YXJ0
SW5kZXggPSBpbmRleCAtIDE7CisgICAgd2hpbGUgKGF0KHN0YXJ0SW5kZXgpLmtpbmQoKSAhPSBS
ZXNldCkKKyAgICAgICAgc3RhcnRJbmRleC0tOworICAgIAorICAgIC8vIFN0ZXAgMjogQ3JlYXRl
IGEgbW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUgYW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KKyAg
ICB1bnNpZ25lZCBudW1WYXJpYWJsZXM7CisgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNh
bGxGcmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgKyBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgZWxzZQorICAgICAgICBudW1WYXJpYWJsZXMgPSBi
YXNlbGluZUNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgCisgICAgT3BlcmFu
ZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBudW1WYXJpYWJsZXMpOworICAgIFZlY3RvcjxNaW5pZmllZEdlbmVyYXRpb25JbmZvLCAzMj4g
Z2VuZXJhdGlvbkluZm9zKGluZGV4IC0gc3RhcnRJbmRleCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgVmFyaWFibGVF
dmVudFN0cmVhbSYgZXZlbnQgPSBhdChpKTsKKyAgICAgICAgc3dpdGNoIChldmVudC0+a2luZCgp
KSB7CisgICAgICAgIGNhc2UgUmVzZXQ6CisgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlydGhUb0ZpbGw6CisgICAgICAgIGNh
c2UgQmlydGhUb1NwaWxsOgorICAgICAgICBjYXNlIEZpbGw6CisgICAgICAgIGNhc2UgU3BpbGw6
CisgICAgICAgIGNhc2UgRGVhdGg6CisgICAgICAgICAgICBnZW5lcmF0aW9uSW5mb3NbZXZlbnQt
Pm5vZGVJbmRleCgpIC0gc3RhcnRJbmRleF0udXBkYXRlKCpldmVudCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgb3BlcmFuZFNvdXJjZXMu
c2V0T3BlcmFuZChldmVudC0+b3BlcmFuZCgpLCBWYWx1ZVNvdXJjZShldmVudC0+bm9kZUluZGV4
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAg
ICAgICAgb3BlcmFuZFNvdXJjZXMuc2V0T3BlcmFuZChldmVudC0+b3BlcmFuZCgpLCBWYWx1ZVNv
dXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC0+ZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDM6IFJlY29yZCB0aGUg
dGhpbmdzIHRoYXQgYXJlIGxpdmUsIHNvIHdlIGNhbiBnZXQgdG8gdGhlbSBtb3JlIHF1aWNrbHku
CisgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gaW5kaWNlc09mTGl2ZVRoaW5nczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgeworICAgICAgICBpZiAo
Z2VuZXJhdGlvbkluZm9zW2kgLSBzdGFydEluZGV4XS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUp
CisgICAgICAgICAgICBpbmRpY2VzT2ZMaXZlVGhpbmdzLmFwcGVuZChpKTsKKyAgICB9CisgICAg
CisgICAgLy8gU3RlcCA0OiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCisgICAgdmFsdWVSZWNv
dmVyaWVzID0gT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRT
b3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVy
YW5kU291cmNlc1tpXTsKKyAgICAgICAgaWYgKHNvdXJjZS5pc0luUmVnaXN0ZXJGaWxlKCkpIHsK
KyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IHNvdXJjZS52YWx1ZVJlY292ZXJ5KCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNT
RVJUKHNvdXJjZS5raW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAgICBNaW5pZmllZE5vZGUqIG5v
ZGUgPSBncmFwaC5hdChzb3VyY2Uubm9kZUluZGV4KCkpOworICAgICAgICBpZiAobm9kZSAmJiBu
b2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBW
YWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSkpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8qIGluZm8g
PSAmZ2VuZXJhdGlvbkluZm9zW3NvdXJjZS5ub2RlSW5kZXgoKSAtIHN0YXJ0SW5kZXhdOworICAg
ICAgICBpZiAoaW5mby0+Zm9ybWF0ID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICAv
LyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29u
dGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBv
c3NpYmlsaXRpZXM6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW50MzJUb0RvdWJs
ZTogV2UgY2FuIHVzZSB0aGlzIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBub2RlLCBidXQKKyAg
ICAgICAgICAgIC8vICAgIHdlJ2QgcmF0aGVyIG5vdDsgc28gd2UgdXNlIGl0IG9ubHkgaWYgaXQg
aXMgdGhlIG9ubHkgcmVtYWluaW5nCisgICAgICAgICAgICAvLyAgICBsaXZlIHZlcnNpb24uCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBJZiB0aGUgb25seSBy
ZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgLy8gICAg
VmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUg
dmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25s
eSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVt
YmVyCisgICAgICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUu
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3Zl
OiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAg
ICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUg
b25seSByZW1haW5pbmcgdXNlcyBvZgorICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3Vs
ZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBn
cmFwaC5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGluZm8gPSAmZ2VuZXJhdGlvbklu
Zm9zW25vZGVJbmRleCAtIHN0YXJ0SW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpbmZvLT5m
b3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkg
eworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBpbnQzMlRvRG91YmxlSW5kZXggPSBOb05vZGU7
CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmRpY2VzT2ZMaXZlVGhpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBpbmRpY2VzT2ZMaXZlVGhpbmdzW2ldOworICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZ3JhcGguYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+aGFzQ2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9
IHNvdXJjZS5ub2RlSW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRleCAtIHN0
YXJ0SW5kZXhdLmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9E
b3VibGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlRvRG91YmxlSW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50
MzJJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eFRvVXNlOworICAgICAgICAgICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRl
eDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUp
CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUp
CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRl
eDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRv
VXNlID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2Rl
SW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9ICZnZW5l
cmF0aW9uSW5mb3Nbbm9kZUluZGV4VG9Vc2UgLSBzdGFydEluZGV4XTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5l
ZCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9u
ZSk7CisgICAgICAgIAorICAgICAgICBpZiAoaW5mby0+ZmlsbGVkKSB7CisgICAgICAgICAgICBp
ZiAoaW5mby0+Zm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvLT51LmZwcik7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgICAgIGlmIChpbmZvLT5mb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAg
ICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIo
aW5mby0+dS50YWdHUFIsIGluZm8tPnUucGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmll
c1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm8tPnUuZ3ByLCBpbmZvLT5mb3JtYXQpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZShpbmZvLT51LnZpcnR1YWxSZWcsIGluZm8tPmZvcm1hdCk7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Zh
cmlhYmxlRXZlbnRTdHJlYW1faAorI2RlZmluZSBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdNaW5pZmllZEdyYXBoLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgor
I2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBw
dWJsaWMgVmVjdG9yPFZhcmlhYmxlRXZlbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlY29uc3Ry
dWN0KAorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBNaW5pZmllZEdyYXBoJiBncmFwaCwKKyAgICAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4m
IG9wZXJhbmRzKSBjb25zdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVFdmVudFN0cmVh
bV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134166</attachid>
            <date>2012-03-27 16:48:43 -0700</date>
            <delta_ts>2012-03-27 17:42:02 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_7.diff</filename>
            <type>text/plain</type>
            <size>137666</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxMi0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXMhIQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bWluaWZpZWRERkcpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhcmlhYmxlRXZlbnRTdHJlYW0pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFUb0ZpdCk6CisgICAgICAgIChERkdEYXRhKToKKyAg
ICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6c2l6
ZSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjphdCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRz
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNWYXJpYWJsZSk6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjphcmd1bWVudEZvckluZGV4KToKKyAgICAgICAgKEpTQzo6
T3BlcmFuZHM6OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6b3Bl
cmFuZEZvckluZGV4KToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbkluZm8uaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2VuZXJhdGlvbkluZm8pOgorICAgICAgICAo
SlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9u
SW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0
Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXREb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0U3RvcmFnZSk6CisgICAg
ICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6dXNl
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c3BpbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzZXRTcGlsbGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEJv
b2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsRG91YmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3JhZ2UpOgorICAgICAg
ICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRGaWxsKToKKyAgICAgICAgKEpTQzo6
REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kU3BpbGwpOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAg
ICAgICAqIGRmZy9ERkdNaW5pZmllZEdyYXBoLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKE1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkR3JhcGg6
Ok1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkR3JhcGg6OmF0KToK
KyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphcHBlbmQpOgorICAgICAgICAoSlND
OjpERkc6Ok1pbmlmaWVkR3JhcGg6OnNocmlua1RvRml0KToKKyAgICAgICAgKiBkZmcvREZHTWlu
aWZpZWROb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUu
aDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmJlbG9uZ3NJbk1p
bmlmaWVkR3JhcGgpOgorICAgICAgICAoTWluaWZpZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpNaW5pZmllZE5vZGU6Ok1pbmlmaWVkTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZp
ZWROb2RlOjpub2RlV2l0aENoaWxkKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6
Om5vZGVXaXRoQ29uc3RhbnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6b3ApOgorICAgICAg
ICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQxKToKKyAgICAgICAgKEpTQzo6REZH
OjpNaW5pZmllZE5vZGU6OmNoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2Rl
OjpoYXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpjb25zdGFu
dE51bWJlcik6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpnZXRJbmRleCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpoYXNDaGlsZCk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWROb2RlOjpoYXNDb25zdGFudE51bWJlcik6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAg
ICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRDb21waWxl
cik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVj
b3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAo
REZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dXNlKToKKyAgICAgICAg
KFNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3Bp
bGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Zm9yd2FyZFNwZWN1bGF0aW9u
Q2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpyZWNvcmRTZXRMb2Nh
bCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmg6IEFkZGVkLgorICAgICAgICAoREZHKToK
KyAgICAgICAgKFZhbHVlUmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFs
dWVSZWNvdmVyeU92ZXJyaWRlOjpWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAqIGRm
Zy9ERkdWYWx1ZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6ZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjp2
YWx1ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OmlzSW5SZWdp
c3RlckZpbGUpOgorICAgICAgICAoVmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlU291cmNlOjpWYWx1ZVNvdXJjZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6
OmZvclByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JEYXRh
Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1
ZVNvdXJjZTo6aXNJblJlZ2lzdGVyRmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3Vy
Y2U6OmRhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjp2YWx1ZVJl
Y292ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAgICog
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
VmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6VmFyaWFi
bGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6cmVzZXQpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpmaWxsRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGls
bCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZGVhdGgpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUV2ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50
OjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojpub2RlSW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmRhdGFGb3JtYXQpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6dGFnR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpwYXls
b2FkR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmcHIpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVFdmVudDo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVFdmVudDo6dmFyaWFibGVSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChN
aW5pZmllZEdlbmVyYXRpb25JbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdlbmVy
YXRpb25JbmZvOjpNaW5pZmllZEdlbmVyYXRpb25JbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZEdlbmVyYXRpb25JbmZvOjp1cGRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChWYXJpYWJsZUV2
ZW50U3RyZWFtKToKKwogMjAxMi0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgogCiAgICAgICAgIERGRyBPU1IgZXhpdCBzaG91bGQgbm90IGdlbmVyYXRlIGFuIGV4aXQgZm9y
IHZhcmlhYmxlcyBvZiBpbmxpbmVlcyBpZiB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzYs
NiArNzYsMTQgQEAKIAkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEz
MTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8q
IERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMkJEQzJD
MTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYy
QkRDNDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzNEMTUyMjgwMTcwMENEODkx
MCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVk
Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ3MTUyMjgwMjUwMENE
ODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdW
YWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3Vy
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJE
QzQwMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
MkJEQzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQyMTUyMjgw
MTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCAqLzsgfTsKKwkJMEYyQkRD
NEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQzMTUyMjgwMTcwMENE
ODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCAq
LzsgfTsKIAkJMEYyQzU1NkYxNDczOEYzMTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3MzhG
MkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0Nv
ZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovOyB9Owog
CQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMx
RjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNzI4LDYgKzczNiwxNCBAQAogCQkwRjJCREMxMzE1MUM1RDRBMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0
aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0luc2VydGlvblNl
dC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWRHcmFwaC5oOyBwYXRo
ID0gZGZnL0RGR01pbmlmaWVkR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZE5vZGUuaDsgcGF0aCA9IGRmZy9ERkdN
aW5pZmllZE5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDM0YxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDsgcGF0aCA9IGRm
Zy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlU291cmNlLmg7IHBhdGggPSBkZmcvREZH
VmFsdWVTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNDExNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHVmFyaWFibGVFdmVudC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNDIxNTIyODAxNzAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA7IHBhdGggPSBkZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDsgcGF0
aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTWluaWZpZWROb2RlLmNwcDsg
cGF0aCA9IGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0Nv
ZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29kZUJsb2Nr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFG
OEYgLyogVmFsdWVSZWNvdmVyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YWx1ZVJlY292ZXJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDA2LDYgKzIw
MjIsOSBAQAogCQkJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQu
aCAqLywKIAkJCQk4NkVDOURCQjEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuY3Bw
ICovLAogCQkJCTg2RUM5REJDMTMyOERGODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5oICov
LAorCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8s
CisJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8s
CisJCQkJMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovLAog
CQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdOb2RlLmggKi8sCiAJCQkJMEZBNTgx
QjcxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgx
NTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLApAQCAtMjAzOCw3ICsyMDU3LDEy
IEBACiAJCQkJODY4ODBGNEMxNDM1M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICov
LAogCQkJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLywKKwkJCQkw
RjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8s
CisJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi8sCiAJ
CQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICov
LAorCQkJCTBGMkJEQzQxMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggKi8s
CisJCQkJMEYyQkRDNDIxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwICovLAorCQkJCTBGMkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggKi8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxS
ZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcy
NTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAogCQkJKTsKQEAg
LTI1MTIsNiArMjUzNiwxMiBAQAogCQkJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAg
LyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkx
MDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJEQzQ1MTUyMjgw
MUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
REM0NjE1MjI4MDIwMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjJCREM0NzE1MjI4MDI1MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFs
dWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0QjE1MjI4MDlE
MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0z
MDcwLDYgKzMxMDAsOCBAQAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBD
YWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTIxNTFDMDgzRDAwNDZE
NEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5
QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
OCArMzgsMTAgQEAKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRG
R0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRG
R01pbmlmaWVkR3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRG
R09TUkV4aXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCiAjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNs
dWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0zMTAsMTMgKzMxMiw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIHRhcmdl
dCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNocmlua1dlYWtSZWZlcmVu
Y2VzVG9GaXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2Vz
LnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5k
V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20s
IEpTQ2VsbCogdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vz
c2FyeSgpOwpAQCAtMzI0LDExICszMTksMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRh
YmxlKCksIGNvZGVPcmlnaW4sIGZyb20sIHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIHZvaWQgc2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRpb25zVG9GaXQoKQorICAgICAgICBE
Rkc6Ok1pbmlmaWVkR3JhcGgmIG1pbmlmaWVkREZHKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Y3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRh
LT5taW5pZmllZERGRzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHOjpWYXJpYWJs
ZUV2ZW50U3RyZWFtJiB2YXJpYWJsZUV2ZW50U3RyZWFtKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdE
YXRhLT52YXJpYWJsZUV2ZW50U3RyZWFtOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIHNocmlua0RGR0RhdGFUb0ZpdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9k
ZmdEYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+
d2Vha1JlZmVyZW5jZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgICAgIG1fZGZnRGF0YS0+dHJh
bnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+bWluaWZpZWRE
Rkcuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+dmFyaWFibGVFdmVudFN0
cmVhbS5zaHJpbmtUb0ZpdCgpOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTE4Niw2ICsxMTk2
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlv
blJlY292ZXJ5PiBzcGVjdWxhdGlvblJlY292ZXJ5OwogICAgICAgICAgICAgVmVjdG9yPFdlYWtS
ZWZlcmVuY2VUcmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICAgICAgICAgIFZlY3RvcjxXcml0
ZUJhcnJpZXI8SlNDZWxsPiA+IHdlYWtSZWZlcmVuY2VzOworICAgICAgICAgICAgREZHOjpWYXJp
YWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CisgICAgICAgICAgICBERkc6Ok1p
bmlmaWVkR3JhcGggbWluaWZpZWRERkc7CiAgICAgICAgICAgICBib29sIG1heUJlRXhlY3V0aW5n
OwogICAgICAgICAgICAgYm9vbCBpc0pldHRpc29uZWQ7CiAgICAgICAgICAgICBib29sIGxpdmVu
ZXNzSGFzQmVlblByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24g
MTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsMzkgQEAgcHVibGljOgogICAgICAgICBzZXRMb2Nh
bChvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBj
b25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
PCBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2lu
ZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMo
KV07CisgICAgfQorICAgIFQmIGF0KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaW5kZXggLSBudW1iZXJPZkFyZ3Vt
ZW50cygpXTsKKyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKTsgfQorICAgIGJv
b2wgaXNWYXJpYWJsZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGlu
ZGV4KTsgfQorICAgIGludCBhcmd1bWVudEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5k
ZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9h
cmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRz
KCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRUb09wZXJhbmQoaW5kZXgpOworICAgICAg
ICByZXR1cm4gaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpOworICAgIH0KKyAgICAKICAgICB2
b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dl
bmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVy
LmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCIKICNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVkZSA8ZGZnL0RG
R0pJVENvbXBpbGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAt
NTAsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1hdChEYXRhRm9y
bWF0Tm9uZSkKICAgICAgICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAg
ICAsIG1fY2FuRmlsbChmYWxzZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFsc2UpCiAgICAg
ewogICAgIH0KIApAQCAtNjAsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJG
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3Jt
YXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jvcm5Gb3JPU1Ig
PSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGlu
aXRJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcg
Z3ByKQpAQCAtNzAsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3By
ID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1f
dXNlQ291bnQpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODMsNiArODgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAg
bV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5G
b3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCkBAIC05Nyw2ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
Y2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwogICAgICAgICB1
LnYucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNl
OwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDgsNiAr
MTE1LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7
CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAg
ICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAg
ICB9CiAgICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1
c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTExOCw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFs
c2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsK
ICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXREb3VibGUo
Tm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCkBAIC0x
MjksNiArMTM4LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1h
dE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsK
KyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50
KTsKICAgICB9CiAgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50
MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTEzOSwxOSArMTQ5LDQ0IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZp
bGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9
IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAgICAgLy8gR2V0
IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAgCisgICAgYm9v
bCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgbV9ib3JuRm9yT1NS
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKSB7CisgICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9GaWxsLCBzdHJlYW0p
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgYXBwZW5k
U3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KIAogICAgIC8vIE1hcmsgdGhlIHZhbHVlIGFzIGhhdmluZyBiZWVu
IHVzZWQgKGRlY3JlbWVudCB0aGUgdXNlQ291bnQpLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIHdhcyB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZhbHVlLCBhbmQgYW55CiAgICAgLy8gYXNzb2Np
YXRlZCBtYWNoaW5lIHJlZ2lzdGVycyBtYXkgYmUgZnJlZWQuCi0gICAgYm9vbCB1c2UoKQorICAg
IGJvb2wgdXNlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkKICAgICB7CiAgICAgICAgIEFT
U0VSVChtX3VzZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICEtLW1fdXNlQ291bnQ7CisgICAgICAg
IGJvb2wgcmVzdWx0ID0gIS0tbV91c2VDb3VudDsKKyAgICAgICAgCisgICAgICAgIGlmIChyZXN1
bHQgJiYgbV9ib3JuRm9yT1NSKSB7CisgICAgICAgICAgICBBU1NFUlQobV9ub2RlSW5kZXggIT0g
Tm9Ob2RlKTsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6ZGVhdGgo
bV9ub2RlSW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNoZWNrIHRoZSBvcGVyYW5kcyBvZiBvcGVyYXRp
b25zIHRvIHNlZSBpZiB0aGV5IGFyZSBvbgpAQCAtMjI0LDcgKzI1OSw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhIFZpcnR1YWxSZWdpc3RlciBpcyBiZWluZyBzcGls
bGVkIHRvIHRoZSBSZWdpc3RlckZpbGUgZm9yIHRoZSBmaXJzdCB0aW1lLgotICAgIHZvaWQgc3Bp
bGwoRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCkKKyAgICB2b2lkIHNwaWxsKFZhcmlhYmxlRXZlbnRT
dHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1h
dCBzcGlsbEZvcm1hdCkKICAgICB7CiAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBiZSBzcGlsbCB2
YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLgogICAgICAgICBBU1NFUlQoIW1fY2FuRmls
bCk7CkBAIC0yMzUsMTUgKzI3MCwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3Jt
YXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0
OwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9y
bkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZFNwaWxsKFNwaWxsLCBzdHJlYW0sIHZpcnR1YWxS
ZWdpc3Rlcik7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIG9uIHZhbHVlcyB0aGF0IGRvbid0IG5l
ZWQgc3BpbGxpbmcgKGNvbnN0YW50cyBhbmQgdmFsdWVzIHRoYXQgaGF2ZQogICAgIC8vIGFscmVh
ZHkgYmVlbiBzcGlsbGVkKSwgdG8gbWFyayB0aGVtIGFzIG5vIGxvbmdlciBiZWluZyBpbiBtYWNo
aW5lIHJlZ2lzdGVycy4KLSAgICB2b2lkIHNldFNwaWxsZWQoKQorICAgIHZvaWQgc2V0U3BpbGxl
ZChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIpCiAgICAgewogICAgICAgICAvLyBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdmFsdWVz
IHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywgYW5kIGFyZSBjdXJyZW50bHkgaW4gcmVnaXN0ZXJz
LgogICAgICAgICBBU1NFUlQobV9jYW5GaWxsICYmIG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZv
cm1hdE5vbmUpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kU3Bp
bGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBraWxsU3BpbGxlZCgpCkBAIC0yNTUsNDYgKzI5Niw2NyBAQCBwdWJsaWM6CiAgICAgLy8gUmVj
b3JkIHRoYXQgdGhpcyB2YWx1ZSBpcyBmaWxsZWQgaW50byBtYWNoaW5lIHJlZ2lzdGVycywKICAg
ICAvLyB0cmFja2luZyB3aGljaCByZWdpc3RlcnMsIGFuZCB3aGF0IGZvcm1hdCB0aGUgdmFsdWUg
aGFzLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBmaWxsSlNWYWx1ZShHUFJSZWcgZ3By
LCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lkIGZpbGxKU1ZhbHVl
KFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBmb3Jt
YXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAgICAgdS5n
cHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAg
ICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgdm9pZCBmaWxsSlNWYWx1ZShHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQ
UiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCisgICAgdm9pZCBmaWxsSlNWYWx1
ZShWYXJpYWJsRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxv
YWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBmb3JtYXQ7CiAgICAgICAgIHUudi50YWdHUFIgPSB0YWdHUFI7IC8vIEZJWE1FOiBmb3IgSlNW
YWx1ZXMgd2l0aCBrbm93biB0eXBlIChib29sZWFuLCBpbnRlZ2VyLCBjZWxsIGV0Yy4pIG5vIHRh
Z0dQUiBpcyBuZWVkZWQ/CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxs
KEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmlsbENlbGwoR1BSUmVnIGdwcikKKyAg
ICB2b2lkIGZpbGxDZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikK
ICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Q2VsbDsKICAgICAg
ICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAg
ICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNlbmRpZgotICAgIHZv
aWQgZmlsbEludGVnZXIoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxJbnRlZ2VyKFZhcmlhYmxl
RXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAg
ICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChG
aWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxCb29sZWFuKEdQUlJlZyBncHIpCisg
ICAgdm9pZCBmaWxsQm9vbGVhbihWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBn
cHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEJvb2xlYW47
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9T
UikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9p
ZCBmaWxsRG91YmxlKEZQUlJlZyBmcHIpCisgICAgdm9pZCBmaWxsRG91YmxlKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIg
IT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0
RG91YmxlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jv
cm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQot
ICAgIHZvaWQgZmlsbFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxTdG9yYWdlKFZh
cmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1f
cmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAgdS5ncHIgPSBncHI7
CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5k
RmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUoKQpAQCAtMzAzLDEy
ICszNjUsMzMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVuZEZp
bGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkg
eworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZChWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKGtpbmQs
IG1fbm9kZUluZGV4LCB1LmZwcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpIHsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmQoVmFyaWFibGVFdmVudDo6Zmls
bFBhaXIoa2luZCwgbV9ub2RlSW5kZXgsIHUucGFpci50YWdHUFIsIHUucGFpci5wYXlsb2FkR1BS
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzdHJl
YW0uYXBwZW5kKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIoa2luZCwgbV9ub2RlSW5kZXgsIHUuZ3By
LCBtX3JlZ2lzdGVyRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kU3BpbGwo
VmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgc3RyZWFtLmFwcGVu
ZChWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5kLCBtX25vZGVJbmRleCwgdmlydHVhbFJlZ2lzdGVy
LCBtX3NwaWxsRm9ybWF0KSk7CisgICAgfQorICAgIAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUg
bm9kZSB3aG9zZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgdmlydHVhbCByZWdpc3Rlci4KICAg
ICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiAgICAgdWludDMyX3QgbV91c2VDb3VudDsKICAgICBE
YXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7CiAgICAgRGF0YUZvcm1hdCBtX3NwaWxsRm9ybWF0
OwogICAgIGJvb2wgbV9jYW5GaWxsOworICAgIGJvb2wgbV9ib3JuRm9yT1NSOwogICAgIHVuaW9u
IHsKICAgICAgICAgR1BSUmVnIGdwcjsKICAgICAgICAgRlBSUmVnIGZwcjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTIz
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkxLDggKzE5MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlu
a0J1ZmZlciYgbGlua0IKICAgICAgICAgZXhpdC5tX2NoZWNrLmNvcnJlY3RMYXRlSnVtcChsaW5r
QnVmZmVyKTsKICAgICB9CiAgICAgCi0gICAgY29kZUJsb2NrKCktPnNocmlua1dlYWtSZWZlcmVu
Y2VzVG9GaXQoKTsKLSAgICBjb2RlQmxvY2soKS0+c2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRp
b25zVG9GaXQoKTsKKyAgICBjb2RlQmxvY2soKS0+c2hyaW5rREZHRGF0YVRvRml0KCk7CiB9CiAK
IGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHTWluaWZpZWRHcmFwaF9oCisjZGVmaW5lIERGR01pbmlmaWVk
R3JhcGhfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR01pbmlmaWVkTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworY2xhc3MgTWluaWZpZWRHcmFwaCB7CitwdWJsaWM6CisgICAgTWluaWZp
ZWRHcmFwaCgpIHsgfQorCisgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2Vh
cmNoPE1pbmlmaWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKKyAg
ICAgICAgICAgICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBX
VEY6OktleU11c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5pbmRl
eCgpICE9IG5vZGVJbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
ZW50cnk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1pbmlmaWVkTm9kZSYg
bm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9saXN0LnNpemUoKSB8fCBub2RlLmluZGV4
KCkgPiBtX2xpc3QubGFzdCgpLmluZGV4KCkpOworICAgICAgICBtX2xpc3QuYXBwZW5kKG5vZGUp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAgIG1f
bGlzdC5zaHJpbmtUb0ZpdCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8TWluaWZp
ZWROb2RlPiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR01pbmlmaWVkR3JhcGhfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdNaW5pZmllZE5vZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Tm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK01pbmlmaWVkTm9k
ZSBNaW5pZmllZE5vZGU6OmZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUp
Cit7CisgICAgaWYgKGhhc0NoaWxkKG5vZGUub3AoKSkpCisgICAgICAgIHJldHVybiBub2RlV2l0
aENoaWxkKG5vZGVJbmRleCwgbm9kZS5vcCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAg
IAorICAgIHJldHVybiBub2RlV2l0aENvbnN0YW50TnVtYmVyKG5vZGVJbmRleCwgbm9kZS5vcCgp
LCBub2RlLmNvbnN0YW50TnVtYmVyKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdNaW5pZmllZE5vZGVfaAorI2RlZmluZSBERkdNaW5pZmllZE5vZGVfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGU7CisKK2lubGluZSBib29sIGJlbG9uZ3NJ
bk1pbmlmaWVkR3JhcGgoTm9kZVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBJbnQz
MlRvRG91YmxlOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2NsYXNz
IE1pbmlmaWVkTm9kZSB7CitwdWJsaWM6CisgICAgTWluaWZpZWROb2RlKCkgeyB9CisgICAgCisg
ICAgc3RhdGljIE1pbmlmaWVkTm9kZSBub2RlV2l0aENoaWxkKE5vZGVJbmRleCBpbmRleCwgTm9k
ZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDaGls
ZChvcCkpOworICAgICAgICBNaW5pZmllZE5vZGUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9p
bmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9vcCA9IG9wOworICAgICAgICByZXN1bHQu
bV9jaGlsZE9ySW5mbyA9IGNoaWxkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgTWluaWZpZWROb2RlIG5vZGVXaXRoQ29uc3RhbnROdW1iZXIoTm9kZUlu
ZGV4IGluZGV4LCBOb2RlVHlwZSBvcCwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnROdW1iZXIob3ApKTsKKyAgICAgICAgTWluaWZpZWRO
b2RlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fb3AgPSBvcDsKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPckluZm8gPSBjb25zdGFudE51
bWJlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE1p
bmlmaWVkTm9kZSBmcm9tTm9kZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2RlKTsKKyAg
ICAKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
Tm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgCisgICAgYm9vbCBoYXND
aGlsZDEoKSBjb25zdCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQorICAgIAorICAgIE5vZGVJ
bmRleCBjaGlsZDEoKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChoYXNDaGlsZChtX29wKSk7Cisg
ICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7IH0KKyAgICAK
KyAgICB1bnNpZ25lZCBjb25zdGFudE51bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaGFzQ29uc3RhbnROdW1iZXIobV9vcCkpOworICAgICAgICByZXR1cm4gbV9jaGlsZE9ySW5m
bzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE5vZGVJbmRleCBnZXRJbmRleChNaW5pZmllZE5v
ZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAg
c3RhdGljIGJvb2wgaGFzQ2hpbGQoTm9kZVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBJbnQz
MlRvRG91YmxlOgorICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgc3RhdGljIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoTm9kZVR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlID09IEpTQ29uc3RhbnQ7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGVUeXBlIG1fb3A7CisgICAg
dW5zaWduZWQgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdyYXBoIGhh
dmUgb25seSBvbmUgY2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZpZWROb2Rl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMjMy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNl
dC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVOdW1WYXJpYWJsZXNG
b3JDb2RlT3JpZ2luKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgIHJldHVybiBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAgIHJldHVy
bgotICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotfQotCi1PU1JFeGl0OjpPU1JFeGl0
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNr
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorT1NSRXhpdDo6
T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2ln
bmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkK
ICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fY2hlY2soY2hlY2sp
CkBAIC01MiwyNCArNDIsMTAgQEAgT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1Zh
bHVlUwogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX2tpbmQo
a2luZCkKICAgICAsIG1fY291bnQoMCkKLSAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVu
dHMuc2l6ZSgpKQotICAgICwgbV92YXJpYWJsZXMoY29tcHV0ZU51bVZhcmlhYmxlc0ZvckNvZGVP
cmlnaW4oaml0LT5tX2ppdC5ncmFwaCgpLm1fcHJvZmlsZWRCbG9jaywgaml0LT5tX2NvZGVPcmln
aW5Gb3JPU1IpKQorICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKICAgICAsIG1fbGFz
dFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewogICAgIEFTU0VSVChtX2NvZGVP
cmlnaW4uaXNTZXQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1th
cmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNb
YXJndW1lbnRdKTsKLSAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBt
X3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCi0gICAgICAgIG1fdmFyaWFibGVzW3Zhcmlh
YmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJp
YWJsZV0pOwotfQotCi12b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUo
KTsgKythcmd1bWVudCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdLmR1bXAob3V0KTsK
LSAgICBmcHJpbnRmKG91dCwgIiA6ICIpOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAw
OyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92
YXJpYWJsZXNbdmFyaWFibGVdLmR1bXAob3V0KTsKIH0KIAogYm9vbCBPU1JFeGl0Ojpjb25zaWRl
ckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNs
dWRlICJERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxl
LmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlP
dmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCkBAIC04Myw3
ICs4NCw3IEBAIHByaXZhdGU6CiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4
aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4K
IHN0cnVjdCBPU1JFeGl0IHsKLSAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3Vs
YXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAgT1NSRXhpdChFeGl0
S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbV9jb2RlOwogICAgIApAQCAtOTksMzggKzEwMCw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAg
ICBFeGl0S2luZCBtX2tpbmQ7CiAgICAgdWludDMyX3QgbV9jb3VudDsKICAgICAKLSAgICAvLyBD
b252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVp
bmcKLSAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxlLgotICAgIGlu
dCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkg
KyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KLSAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQp
bV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4
XTsKLSAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
XTsKLSAgICB9Ci0gICAgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeUZvck9wZXJhbmQoaW50
IG9wZXJhbmQpCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
Ci0gICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbb3BlcmFuZFRvQXJndW1lbnQob3BlcmFu
ZCldOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07Ci0gICAgfQotICAgIGJv
b2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2Fy
Z3VtZW50cy5zaXplKCk7IH0KLSAgICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7
IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgYXJndW1lbnRGb3JJbmRleChp
bnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAg
IGludCB2YXJpYWJsZUZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgaW50IG9wZXJhbmRG
b3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAoaW50
KW1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVu
dChpbmRleCk7Ci0gICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAg
ICB9Ci0gICAgCiAgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7
CiAgICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQpA
QCAtMTM4LDExICsxMDcsMTAgQEAgc3RydWN0IE9TUkV4aXQgewogICAgICAgICByZXR1cm4gY29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRD
b2RlQmxvY2spOwogICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsK
LSAgICAKLSAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7Ci0gICAgVmVj
dG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIHVuc2lnbmVkIG1fc3RyZWFt
SW5kZXg7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgCisgICAgUmVmUHRyPFZhbHVl
UmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBk
ZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJl
dmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQor
dm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNv
bnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIgLT4gJXAgIiwgY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBkYXRhTG9n
KCIpICAiKTsKLSAgICBleGl0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkdW1wT3BlcmFu
ZHMob3BlcmFuZHMsIG91dCk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VM
QVRJT05fRkFJTFVSRSkKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5m
byA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CkBAIC0xMTAsNyArMTEwLDcgQEAg
dm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkg
Y29uc3RhbnRzLAogICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMs
IGFuZCBhbnkgdW5ib3hlZCBpbnRzLgogICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJvb2w+IHBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgVmVj
dG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJPZkxvY2Fs
cygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBm
YWxzZTsKIApAQCAtMTI4LDggKzEyOCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKICAgICBib29sIGhh
dmVVSW50MzJzID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07
CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJ
bnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ0LDggKzE0NCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlzIGhhcHBl
bnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAgICAgICAg
ICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVkIGZvciB0
aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBlbi4KLSAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhpdC5tX3Zh
cmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92YXJpYWJs
ZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAg
ICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm51bWJlck9m
TG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2FsKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNh
c2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKICAgICAg
ICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgpAQCAtMjE4LDggKzIxOCw4IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA1KSBQZXJmb3JtIGFsbCBy
ZWJveGluZyBvZiBpbnRlZ2Vycy4KICAgICAKICAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMgfHwg
aGF2ZVVJbnQzMnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgICAgIGlmIChyZWNv
dmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGVB
c1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVtYmVyID4+
IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBVSW50MzJJbkdQUjogewpAQCAtMjc4LDE5ICsyNzgsMTkgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJzIGRvIG5v
dCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhwZWN0IHRo
YXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQgbGVhc3Qg
b25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFsaXplUG9p
c29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lzb25lZChv
cGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9pc29uSW5k
ZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50IG9wZXJh
bmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAgaW50IG9w
ZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgIGNh
c2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0gICAgICAg
ICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgIGlmIChvcGVy
YW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFu
ZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgp
OwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZv
ckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9w
b2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBj
dXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNv
dmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZCkpOwpAQCAtMzA1LDggKzMwNSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICBpZiAoaGF2ZUZQUnMpIHsKICAgICAgICAgLy8gNykgQm94IGFs
bCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKICAg
ICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwog
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigp
OwpAQCAtMzE3LDE3ICszMTcsMTcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVy
IGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKICAgICAgICAgLy8gICAgdGhlIGRl
c3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCiAgICAgICAgIAotICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86
OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFi
bGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgp
ICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGlu
ZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0Y2hCdWZm
ZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRj
aEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5k
ZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAg
ICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKGdwciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMzM1LDEzICszMzUsMTMgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDkpIEJveCBhbGwgdW5ib3hlZCBkb3Vi
bGVzIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgIGlmIChoYXZlVW5ib3hlZERvdWJsZXMpIHsK
LSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkRG91YmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUkluZm86OmZw
UmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVy
YW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBA
IC0zNTcsOCArMzU3LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgogICAgICAgICAK
ICAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAg
ICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFs
UmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOwpA
QCAtMzg0LDEzICszODQsMTMgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNlbWVudElu
ZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
b3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgog
ICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAg
ICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcill
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQxNiw4ICs0MTYsOCBAQCB2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAvLyB0
byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KICAgICAgICAgCiAgICAgICAgICAgICB1
bnNpZ25lZCBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsK
LSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgewor
ICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNb
aW5kZXhdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zl
cnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOgpAQCAtNDQ1LDE0ICs0NDUsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIHNjcmF0
Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBJ
bnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVn
VDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00NjcsMTEg
KzQ2NywxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ly8gMTEpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAgIAogICAgIGlm
IChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAgICAgICBmb3IgKGludCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJs
ZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFs
UmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KW9wZXJhbmRzLm51bWJlck9mTG9j
YWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CiAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmly
dHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwodmlydHVhbFJlZ2lzdGVy
KTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgpAQCAt
NDk0LDE0ICs0OTQsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IAogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShp
bmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IENvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
aWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNv
bnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAg
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMs
MTYgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAt
PmppdENvbXBpbGUoKmdsb2JhbERhdGEpOwogICAgIH0KICAgICAKKyAgICAvLyBDb21wdXRlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRz
OworICAgIGNvZGVCbG9jay0+dmFyaWFibGVFdmVudFN0cmVhbSgpLnJlY29uc3RydWN0KGNvZGVC
bG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+bWluaWZpZWRERkcoKSwgZXhpdC5t
X3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CisgICAgCisgICAgLy8gVGhlcmUgbWF5IGJlIGFuIG92
ZXJyaWRlLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCisgICAgaWYgKCEhZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZSkgeworICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAorICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQog
ICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5t
X3JlY292ZXJ5SW5kZXggLSAxKTsKQEAgLTc1LDcgKzg1LDcgQEAgdm9pZCBjb21waWxlT1NSRXhp
dChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIEFzc2VtYmx5SGVscGVycyBqaXQoZ2xvYmFsRGF0
YSwgY29kZUJsb2NrKTsKICAgICAgICAgT1NSRXhpdENvbXBpbGVyIGV4aXRDb21waWxlcihqaXQp
OwogICAgICAgICAKLSAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIHJlY292
ZXJ5KTsKKyAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIG9wZXJhbmRzLCBy
ZWNvdmVyeSk7CiAgICAgICAgIAogICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9i
YWxEYXRhLCAmaml0LCBjb2RlQmxvY2spOwogICAgICAgICBleGl0Lm1fY29kZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUV4
aXQoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKyAgICB2b2lkIGNvbXBp
bGVFeGl0KGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYsIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqKTsKIAogcHJpdmF0ZToKICNpZiAhQVNTRVJUX0RJU0FCTEVECklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CiAgICAgICAgIH0KIAotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICByZXR1cm5Gb3Jt
YXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC05
MCw3ICs5MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5
bG9hZEdQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgIGluZm8uZmlsbEludGVnZXIocGF5bG9h
ZEdQUik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsK
ICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHJldHVy
biBwYXlsb2FkR1BSOwogICAgIH0KQEAgLTEyMiwxMyArMTIyLDEzIEBAIEZQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1
bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChu
b2RlSW5kZXgpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmls
bERvdWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwpAQCAt
MTQxLDcgKzE0MSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4K
ICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZw
cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KIApAQCAtMTYx
LDcgKzE2MSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAg
ICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKIAogICAgICAgICAg
ICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQp
OwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICBpbmZvLmZp
bGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAg
ICAgfQogICAgIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxEb3VibGUoTm9kZUluCiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAg
bV9ncHJzLnVubG9jayhwYXlsb2FkR1BSKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgIGluZm8uZmlsbERvdWJs
ZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAg
ICBpbmZvLmtpbGxTcGlsbGVkKCk7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQpAQCAtMjUx
LDcgKzI1MSw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAg
ICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KS5w
YXlsb2FkKCkpLCBwYXlsb2FkR1BSKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BS
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50
KTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBpc0lu
dDMyQ29uc3RhbnQobm9kZUluZGV4KSA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRhRm9ybWF0
SlMpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5
bG9hZEdQUiwgaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgPyBEYXRhRm9ybWF0SlNJbnRlZ2Vy
IDogRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERhdGFGb3Jt
YXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAgICAgICAgICBBU1NFUlQo
c3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1h
dFN0b3JhZ2UpOwpAQCAtMjc3LDcgKzI3Nyw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxK
U1ZhbHVlKE5vZGVJbmQKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBwYXlsb2FkR1BSKTsKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5
bG9hZEdQUiwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlID8gRGF0YUZvcm1hdEpT
IDogc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IHRhZ0dQUiwgcGF5bG9hZEdQUiwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlID8g
RGF0YUZvcm1hdEpTIDogc3BpbGxGb3JtYXQpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0zMTksNyArMzE5LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUoTm9kZUluZAogICAgICAgICBtX2dwcnMucmVsZWFzZShncHIpOwogICAgICAgICBtX2dwcnMu
cmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBt
X2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsK
LSAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxGb3JtYXQp
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BS
LCBmaWxsRm9ybWF0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zMzQsNyAr
MzM0LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAg
ICBtX2ZwcnMucmVsZWFzZShvbGRGUFIpOwogICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKHBh
eWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKLSAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTAwNCw3ICsxMDA0LDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgR1BS
UmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1h
dCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAg
fQpAQCAtMTAxOSw3ICsxMDE5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGls
bGVkKTsKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1h
dEludGVnZXI7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTAzNyw3ICsxMDM3LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBtX2dw
cnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsK
ICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsKKyAg
ICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAgICAv
LyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHJldHVybiBwYXlsb2FkR1BSOwpAQCAtMTA5OCwx
MyArMTA5OCwxMyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAg
ICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZp
bGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSwgZnByKTsKICAgICAgICAgICAg
ICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAg
ICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZwcjsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMTExNSw3ICsxMTE1LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0
ZSgpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0
YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91
YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAg
ICAgICAgfQogCkBAIC0xMTM3LDcgKzExMzcsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaGFzVW5ib3hlZERvdWJsZS5saW5rKCZt
X2ppdCk7CiAKICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwor
ICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTczLDcgKzExNzMsNyBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy51bmxv
Y2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhwYXlsb2FkR1BSKTsKICAgICAgICAg
bV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0g
ICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7CiAgICAgICAgIHJldHVy
biBmcHI7CiAgICAgfQpAQCAtMTIzMCw3ICsxMjMwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihqc1ZhbHVlLmFzQ2VsbCgpKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmls
bENlbGwoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbENlbGwoKm1fc3RyZWFtLCBncHIpOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogCkBAIC0xMjQwLDcgKzEyNDAsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBpbmZvLmZp
bGxDZWxsKGdwcik7CisgICAgICAgIGluZm8uZmlsbENlbGwoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTI2Miw3ICsxMjYyLDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dwcnMucmVsZWFzZSh0
YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKICAgICAgICAgbV9n
cHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDZWxsKTsK
LSAgICAgICAgaW5mby5maWxsQ2VsbChwYXlsb2FkR1BSKTsKKyAgICAgICAgaW5mby5maWxsQ2Vs
bCgqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAgICByZXR1cm4gcGF5bG9hZEdQUjsKICAg
ICB9CiAKQEAgLTEzMDMsNyArMTMwMyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0
YW50KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mihqc1ZhbHVlLmFzQm9vbGVhbigpKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEJvb2xl
YW4oZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEJvb2xlYW4oKm1fc3RyZWFtLCBncHIpOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogCkBAIC0xMzE1LDcgKzEzMTUsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBpbmZvLmZp
bGxCb29sZWFuKGdwcik7CisgICAgICAgIGluZm8uZmlsbEJvb2xlYW4oKm1fc3RyZWFtLCBncHIp
OwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTMzOCw3ICsxMzM4LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2dwcnMucmVs
ZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKICAgICAg
ICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJC
b29sZWFuKTsKLSAgICAgICAgaW5mby5maWxsQm9vbGVhbihwYXlsb2FkR1BSKTsKKyAgICAgICAg
aW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAgICByZXR1cm4g
cGF5bG9hZEdQUjsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5v
ZGVJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIo
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7Ci0gICAgICAgICAgICAgICAg
aW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIo
Km1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3Jt
YXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CkBA
IC03Myw3ICs3Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkK
ICAgICAgICAgLy8gU2luY2Ugd2Ugc3RhdGljYWxseSBrbm93IHRoYXQgd2UncmUgZmlsbGluZyBh
biBpbnRlZ2VyLCBhbmQgdmFsdWVzCiAgICAgICAgIC8vIGluIHRoZSBSZWdpc3RlckZpbGUgYXJl
IGJveGVkLCB0aGlzIG11c3QgYmUgRGF0YUZvcm1hdEpTSW50ZWdlci4KICAgICAgICAgLy8gV2Ug
d2lsbCBjaGVjayB0aGlzIHdpdGggYSBqaXRBc3NlcnQgYmVsb3cuCi0gICAgICAgIGluZm8uZmls
bEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIHVubG9j
ayhncHIpOwogICAgIH0KIApAQCAtMTI2LDcgKzEyNiw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5v
dCBiZSByZWFjaGFibGU/CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAgICAgICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNv
bnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAg
ICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAg
ICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQo
bm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgp
OwpAQCAtMTM1LDcgKzEzNSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShO
b2RlSW4KICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8u
ZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBu
b3QgYmUgcmVhY2hhYmxlPwpAQCAtMTQzLDcgKzE0Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwg
Z3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Z3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CkBAIC0xNTMsNyArMTUzLDcgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAg
ICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xNjIsNyAr
MTYyLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxs
SW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzMsNyArMTczLDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAg
IEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAg
ICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVh
bFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
c3BpbGxGb3JtYXQpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIxNSw3ICsyMTUsNyBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIG1fZ3Bycy51bmxv
Y2soanNWYWx1ZUdwcik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiAgICAgICAg
IG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwot
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCpt
X3N0cmVhbSwgZnByKTsKICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICByZXR1
cm4gZnByOwogICAgIH0KQEAgLTI0Niw3ICsyNDYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAg
IG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwog
Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUo
Km1fc3RyZWFtLCBmcHIpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KIApAQCAtMjczLDE4
ICsyNzMsMTggQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogCiAg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Z3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZO
dW1iZXJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChu
b2RlSW5kZXgpKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBz
cGlsbEZvcm1hdCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0z
MjAsNyArMzIwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQog
ICAgICAgICB9CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIG1faml0Lm9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKLSAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgcmV0dXJu
IGdwcjsKICAgICB9CiAKQEAgLTMyOSw3ICszMjksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIEdQUlJlZyBncHIgPSBib3hEb3VibGUoZnByKTsK
IAogICAgICAgICAvLyBVcGRhdGUgYWxsIGluZm8KLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgIG1fZnBycy5yZWxlYXNlKGZw
cik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3Jk
ZXJKUyk7CiAKQEAgLTEwMTYsNyArMTAxNiw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNv
bnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7Ci0gICAgICAg
ICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2Vy
KCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJ
bnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQpAQCAtMTAzMSw3ICsx
MDMxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAg
ICAgICAgLy8gSWYgd2Uga25vdyB0aGlzIHdhcyBzcGlsbGVkIGFzIGFuIGludGVnZXIgd2UgY2Fu
IGZpbGwgd2l0aG91dCBjaGVja2luZy4KICAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKICAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7Cisg
ICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KQEAgLTEwNDAsMTQgKzEwNDAsMTQgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZ3ByKTsKICAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAg
cmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBn
cHI7CiAgICAgICAgIH0KICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogCiAgICAgICAgIC8vIEZpbGwgYXMgSlNWYWx1
ZSwgYW5kIGZhbGwgdGhyb3VnaC4KLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0ludGVnZXIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3By
LCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwogICAg
IH0KIApAQCAtMTA1Niw3ICsxMDU2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SQogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9n
cHJzLmxvY2soZ3ByKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVs
b3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIC8v
IElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICBpZiAoIXN0cmljdCkgewog
ICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEpTSW50ZWdlcjsKQEAgLTEwNzcs
NyArMTA3Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZp
bGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZ3ByOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHQpOwpAQCAtMTE1
OCw3ICsxMTU4LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91Ygog
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJl
dGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91
YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewpA
QCAtMTE2OCw3ICsxMTY4LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
RG91YgogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9m
cHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAg
ICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CkBAIC0xMTgxLDcgKzExODEsNyBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICBpbmZvLmZp
bGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAg
ICAgfQogICAgICAgICAgICAgCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAg
ICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICB1bmxvY2so
Z3ByKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjAxLDcgKzEyMDEsNyBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICBB
U1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsK
KyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0
KTsKICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTEyNDMsNyArMTI0Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgbV9ncHJzLnVubG9jayhqc1ZhbHVlR3ByKTsKICAgICAgICAgbV9n
cHJzLnVubG9jayh0ZW1wR3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIp
OworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICBpbmZv
LmtpbGxTcGlsbGVkKCk7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQpAQCAtMTI3NCw3ICsx
Mjc0LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAg
ICBtX2dwcnMucmVsZWFzZShncHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKIAotICAgICAgICBpbmZvLmZpbGxEb3VibGUo
ZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAg
cmV0dXJuIGZwcjsKICAgICB9CiAKQEAgLTEzMTIsNyArMTMxMiw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2Vs
bCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlND
ZWxsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CkBAIC0xMzIyLDEwICsxMzIyLDEwIEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKLSAgICAgICAg
aW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNw
aWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlcikpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7
CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Nl
bGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTM0MCw3ICsxMzQwLDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcg
Z3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0
SlNDZWxsKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xMzg1LDcgKzEz
ODUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAg
ICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CkBA
IC0xMzk1LDEzICsxMzk1LDEzIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUJvb2wKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdEpTQm9vbGVhbikgewogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVh
blNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSks
IGdwcik7CiAgICAgICAgIH0KLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTE0
MTgsNyArMTQxOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wK
ICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwog
ICAgIH0KIApAQCAtMTg0Niw3ICsxODQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBs
b25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAgICAgICAg
IC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRp
b25zIGluIHRoZSByZWdpc3RlciBmaWxlLAogICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGF0IGl0
IGlzIHN0b3JlZCBhcyBhIGRvdWJsZS4KLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0
ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZh
bHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIApAQCAtMTg1NSw3ICsxODU1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5v
ZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2Nh
bCgpKSA9IFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAg
IHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVy
RmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xODY1LDcgKzE4
NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQ
UiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zm
c2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNBcnJheTo6c19pbmZvKSkp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJh
bmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7CisgICAg
ICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxs
SW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsK
QEAgLTE4NzUsMTQgKzE4NzUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0Nl
bGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpT
Qnl0ZUFycmF5OjpzX2luZm8pKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2Vs
bEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbElu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFu
ZCBib29sZWFuKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGJvb2xlYW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwo
KSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTg5MSw3ICsxODkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
IAotICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZWNvcmRTZXRMb2Nh
bChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorU3BlY3Vs
YXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCisgICAgOiBtX2NvbXBp
bGVPa2F5KHRydWUpCisgICAgLCBtX2ppdChqaXQpCisgICAgLCBtX2NvbXBpbGVJbmRleCgwKQor
ICAgICwgbV9pbmRleEluQmxvY2soMCkKKyAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuY29k
ZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQorICAgICwgbV9ibG9ja0hlYWRzKGppdC5n
cmFwaCgpLm1fYmxvY2tzLnNpemUoKSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpKQorICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2Nh
bFZhcnMpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpCisgICAgLCBtX3N0YXRlKGppdC5ncmFwaCgpKQorICAgICwgbV9zdHJlYW0oJmppdC5j
b2RlQmxvY2soKS0+dmFyaWFibGVFdmVudFN0cmVhbSgpKQorICAgICwgbV9taW5pZmllZEdyYXBo
KCZqaXQuY29kZUJsb2NrKCktPm1pbmlmaWVkREZHKCkpCit7Cit9CisKIC8vIE9uIFdpbmRvd3Mg
d2UgbmVlZCB0byB3cmFwIGZtb2Q7IG9uIG90aGVyIHBsYXRmb3JtcyB3ZSBjYW4gY2FsbCBpdCBk
aXJlY3RseS4KIC8vIE9uIEFSTXY3IHdlIGFzc2VydCB0aGF0IGFsbCBmdW5jdGlvbiBwb2ludGVy
cyBoYXZlIHRvIGxvdyBiaXQgc2V0IChwb2ludCB0byB0aHVtYiBjb2RlKS4KICNpZiBDQUxMSU5H
X0NPTlZFTlRJT05fSVNfU1REQ0FMTCB8fCBDUFUoQVJNX1RIVU1CMikKQEAgLTY0LDcgKzgwLDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3RvcmFnZShOb2RlSQogICAgICAgICBBU1NF
UlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIGdwcik7Ci0gICAgICAgIGluZm8uZmlsbFN0b3JhZ2UoZ3ByKTsKKyAgICAgICAgaW5mby5m
aWxsU3RvcmFnZSgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQog
ICAgICAgICAKQEAgLTg4MywxMiArODk5LDMxIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZUJyYW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vdGljZU9TUkJpcnRoKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCit7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVhbFJlZ2lzdGVy
KCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxS
ZWdpc3Rlcl07CisgICAgCisgICAgaWYgKCFpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwg
dmlydHVhbFJlZ2lzdGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChiZWxvbmdz
SW5NaW5pZmllZEdyYXBoKG5vZGUub3AoKSkpCisgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBw
ZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobm9kZUluZGV4LCBub2RlKSk7Cit9CisKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJU
KG5vZGUub3AoKSA9PSBTZXRMb2NhbCk7CiAgICAgCi0gICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFu
ZChub2RlLmNoaWxkMSgpLmluZGV4KCksIG5vZGUubG9jYWwoKSk7CiAgICAgbV9sYXN0U2V0T3Bl
cmFuZCA9IG5vZGUubG9jYWwoKTsKKyAgICAKKyAgICBOb2RlJiBjaGlsZCA9IGF0KG5vZGUuY2hp
bGQxKCkpOworICAgIG5vdGljZU9TUkJpcnRoKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSwgY2hpbGQp
OworICAgIAorICAgIGlmIChjaGlsZC5vcCgpID09IFVJbnQzMlRvTnVtYmVyKQorICAgICAgICBu
b3RpY2VPU1JCaXJ0aChjaGlsZC5jaGlsZDEoKS5pbmRleCgpLCBhdChjaGlsZC5jaGlsZDEoKSkp
OworICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmQoVmFyaWFibGVFdmVudDo6bW92SGludChub2Rl
LmNoaWxkMSgpLmluZGV4KCksIG5vZGUubG9jYWwoKSkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJsb2NrKQpAQCAtOTAyLDE0ICs5MzcsMTkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2lmIERGR19FTkFCTEUoSklU
X0JSRUFLX09OX0VWRVJZX0JMT0NLKQogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgor
ICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmQoVmFyaWFibGVFdmVudDo6cmVzZXQoKSk7CiAKICAg
ICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CisgICAgICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNl
OwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFwaCgpLmFyZ3Vt
ZW50SXNDYXB0dXJlZChpKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVl
U291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCku
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNv
dXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFs
dWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmQoVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwoYXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAg
IH0KICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7CkBAIC05MTgsMTIgKzk1OCwxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgQVNTRVJUKG1fdmFyaWFi
bGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkp
OworICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRl
eCA9PSBOb05vZGUgfHwgbV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVyZWQoaSkpCi0gICAgICAg
ICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwor
ICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxl
KTsKICAgICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZh
bHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNl
ID0gVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5v
ZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCku
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fdmFyaWFibGVz
W2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmQoVmFyaWFibGVFdmVu
dDo6c2V0TG9jYWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CiAgICAgfQogICAgIAog
ICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwpA
QCAtOTg4LDYgKzEwMzEsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Js
b2NrJgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gSGFuZGxlIHByb3h5IG5vZGVzLgorICAgICAgICAgICAgc3dpdGNo
IChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
KyAgICAgICAgICAgICAgICBub3RpY2VPU1JCaXJ0aChtX2NvbXBpbGVJbmRleCwgbm9kZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQogICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKICAgICAg
ICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKV07CkBAIC0xMDA4LDE2ICsxMDYyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCi0j
aWYgREZHX0VOQUJMRShWRVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMpCi0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihhcmd1bWVudFRvT3BlcmFuZChpKSkuZHVtcChzdGRlcnIpOwot
ICAgICAgICAKLSAgICAgICAgZGF0YUxvZygiIDogIik7Ci0gICAgICAgIAotICAgICAgICBmb3Ig
KGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29w
ZXJhbmQpCi0gICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1w
KHN0ZGVycik7Ci0jZW5kaWYKLQogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAg
ICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgpAQCAtMTI1NCwxMzYgKzEyOTgsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogCiBWYWx1ZVJlY292ZXJ5IFNwZWN1
bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFs
dWVTb3VyY2UpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKLSAgICBjYXNl
IFZhbHVlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJl
YWR5SW5SZWdpc3RlckZpbGUoKTsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJG
aWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxl
QXNVbmJveGVkSW50MzIoKTsKLQotICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgotICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2Vs
bCgpOwotCi0gICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7Ci0g
ICAgICAgIAotICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3VibGUoKTsKLQot
ICAgIGNhc2UgSGF2ZU5vZGU6IHsKLSAgICAgICAgaWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uu
bm9kZUluZGV4KCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgCi0gICAg
ICAgIE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpOwotICAgICAg
ICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3Mg
bGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUs
IG9yIG9wZXJhbmQsCi0gICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRv
IG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAg
ICAgICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRy
LT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBp
bmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAg
ICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdv
dWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUg
Zm91ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEludDMy
VG9Eb3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgbm9kZSwg
YnV0Ci0gICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVzZSBpdCBvbmx5
IGlmIGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZwotICAgICAgICAgICAgLy8gICAgbGl2ZSB2ZXJz
aW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogSWYgdGhl
IG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgICAg
IC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgotICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24g
b2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKLSAgICAgICAgICAgIC8vICAgIHRoZW4g
dGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9y
bWVkIG51bWJlcgotICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJt
ZWRpYXRlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRo
ZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAg
ICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRo
YXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKLSAgICAgICAgICAgIC8vICAgIHRoZSBudW1i
ZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0g
ICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYg
KG5vZGVQdHItPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAg
ICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaW5mb1B0ciA9
ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAg
ICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBu
b2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBO
b2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdp
c3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAg
ICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9b
dmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChpbmZvLm5vZGVJ
bmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkg
IT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAg
aW50MzJUb0RvdWJsZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1i
ZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAg
ICAgICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRleDsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9k
ZSkgewotICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleFRvVXNlKTsK
LSAgICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHIt
PnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHIt
PmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAg
ICB9CisgICAgaWYgKHZhbHVlU291cmNlLmlzSW5SZWdpc3RlckZpbGUoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlU291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKICAgICAKLSAgICAgICAgQVNTRVJUKGlu
Zm9QdHItPmFsaXZlKCkpOwotCi0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpT
KQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mb1B0ci0+
dGFnR1BSKCksIGluZm9QdHItPnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSksIGluZm9QdHItPnNwaWxsRm9ybWF0KCkpOworICAgIEFT
U0VSVCh2YWx1ZVNvdXJjZS5raW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIGlmIChpc0NvbnN0YW50
KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmNvbnN0YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CiAg
ICAgCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeSgpOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQor
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHU3BlY3VsYXRpdmVKSVRfaAogI2RlZmluZSBERkdT
cGVjdWxhdGl2ZUpJVF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgpAQCAtMzMsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5o
IgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3Zlcnku
aCIKIApAQCAtNDYsODUgKzQ5LDYgQEAgY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZDsKIGNs
YXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7
CiAKLQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAgIFNvdXJjZU5vdFNldCwKLSAgICBWYWx1
ZUluUmVnaXN0ZXJGaWxlLAotICAgIEludDMySW5SZWdpc3RlckZpbGUsCi0gICAgQ2VsbEluUmVn
aXN0ZXJGaWxlLAotICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwKLSAgICBEb3VibGVJblJlZ2lz
dGVyRmlsZSwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xhc3MgVmFsdWVTb3VyY2UgewotcHVibGlj
OgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9t
S2luZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFs
dWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKLSAgICAgICAgOiBtX25v
ZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOwotICAgICAgICBBU1NFUlQoa2luZCgp
ICE9IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9k
ZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCi0gICAg
ewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
c3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOwotICAgICAg
ICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJl
Z2lzdGVyRmlsZSk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24p
KQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7
Ci0gICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4ga2lu
ZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKLSAgICB9Ci0gICAg
Ci0gICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhh
dmVOb2RlKTsKLSAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIE5v
ZGVJbmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJjZUtpbmQga2luZCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOwot
ICAgICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZh
bHVlU291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQotICAg
IHsKLSAgICAgICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUg
LSBub2RlSW5kZXgpOwotICAgICAgICBpZiAoa2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
SGF2ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIEhhdmVOb2RlOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsKLSAgICB9Ci0gICAgCi0gICAgTm9k
ZUluZGV4IG1fbm9kZUluZGV4OwotfTsKLQotCiBlbnVtIEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsg
R2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duLCBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlciwgR2Vu
ZXJhdGVkT3BlcmFuZERvdWJsZSwgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWV9OwogCiAvLyA9PT0g
U3BlY3VsYXRpdmVKSVQgPT09CkBAIC0zMDgsNyArMjMyLDcgQEAgcHVibGljOgogCiAgICAgICAg
IC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBh
bnkKICAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVkLgotICAgICAg
ICBpZiAoIWluZm8udXNlKCkpCisgICAgICAgIGlmICghaW5mby51c2UoKm1fc3RyZWFtKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBSZWxlYXNlIHRoZSBhc3NvY2lhdGVkIG1h
Y2hpbmUgcmVnaXN0ZXJzLgpAQCAtMzY4LDYgKzI5Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZUlu
ZGV4LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBj
b21waWxlKEJhc2ljQmxvY2smKTsKIApAQCAtNjU3LDcgKzU4Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIENoZWNrIHRoZSBHZW5lcmF0aW9uSW5mbyB0byBzZWUgaWYgdGhpcyB2YWx1ZSBuZWVk
IHdyaXRpbmcKICAgICAgICAgLy8gdG8gdGhlIFJlZ2lzdGVyRmlsZSAtIGlmIG5vdCwgbWFyayBp
dCBhcyBzcGlsbGVkICYgcmV0dXJuLgogICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7
Ci0gICAgICAgICAgICBpbmZvLnNldFNwaWxsZWQoKTsKKyAgICAgICAgICAgIGluZm8uc2V0U3Bp
bGxlZCgqbV9zdHJlYW0sIHNwaWxsTWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTY2NywyMCArNTkyLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUaGlzIGlz
IHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNp
YmxlIHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAg
ICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBpbmZvLnNw
aWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewog
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRJbnRlZ2Vy
KTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0
SW50ZWdlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAgbV9q
aXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAg
ICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0RG91YmxlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02OTYsMTMgKzYy
MSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTcGlsbCB0aGUg
dmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9ybS4KICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxN
ZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBE
YXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1l
LCAoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAg
IHJldHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1h
dENlbGw6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbChzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICBpbmZv
LnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTcxMCw3ICs2MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewogICAgICAgICAgICAgLy8gT24gSlNWQUxVRTMyXzY0
IGJveGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAg
ICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAgICAgaW5mby5z
cGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzE5LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUp
KTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5wYXlsb2FkR1BSKCksIEpJVENvbXBp
bGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoc3BpbGxG
b3JtYXQpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxs
Rm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICB9CkBAIC0xODIw
LDcgKzE3NDUsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5k
T1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7
CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwg
anNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
Rm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAg
ICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsKQogICAgIHsKQEAgLTE4NDMsNyArMTc2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwotICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5k
ZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxh
dGlvblJlY292ZXJpZXMoKSkpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0
cmVhbS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292
ZXJpZXMoKSkpOwogICAgIH0KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5
KQogICAgIHsKQEAgLTE4NjMsNyArMTc4OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGV4aXQubV9j
b2RlT3JpZ2luID0gbmV4dE5vZGUuY29kZU9yaWdpbjsKICAgICAgICAgZXhpdC5tX2xhc3RTZXRP
cGVyYW5kID0gc2V0TG9jYWwubG9jYWwoKTsKICAgICAgICAgCi0gICAgICAgIGV4aXQudmFsdWVS
ZWNvdmVyeUZvck9wZXJhbmQoc2V0TG9jYWwubG9jYWwoKSkgPSB2YWx1ZVJlY292ZXJ5OworICAg
ICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRvcHRSZWYoCisgICAgICAgICAg
ICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLmxvY2FsKCksIHZhbHVlUmVjb3Zl
cnkpKTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWlu
ZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMTkyMSw2ICsxODQ3LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAgICB9CiAgICAg
CisgICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQgb3BlcmFuZCwgVmFsdWVTb3VyY2UgdmFsdWVT
b3VyY2UpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3Bl
cmFuZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZChWYXJpYWJsZUV2
ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAgICB9
CisgICAgCiAgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2VtYmxl
ciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKICAgICAvLyBUaGUgY3Vy
cmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTE5NTQsNiArMTg4Niw5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIAorICAgIFZhcmlhYmxlRXZl
bnRTdHJlYW0qIG1fc3RyZWFtOworICAgIE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRHcmFwaDsK
KyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZh
bHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KGludCBvcGVyYW5kKQpAQCAtMjU3MywyMCArMjUwOCw2IEBAIHByaXZhdGU6CiAgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkOwogfTsKIAotaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2
ZUpJVChKSVRDb21waWxlciYgaml0KQotICAgIDogbV9jb21waWxlT2theSh0cnVlKQotICAgICwg
bV9qaXQoaml0KQotICAgICwgbV9jb21waWxlSW5kZXgoMCkKLSAgICAsIG1faW5kZXhJbkJsb2Nr
KDApCi0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxl
ZVJlZ2lzdGVycykKLSAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXpl
KCkpCi0gICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkK
LSAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9sYXN0
U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9zdGF0
ZShtX2ppdC5ncmFwaCgpKQotewotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZV9oCisjZGVmaW5lIERGR1ZhbHVlUmVjb3ZlcnlP
dmVycmlkZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFsdWVS
ZWNvdmVyeU92ZXJyaWRlIDogcHVibGljIFJlZkNvdW50ZWQ8VmFsdWVSZWNvdmVyeU92ZXJyaWRl
PiB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKCkgeyB9CisgICAgCisgICAg
VmFsdWVSZWNvdmVyeU92ZXJyaWRlKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSkKKyAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCisgICAgICAgICwgcmVjb3Zlcnko
cmVjb3ZlcnkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZDsKKyAgICBWYWx1
ZVJlY292ZXJ5IHJlY292ZXJ5OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJj
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNv
dXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhbHVlU291cmNlX2gKKyNk
ZWZpbmUgREZHVmFsdWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRh
dGFGb3JtYXQuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSAiVmFsdWVS
ZWNvdmVyeS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVmFs
dWVTb3VyY2VLaW5kIHsKKyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJblJlZ2lzdGVyRmls
ZSwKKyAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAorICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKKyAg
ICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCisgICAgRG91YmxlSW5SZWdpc3RlckZpbGUsCisgICAg
SGF2ZU5vZGUKK307CisKK3N0YXRpYyBpbmxpbmUgVmFsdWVTb3VyY2VLaW5kIGRhdGFGb3JtYXRU
b1ZhbHVlU291cmNlS2luZChEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCit7CisgICAgc3dpdGNoIChk
YXRhRm9ybWF0KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAgcmV0dXJu
IEludDMySW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAg
ICByZXR1cm4gRG91YmxlSW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVh
bjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5JblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFG
b3JtYXRDZWxsOgorICAgICAgICByZXR1cm4gQ2VsbEluUmVnaXN0ZXJGaWxlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
cmV0dXJuIFZhbHVlSW5SZWdpc3RlckZpbGU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIERh
dGFGb3JtYXQgdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KFZhbHVlU291cmNlS2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVyRmlsZToK
KyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZp
bGU6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SW50ZWdlcjsKKyAgICBjYXNlIENlbGxJblJl
Z2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNhc2UgQm9v
bGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47Cisg
ICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRE
b3VibGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXROb25lOworICAg
IH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzSW5SZWdpc3RlckZpbGUoVmFsdWVTb3VyY2VL
aW5kIGtpbmQpCit7CisgICAgcmV0dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChraW5k
KSAhPSBEYXRhRm9ybWF0Tm9uZTsKK30KKworY2xhc3MgVmFsdWVTb3VyY2UgeworcHVibGljOgor
ICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2lu
ZChTb3VyY2VOb3RTZXQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKKyAgICAgICAgOiBtX25vZGVJ
bmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOworICAgICAgICBBU1NFUlQoa2luZCgpICE9
IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOworICAgICAgICBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lz
dGVyRmlsZSk7CisgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7Cisg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlIGZvckRhdGFGb3JtYXQoRGF0YUZvcm1hdCBkYXRh
Rm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKGRhdGFGb3JtYXRUb1Zh
bHVlU291cmNlS2luZChkYXRhRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUlu
ZGV4KSAhPSBTb3VyY2VOb3RTZXQ7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNlS2luZCBr
aW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25v
ZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJblJlZ2lzdGVyRmlsZSgpIGNvbnN0
IHsgcmV0dXJuIEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxlKGtpbmQoKSk7IH0KKyAgICAKKyAg
ICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChraW5kKCkpOworICAgIH0KKyAgICAKKyAgICBWYWx1
ZVJlY292ZXJ5IHZhbHVlUmVjb3ZlcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
SW5SZWdpc3RlckZpbGUoKSk7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgVmFsdWVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIElu
dDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxy
ZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIENlbGxJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsKCk7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbigpOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6CisgICAgICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVk
RG91YmxlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAgICByZXR1
cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZUluZGV4IG5vZGVJbmRleEZyb21L
aW5kKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPj0g
U291cmNlTm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBOb05vZGUg
LSBraW5kOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2VLaW5kIGtpbmRGcm9t
Tm9kZUluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICB1bnNpZ25lZCBr
aW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9kZSAtIG5vZGVJbmRleCk7CisgICAgICAg
IGlmIChraW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihIYXZlTm9kZSkpCisgICAgICAgICAg
ICByZXR1cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJj
ZUtpbmQ+KGtpbmQpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1ZhbHVlU291cmNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudF9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVmFyaWFibGVFdmVudEtpbmQg
eworICAgIC8vIE1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBjaGVja3BvaW50LiBJZiB5b3UgaW50
ZXJwcmV0IHRoZSB2YXJpYWJsZQorICAgIC8vIGV2ZW50cyBzdGFydGluZyBhdCBhIFJlc2V0IHBv
aW50IHRoZW4geW91J2xsIGdldCBldmVyeXRoaW5nIHlvdSBuZWVkLgorICAgIFJlc2V0LAorICAg
IAorICAgIC8vIE5vZGUgYmlydGhzLiBQb2ludHMgaW4gdGhlIGNvZGUgd2hlcmUgYSBub2RlIGJl
Y29tZXMgcmVsZXZhbnQgZm9yIE9TUi4KKyAgICAvLyBJdCBtYXkgYmUgdGhlIHBvaW50IHdoZXJl
IGl0IGlzIGFjdHVhbGx5IGJvcm4gKGkuZS4gYXNzaWduZWQpIG9yIGl0IG1heQorICAgIC8vIGJl
IGEgbGF0ZXIgcG9pbnQsIGlmIGl0J3Mgb25seSBsYXRlciBpbiB0aGUgc2VxdWVuY2Ugb2YgaW5z
dHJ1Y3Rpb25zCisgICAgLy8gdGhhdCB3ZSBzdGFydCB0byBjYXJlIGFib3V0IHRoaXMgbm9kZS4K
KyAgICBCaXJ0aFRvRmlsbCwKKyAgICBCaXJ0aFRvU3BpbGwsCisgICAgCisgICAgLy8gRXZlbnRz
IHJlbGF0ZWQgdG8gaG93IGEgbm9kZSBpcyByZXByZXNlbnRlZC4KKyAgICBGaWxsLAorICAgIFNw
aWxsLAorICAgIAorICAgIC8vIERlYXRoIG9mIGEgbm9kZSAtIGFmdGVyIHRoaXMgd2Ugbm8gbG9u
Z2VyIGNhcmUgYWJvdXQgdGhpcyBub2RlLgorICAgIERlYXRoLAorICAgIAorICAgIC8vIEEgTW92
SGludCBtZWFucyB0aGF0IGEgbm9kZSBpcyBiZWluZyBhc3NvY2lhdGVkIHdpdGggYSBieXRlY29k
ZSBvcGVyYW5kLAorICAgIC8vIGJ1dCB0aGF0IGl0IGhhcyBub3QgYmVlbiBzdG9yZWQgaW50byB0
aGF0IG9wZXJhbmQuCisgICAgTW92SGludCwKKyAgICAKKyAgICAvLyBBIFNldExvY2FsRXZlbnQg
bWVhbnMgdGhhdCBhIG5vZGUncyB2YWx1ZSBoYXMgYWN0dWFsbHkgYmVlbiBzdG9yZWQgaW50byB0
aGUKKyAgICAvLyBieXRlY29kZSBvcGVyYW5kIHRoYXQgaXQncyBhc3NvY2lhdGVkIHdpdGguCisg
ICAgU2V0TG9jYWxFdmVudCwKKyAgICAKKyAgICAvLyBVc2VkIHRvIGluZGljYXRlIGFuIHVuaW5p
dGlhbGl6ZWQgVmFyaWFibGVFdmVudC4gRG9uJ3QgdXNlIGZvciBvdGhlcgorICAgIC8vIHB1cnBv
c2VzLgorICAgIEludmFsaWRFdmVudEtpbmQKK307CisKK3VuaW9uIFZhcmlhYmxlUmVwcmVzZW50
YXRpb24geworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcjsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcjsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0
cnVjdCB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUjsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUjsKKyAgICB9IHBhaXI7Cisj
ZW5kaWYKKyAgICBpbnQzMl90IHZpcnR1YWxSZWc7Cit9OworCitjbGFzcyBWYXJpYWJsZUV2ZW50
IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUV2ZW50KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxp
ZEV2ZW50S2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50
IHJlc2V0KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2
ZW50Lm1fa2luZCA9IFJlc2V0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZpbGxHUFIoVmFyaWFibGVFdmVudEtpbmQga2luZCwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByLCBEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRv
RmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRh
Rm9ybWF0RG91YmxlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBBU1NFUlQoIShk
YXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAgICAgICAgVmFyaWFibGVFdmVu
dCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZl
bnQudS5ncHIgPSBncHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2
ZW50Lm1fZGF0YUZvcm1hdCA9IGRhdGFGb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAg
ICB9CisgICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVu
dCBmaWxsUGFpcihWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFIsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHBheWxvYWRHUFIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvRmls
bCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAg
ICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LnBhaXIudGFnR1BS
ID0gdGFnR1BSOworICAgICAgICBldmVudC51LnBhaXIucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7
CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1h
dCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyNlbmRpZiAv
LyBVU0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZpbGxG
UFIoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBC
aXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LmZw
ciA9IGZwcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9k
YXRhRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzcGlsbChWYXJpYWJsZUV2ZW50S2lu
ZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09IEJp
cnRoVG9TcGlsbCB8fCBraW5kID09IFNwaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVu
dDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS52
aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5k
OworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIHJldHVybiBl
dmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZGVhdGgoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAg
ICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IERl
YXRoOworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJp
YWJsZUV2ZW50IHNldExvY2FsKGludCBvcGVyYW5kLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICB7
CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJl
ZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNldExvY2FsRXZlbnQ7CisgICAg
ICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgcmV0dXJuIGV2ZW50Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBtb3ZIaW50KE5vZGVJbmRleCBu
b2RlSW5kZXgsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVu
dDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS52
aXJ0dWFsUmVnID0gb3BlcmFuZDsKKyAgICAgICAgZXZlbnQubV9raW5kID0gTW92SGludDsKKyAg
ICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUV2ZW50S2luZCBr
aW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYXJpYWJsZUV2
ZW50S2luZD4obV9raW5kKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG5vZGVJbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1f
a2luZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8
IG1fa2luZCA9PSBTcGlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IERlYXRoIHx8IG1f
a2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorICAgIAor
ICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8
fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbAorICAgICAgICAgICAg
ICAgfHwgbV9raW5kID09IFNldExvY2FsRXZlbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9k
YXRhRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0RG91
YmxlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBBU1NFUlQoIShtX2RhdGFGb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gdS5ncHI7CisgICAg
fQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgdGFnR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmly
dGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuIHUucGFpci50YWdHUFI7CisgICAgfQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7
CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICBy
ZXR1cm4gdS5wYWlyLnBheWxvYWRHUFI7CisgICAgfQorI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0g
RmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7
CisgICAgICAgIHJldHVybiB1LmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09
IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih1LnZpcnR1YWxSZWcpOworICAgIH0KKyAgICAKKyAgICBp
bnQgb3BlcmFuZCgpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2
ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIHUudmlydHVhbFJlZzsK
KyAgICB9CisgICAgCisgICAgY29uc3QgVmFyaWFibGVSZXByZXNlbnRhdGlvbiYgdmFyaWFibGVS
ZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAg
Tm9kZUluZGV4IG1faW5kZXg7CisgICAgCisgICAgLy8gRm9yIEJpcnRoVG9GaWxsLCBGaWxsOgor
ICAgIC8vICAgLSBUaGUgR1BSIG9yIEZQUiwgb3IgYSBHUFIgcGFpci4KKyAgICAvLyBGb3IgQmly
dGhUb1NwaWxsLCBTcGlsbDoKKyAgICAvLyAgIC0gVGhlIHZpcnR1YWwgcmVnaXN0ZXIuCisgICAg
Ly8gRm9yIE1vdkhpbnQsIFNldExvY2FsRXZlbnQ6CisgICAgLy8gICAtIFRoZSBieXRlY29kZSBv
cGVyYW5kLgorICAgIC8vIEZvciBEZWF0aDoKKyAgICAvLyAgIC0gVW51c2VkLgorICAgIFZhcmlh
YmxlUmVwcmVzZW50YXRpb24gdTsKKyAgICAKKyAgICBpbnQ4X3QgbV9raW5kOworICAgIGludDhf
dCBtX2RhdGFGb3JtYXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhcmlhYmxlRXZlbnRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdWYWx1
ZVNvdXJjZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBN
aW5pZmllZEdlbmVyYXRpb25JbmZvIHsKKyAgICBib29sIGZpbGxlZDsgLy8gdHJ1ZSAtPiBpbiBn
cHIvZnByL3BhaXIsIGZhbHNlIC0+IHNwaWxsZWQKKyAgICBWYXJpYWJsZVJlcHJlc2VudGF0aW9u
IHU7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgCisgICAgTWluaWZpZWRHZW5lcmF0aW9u
SW5mbygpCisgICAgICAgIDogZm9ybWF0KERhdGFGb3JtYXROb25lKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB1cGRhdGUoY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgeworICAgICAgICBjYXNlIEJpcnRoVG9GaWxs
OgorICAgICAgICBjYXNlIEZpbGw6CisgICAgICAgICAgICBmaWxsZWQgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlydGhUb1NwaWxsOgorICAgICAgICBjYXNlIFNw
aWxsOgorICAgICAgICAgICAgZmlsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBEZWF0aDoKKyAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXROb25lOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1ID0gZXZlbnQudmFyaWFibGVSZXByZXNl
bnRhdGlvbigpOworICAgICAgICBmb3JtYXQgPSBldmVudC5kYXRhRm9ybWF0KCk7CisgICAgfQor
fTsKKwordm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiBncmFw
aCwKKyAgICB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIHZhbHVlUmVj
b3ZlcmllcykgY29uc3QKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6REZHSklUKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICAKKyAgICAvLyBTdGVwIDE6IEZpbmQgdGhl
IGxhc3QgY2hlY2twb2ludCwgYW5kIGZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiB2aXJ0dWFsIHJl
Z2lzdGVycyBhcyB3ZSBnby4KKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaW5kZXggLSAxOwor
ICAgIHdoaWxlIChhdChzdGFydEluZGV4KS5raW5kKCkgIT0gUmVzZXQpCisgICAgICAgIHN0YXJ0
SW5kZXgtLTsKKyAgICAKKyAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERG
RydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCisgICAgdW5zaWduZWQgbnVtVmFyaWFi
bGVzOworICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgbnVtVmFy
aWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpLT5tX251bUNhbGxlZVJlZ2lzdGVycyArIGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICBlbHNlCisgICAgICAgIG51bVZhcmlhYmxlcyA9
IGJhc2VsaW5lQ29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAKKyAgICBPcGVy
YW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFuZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIG51bVZhcmlhYmxlcyk7CisgICAgVmVjdG9yPE1pbmlmaWVkR2VuZXJhdGlvbkluZm8sIDMy
PiBnZW5lcmF0aW9uSW5mb3MoaW5kZXggLSBzdGFydEluZGV4KTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgeworICAgICAgICBjb25zdCBWYXJpYWJs
ZUV2ZW50JiBldmVudCA9IGF0KGkpOworICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgewor
ICAgICAgICBjYXNlIFJlc2V0OgorICAgICAgICAgICAgLy8gbm90aGluZyB0byBkby4KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRoVG9GaWxsOgorICAgICAgICBjYXNlIEJp
cnRoVG9TcGlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAgICBjYXNlIFNwaWxsOgorICAg
ICAgICBjYXNlIERlYXRoOgorICAgICAgICAgICAgZ2VuZXJhdGlvbkluZm9zW2V2ZW50Lm5vZGVJ
bmRleCgpIC0gc3RhcnRJbmRleF0udXBkYXRlKGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVy
YW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZlbnQubm9kZUluZGV4KCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CisgICAgICAgICAg
ICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2U6
OmZvckRhdGFGb3JtYXQoZXZlbnQuZGF0YUZvcm1hdCgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gU3RlcCAzOiBS
ZWNvcmQgdGhlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLCBzbyB3ZSBjYW4gZ2V0IHRvIHRoZW0gbW9y
ZSBxdWlja2x5LgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IGluZGljZXNPZkxpdmVUaGluZ3M7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKKyAg
ICAgICAgaWYgKGdlbmVyYXRpb25JbmZvc1tpIC0gc3RhcnRJbmRleF0uZm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKQorICAgICAgICAgICAgaW5kaWNlc09mTGl2ZVRoaW5ncy5hcHBlbmQoaSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFN0ZXAgNDogQ29tcHV0ZSB2YWx1ZSByZWNvdmVyaWVzIQorICAg
IHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBvcGVyYW5kU291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVNvdXJjZSYgc291
cmNlID0gb3BlcmFuZFNvdXJjZXNbaV07CisgICAgICAgIGlmIChzb3VyY2UuaXNJblJlZ2lzdGVy
RmlsZSgpKSB7CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBzb3VyY2UudmFsdWVS
ZWNvdmVyeSgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChzb3VyY2Uua2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgTWluaWZp
ZWROb2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLm5vZGVJbmRleCgpKTsKKyAgICAgICAgaWYg
KG5vZGUgJiYgbm9kZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgdmFsdWVSZWNvdmVy
aWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoCisgICAgICAgICAgICAgICAgY29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpLmdldCgpKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNaW5pZmllZEdlbmVy
YXRpb25JbmZvKiBpbmZvID0gJmdlbmVyYXRpb25JbmZvc1tzb3VyY2Uubm9kZUluZGV4KCkgLSBz
dGFydEluZGV4XTsKKyAgICAgICAgaWYgKGluZm8tPmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkg
eworICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9k
ZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgICAgICAvLyBU
aGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIEludDMyVG9Eb3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2lu
YWwgbm9kZSwgYnV0CisgICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVz
ZSBpdCBvbmx5IGlmIGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZworICAgICAgICAgICAgLy8gICAg
bGl2ZSB2ZXJzaW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQz
MjogSWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAg
ICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZl
IHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgICAgIC8v
ICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJv
cGVybHkgZm9ybWVkIG51bWJlcgorICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50
MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZSByZXZl
cnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1
dCBpdHMKKyAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgICAgIC8vICAg
IHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikgeworICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAg
ICAgICAgICBub2RlID0gZ3JhcGguYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBpbmZv
ID0gJmdlbmVyYXRpb25JbmZvc1tub2RlSW5kZXggLSBzdGFydEluZGV4XTsKKyAgICAgICAgICAg
ICAgICBpZiAoaW5mby0+Zm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggaW50MzJUb0RvdWJs
ZUluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJ
bmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJ
bmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaW5kaWNlc09mTGl2ZVRoaW5ncy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gaW5kaWNlc09mTGl2ZVRoaW5n
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdyYXBoLmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmhhc0NoaWxkMSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKSAhPSBzb3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZv
c1tub2RlSW5kZXggLSBzdGFydEluZGV4XS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJUb0Rv
dWJsZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWVUb0ludDMySW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBub2RlSW5kZXg7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW50MzJUb0RvdWJs
ZUluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBp
bnQzMlRvRG91YmxlSW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZh
bHVlVG9JbnQzMkluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVp
bnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGluZm8gPSAmZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRleFRvVXNlIC0gc3RhcnRJbmRleF07
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvLT5mb3JtYXQgIT0gRGF0YUZvcm1hdE5v
bmUpOworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7
CisgICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29u
c3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChpbmZvLT5mb3JtYXQg
IT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGluZm8tPmZpbGxlZCkg
eworICAgICAgICAgICAgaWYgKGluZm8tPmZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Cisg
ICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5GUFIo
aW5mby0+dS5mcHIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICBpZiAoaW5mby0+Zm9ybWF0ICYgRGF0
YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVS
ZWNvdmVyeTo6aW5QYWlyKGluZm8tPnUudGFnR1BSLCBpbmZvLT51LnBheWxvYWRHUFIpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvLT51Lmdwciwg
aW5mby0+Zm9ybWF0KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPQorICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihp
bmZvLT51LnZpcnR1YWxSZWcpLCBpbmZvLT5mb3JtYXQpOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtX2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudFN0cmVhbV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTWlu
aWZpZWRHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnQuaCIKKyNpbmNsdWRlICJP
cGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3Rv
cjxWYXJpYWJsZUV2ZW50PiB7CitwdWJsaWM6CisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRH
cmFwaCYgZ3JhcGgsCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292
ZXJ5PiYgb3BlcmFuZHMpIGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134184</attachid>
            <date>2012-03-27 17:42:02 -0700</date>
            <delta_ts>2012-03-28 02:38:28 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>variablestream_patch_8.diff</filename>
            <type>text/plain</type>
            <size>150023</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OSBA
QAorMjAxMi0wMy0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
b3JrIGluIHByb2dyZXMhIQorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bWluaWZpZWRERkcpOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhcmlhYmxlRXZlbnRTdHJlYW0pOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFUb0ZpdCk6CisgICAgICAgIChERkdEYXRhKToKKyAg
ICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aGFz
T3BlcmFuZCk6CisgICAgICAgIChPcGVyYW5kcyk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpz
aXplKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmF0KToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6aXNBcmd1bWVudCk6Cisg
ICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc1ZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6T3BlcmFu
ZHM6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6dmFyaWFibGVG
b3JJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpvcGVyYW5kRm9ySW5kZXgpOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6ZHVtcE9wZXJhbmRzKToKKyAgICAgICAgKiBkZmcv
REZHQ29tbW9uLmg6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OkdlbmVyYXRpb25JbmZvKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6aW5pdEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjppbml0SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OmluaXRDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdEJv
b2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0RG91YmxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdFN0b3JhZ2UpOgorICAgICAg
ICAoR2VuZXJhdGlvbkluZm8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpu
b3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnVzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnNwaWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c2V0U3BpbGxlZCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJhdGlvbkluZm86OmZpbGxKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6ZmlsbENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpm
aWxsSW50ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbERvdWJsZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmZpbGxTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kRmlsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R2VuZXJhdGlvbkluZm86OmFwcGVuZFNwaWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAg
ICAgKiBkZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpN
aW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpNaW5pZmllZEdyYXBoOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogZGZnL0RGR01pbmlm
aWVkTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZE5vZGU6OmZyb21Ob2RlKToKKyAgICAgICAgKiBkZmcvREZHTWluaWZpZWROb2RlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5p
ZmllZEdyYXBoKToKKyAgICAgICAgKE1pbmlmaWVkTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
TWluaWZpZWROb2RlOjpNaW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVk
Tm9kZTo6bm9kZVdpdGhDaGlsZCk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpu
b2RlV2l0aENvbnN0YW50TnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6
OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9wKToKKyAgICAgICAg
KEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAgIChKU0M6OkRGRzo6
TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6
aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnRO
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Z2V0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnROdW1iZXIpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAg
IChPU1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6CisgICAgICAgIChPU1JFeGl0Q29tcGlsZXIp
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3Bl
Y3VsYXRpdmVKSVQpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnVzZSk6CisgICAgICAgIChT
cGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSW50
ZWdlcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFuKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
UmVjb3ZlcnlPdmVycmlkZTo6VmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAgICAgKiBkZmcv
REZHVmFsdWVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJjZS5o
OiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRv
VmFsdWVTb3VyY2VLaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjp2YWx1ZVNvdXJjZUtpbmRUb0Rh
dGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAg
ICAoVmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpWYWx1ZVNv
dXJjZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0KToKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
U291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6aXNJblJlZ2lz
dGVyRmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmRhdGFGb3JtYXQpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjp2YWx1ZVJlY292ZXJ5KToKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6bm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpW
YWx1ZVNvdXJjZTo6bm9kZUluZGV4RnJvbUtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
U291cmNlOjpraW5kRnJvbU5vZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcEZp
bGxJbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkdW1wU3BpbGxJbmZv
KToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudC5oOiBBZGRlZC4KKyAgICAgICAgKERG
Ryk6CisgICAgICAgIChWYXJpYWJsZUV2ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJs
ZUV2ZW50OjpWYXJpYWJsZUV2ZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50
OjpyZXNldCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZmlsbEdQUik6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZmlsbFBhaXIpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlRXZlbnQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpkZWF0
aCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6c2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZGF0YUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6Z3ByKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUV2ZW50Ojp0YWdHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlRXZlbnQ6OnBheWxvYWRHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dmlydHVhbFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpvcGVyYW5kKToKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojp2YXJpYWJsZVJlcHJlc2VudGF0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6IEFkZGVkLgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudCk6Cisg
ICAgICAgIChNaW5pZmllZEdlbmVyYXRpb25JbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5p
ZmllZEdlbmVyYXRpb25JbmZvOjpNaW5pZmllZEdlbmVyYXRpb25JbmZvKToKKyAgICAgICAgKEpT
Qzo6REZHOjpNaW5pZmllZEdlbmVyYXRpb25JbmZvOjp1cGRhdGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChW
YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjphcHBlbmRBbmRMb2cpOgorCiAyMDEyLTAzLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgREZHIE9TUiBleGl0IHNob3VsZCBub3QgZ2VuZXJhdGUgYW4g
ZXhpdCBmb3IgdmFyaWFibGVzIG9mIGlubGluZWVzIGlmIHRoZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw2ICs3NiwxNiBAQAogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBD
RDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9u
U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0QxNTIyODAx
NzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0NjE1MjI4MDIwMDBDRDg5MTAgLyogREZH
TWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEw
IC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdW
YWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDkxNTIyODA5
NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQxMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJp
YWJsZUV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRD
NDIxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwICovOyB9Owor
CQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDMxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5
MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovOyB9OworCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKKwkJMEYy
QkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwogCQkwRjJDNTU2RjE0NzM4RjMxMDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJD
NTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYg
LyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAv
KiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjgsNiArNzM4
LDE2IEBACiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRm
Zy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFG
MTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9u
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzJCMTUxRkRFOEIwMENE
ODkxMCAvKiBPcGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVy
YW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRDE1MjI4MDE3MDBD
RDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdNaW5pZmllZEdyYXBoLmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01p
bmlmaWVkTm9kZS5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNv
dmVyeU92ZXJyaWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0MDE1MjI4MDE3MDBDRDg5MTAg
LyogREZHVmFsdWVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
VmFsdWVTb3VyY2UuaDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50
Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCREM0MjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVh
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8qIERG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdNaW5pZmllZE5vZGUuY3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkx
MCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdWYWx1ZVNvdXJjZS5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVTb3VyY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyog
REZHVmFyaWFibGVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdWYXJpYWJsZUV2ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8q
IERGR0NvZGVCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
REZHQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZF
MTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjAwNiw2ICsyMDI2LDkgQEAKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBD
RDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJB
RDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKKwkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAg
LyogREZHTWluaWZpZWRHcmFwaC5oICovLAorCQkJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwICovLAorCQkJCTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuaCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyog
REZHTm9kZS5oICovLAogCQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3Mu
aCAqLywKQEAgLTIwMzgsNyArMjA2MSwxNCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0
MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIg
LyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLAorCQkJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAv
KiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8sCisJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAorCQkJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLywKKwkJCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAg
LyogREZHVmFyaWFibGVFdmVudC5oICovLAorCQkJCTBGMkJEQzQyMTUyMjgwMTcwMENEODkxMCAv
KiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCAqLywKKwkJCQkwRjJCREM0MzE1MjI4MDE3MDBD
RDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAog
CQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuaCAqLywKIAkJCSk7CkBAIC0yNTEyLDYgKzI1NDIsMTIgQEAKIAkJCQkwRjJCREMx
NjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDgx
NTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzA3MCw2ICszMTA2LDEwIEBACiAJCQkJODY0MkM1MTAx
NTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25p
Y2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5
MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJC
REM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkJEQzRGMTUyMjhCRjMwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsMTAg
QEAKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9j
a3MuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR01pbmlmaWVk
R3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQu
aCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCiAjaW5jbHVkZSAiRXZhbENv
ZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHBy
ZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0zMTAsMTMgKzMxMiw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVy
PEpTQ2VsbD4oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNocmlua1dlYWtSZWZlcmVuY2VzVG9GaXQo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNocmlua1Rv
Rml0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVy
ZW5jZVRyYW5zaXRpb24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20sIEpTQ2VsbCog
dG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMzI0LDExICszMTksMjYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgV2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIGNv
ZGVPcmlnaW4sIGZyb20sIHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQg
c2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRpb25zVG9GaXQoKQorICAgICAgICBERkc6Ok1pbmlm
aWVkR3JhcGgmIG1pbmlmaWVkREZHKCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlREZH
RGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5taW5pZmll
ZERGRzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3Ry
ZWFtJiB2YXJpYWJsZUV2ZW50U3RyZWFtKCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRl
REZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT52YXJp
YWJsZUV2ZW50U3RyZWFtOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNocmlu
a0RGR0RhdGFUb0ZpdCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9kZmdEYXRhKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+d2Vha1JlZmVy
ZW5jZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgICAgIG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMu
c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+bWluaWZpZWRERkcuc2hyaW5r
VG9GaXQoKTsKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+dmFyaWFibGVFdmVudFN0cmVhbS5zaHJp
bmtUb0ZpdCgpOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMTE4Niw2ICsxMTk2LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5
PiBzcGVjdWxhdGlvblJlY292ZXJ5OwogICAgICAgICAgICAgVmVjdG9yPFdlYWtSZWZlcmVuY2VU
cmFuc2l0aW9uPiB0cmFuc2l0aW9uczsKICAgICAgICAgICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8
SlNDZWxsPiA+IHdlYWtSZWZlcmVuY2VzOworICAgICAgICAgICAgREZHOjpWYXJpYWJsZUV2ZW50
U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CisgICAgICAgICAgICBERkc6Ok1pbmlmaWVkR3Jh
cGggbWluaWZpZWRERkc7CiAgICAgICAgICAgICBib29sIG1heUJlRXhlY3V0aW5nOwogICAgICAg
ICAgICAgYm9vbCBpc0pldHRpc29uZWQ7CiAgICAgICAgICAgICBib29sIGxpdmVuZXNzSGFzQmVl
blByb3ZlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTEyMzI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMyw2ICsxMTMsMTMgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0IFQmIG9wZXJh
bmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0
X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KICAgICAKKyAgICBi
b29sIGhhc09wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZCkgPCBudW1iZXJPZkxvY2Fscygp
OworICAgIH0KKyAgICAKICAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7
CkBAIC0xMjQsNiArMTMxLDM5IEBAIHB1YmxpYzoKICAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwg
dmFsdWUpOwogICAgIH0KICAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51
bWJlck9mQXJndW1lbnRzKCkgKyBudW1iZXJPZkxvY2FscygpOyB9CisgICAgY29uc3QgVCYgYXQo
c2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbnVtYmVyT2ZB
cmd1bWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRleF07CisgICAg
ICAgIHJldHVybiBtX2xvY2Fsc1tpbmRleCAtIG51bWJlck9mQXJndW1lbnRzKCldOworICAgIH0K
KyAgICBUJiBhdChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1i
ZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsK
KyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKV07Cisg
ICAgfQorICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KKyAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICBib29sIGlzQXJndW1lbnQoc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCk7IH0KKyAgICBib29sIGlzVmFyaWFi
bGUoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KKyAg
ICBpbnQgYXJndW1lbnRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNp
emUoKTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50VG9PcGVyYW5kKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGlu
ZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBjbGVhcigp
CiAgICAgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUo
KTsgKytpKQpAQCAtMTUzLDYgKzE5MywxNiBAQCB2b2lkIGR1bXBPcGVyYW5kcyhPcGVyYW5kczxU
LCBUcmFpdHM+JiBvCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+Cit2b2lkIGR1bXBPcGVyYW5kcyhjb25zdCBPcGVyYW5kczxULCBUcmFpdHM+JiBvcGVy
YW5kcywgRklMRSogb3V0KQoreworICAgIC8vIFVzZSBjb25zdC1jYXN0IGJlY2F1c2U6CisgICAg
Ly8gMSkgSSBkb24ndCBmZWVsIGxpa2Ugd3JpdGluZyB0aGlzIGNvZGUgdHdpY2UsIGFuZAorICAg
IC8vIDIpIFNvbWUgZHVtcCgpIG1ldGhvZHMgbWF5IG5vdCBiZSBjb25zdCwgYW5kIEkgZG9uJ3Qg
cmVhbGx5IGNhcmUgaWYgdGhhdCdzCisgICAgLy8gICAgdGhlIGNhc2UuCisgICAgZHVtcE9wZXJh
bmRzKCpjb25zdF9jYXN0PE9wZXJhbmRzPFQsIFRyYWl0cz4qPigmb3BlcmFuZHMpLCBvdXQpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9wZXJhbmRzX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTEyMzI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQAogI2RlZmluZSBERkdfRU5BQkxFKERGR19GRUFUVVJFKSAoZGVmaW5lZCBERkdf
RU5BQkxFXyMjREZHX0ZFQVRVUkUgJiYgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFKQogCiAvLyBF
bWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcg
ZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZF
UkJPU0UgMAorI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZFUkJPU0UgMQogLy8gRW1pdCBkdW1w
cyBkdXJpbmcgcHJvcGFnYXRpb24sIGluIGFkZGl0aW9uIHRvIGp1c3QgYWZ0ZXIuCiAjZGVmaW5l
IERGR19FTkFCTEVfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSAwCiAvLyBFbWl0IGxvZ2dpbmcg
Zm9yIE9TUiBleGl0IHZhbHVlIHJlY292ZXJpZXMgYXQgZXZlcnkgbm9kZSwgbm90IGp1c3Qgbm9k
ZXMgdGhhdApAQCAtNjIsNyArNjIsNyBAQAogLy8gRW1pdCBhIGJyZWFrcG9pbnQgaW50byB0aGUg
c3BlY3VsYXRpb24gZmFpbHVyZSBjb2RlLgogI2RlZmluZSBERkdfRU5BQkxFX0pJVF9CUkVBS19P
Tl9TUEVDVUxBVElPTl9GQUlMVVJFIDAKIC8vIExvZyBldmVyeSBzcGVjdWxhdGlvbiBmYWlsdXJl
LgotI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAwCisjZGVm
aW5lIERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFIDEKIC8vIERpc2FibGUg
dGhlIERGRyBKSVQgd2l0aG91dCBoYXZpbmcgdG8gdG91Y2ggUGxhdGZvcm0uaAogI2RlZmluZSBE
RkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBFbmFibGUgT1NSIGVudHJ5IGZyb20gYmFzZWxp
bmUgSklULgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlv
bkluZm8uaAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCwxMCBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdKSVRDb21waWxlci5oIgorI2luY2x1
ZGUgIkRGR1ZhcmlhYmxlRXZlbnQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgiCiAjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgotI2luY2x1ZGUgPGRmZy9ERkdKSVRDb21waWxl
ci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKQEAgLTUwLDYgKzUyLDcg
QEAgcHVibGljOgogICAgICAgICAsIG1fcmVnaXN0ZXJGb3JtYXQoRGF0YUZvcm1hdE5vbmUpCiAg
ICAgICAgICwgbV9zcGlsbEZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICAgICAgICAgLCBtX2NhbkZp
bGwoZmFsc2UpCisgICAgICAgICwgbV9ib3JuRm9yT1NSKGZhbHNlKQogICAgIHsKICAgICB9CiAK
QEAgLTYwLDYgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0
YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAg
ICAgICAgbV9jYW5GaWxsID0gdHJ1ZTsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAg
ICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0SW50ZWdlcihO
b2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTcw
LDYgKzc0LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5v
bmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAg
ICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsK
ICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTgzLDYgKzg4LDcgQEAgcHVibGljOgogICAg
ICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9
IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFs
c2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAjZWxpZiBVU0UoSlNWQUxV
RTMyXzY0KQpAQCAtOTcsNiArMTAzLDcgQEAgcHVibGljOgogICAgICAgICBtX2NhbkZpbGwgPSBm
YWxzZTsKICAgICAgICAgdS52LnRhZ0dQUiA9IHRhZ0dQUjsKICAgICAgICAgdS52LnBheWxvYWRH
UFIgPSBwYXlsb2FkR1BSOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbmRpZgpAQCAtMTA4LDYgKzExNSw3IEBAIHB1
YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBt
X2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZv
ck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogICAgIHZv
aWQgaW5pdEJvb2xlYW4oTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQ
UlJlZyBncHIpCkBAIC0xMTgsNiArMTI2LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9y
bWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAg
ICB1LmdwciA9IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFT
U0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0RG91YmxlKE5vZGVJbmRleCBu
b2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBGUFJSZWcgZnByKQpAQCAtMTI5LDYgKzEzOCw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAg
ICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5mcHIgPSBmcHI7CisgICAgICAgIG1f
Ym9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQog
ICAgIHZvaWQgaW5pdFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291
bnQsIEdQUlJlZyBncHIpCkBAIC0xMzksMTkgKzE0OSw1MyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
c3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAg
ICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgaW5kZXgg
b2YgdGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZhbHVlLgogICAgIE5vZGVJbmRleCBub2Rl
SW5kZXgoKSB7IHJldHVybiBtX25vZGVJbmRleDsgfQorICAgIAorICAgIGJvb2wgbm90aWNlT1NS
QmlydGgoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbm9kZUluZGV4ICE9IE5vTm9kZSk7
CisgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jv
cm5Gb3JPU1IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBt
X2Jvcm5Gb3JPU1IgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3Jt
YXQgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoQmlydGhUb0Zp
bGwsIHN0cmVhbSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG1fc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAg
ICAgICAgIGFwcGVuZFNwaWxsKEJpcnRoVG9TcGlsbCwgc3RyZWFtLCB2aXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRoaXMgaXMgYSBzdGlsbGJpcnRoOiB3ZSdyZSBkb2luZyBhIFNldExvY2FsIGZvciBhIHZh
cmlhYmxlCisgICAgICAgIC8vIHRoYXQgaXMgZGVhZC4gV2UgY2FuIGlnbm9yZSBpdC4KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIC8vIE1hcmsgdGhlIHZhbHVl
IGFzIGhhdmluZyBiZWVuIHVzZWQgKGRlY3JlbWVudCB0aGUgdXNlQ291bnQpLgogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIHdhcyB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZhbHVlLCBhbmQgYW55
CiAgICAgLy8gYXNzb2NpYXRlZCBtYWNoaW5lIHJlZ2lzdGVycyBtYXkgYmUgZnJlZWQuCi0gICAg
Ym9vbCB1c2UoKQorICAgIGJvb2wgdXNlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkKICAg
ICB7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKLSAgICAgICAgcmV0dXJuICEtLW1fdXNl
Q291bnQ7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gIS0tbV91c2VDb3VudDsKKyAgICAgICAgCisg
ICAgICAgIGlmIChyZXN1bHQgJiYgbV9ib3JuRm9yT1NSKSB7CisgICAgICAgICAgICBBU1NFUlQo
bV9ub2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2co
VmFyaWFibGVFdmVudDo6ZGVhdGgobV9ub2RlSW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvLyBVc2VkIHRvIGNoZWNrIHRo
ZSBvcGVyYW5kcyBvZiBvcGVyYXRpb25zIHRvIHNlZSBpZiB0aGV5IGFyZSBvbgpAQCAtMjI0LDcg
KzI2OCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhIFZpcnR1YWxS
ZWdpc3RlciBpcyBiZWluZyBzcGlsbGVkIHRvIHRoZSBSZWdpc3RlckZpbGUgZm9yIHRoZSBmaXJz
dCB0aW1lLgotICAgIHZvaWQgc3BpbGwoRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCkKKyAgICB2b2lk
IHNwaWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1
YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCkKICAgICB7CiAgICAgICAgIC8vIFdl
IHNob3VsZG4ndCBiZSBzcGlsbCB2YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLgogICAg
ICAgICBBU1NFUlQoIW1fY2FuRmlsbCk7CkBAIC0yMzUsMTUgKzI3OSwyMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGls
bEZvcm1hdCA9IHNwaWxsRm9ybWF0OwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZFNwaWxsKFNw
aWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIG9u
IHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxpbmcgKGNvbnN0YW50cyBhbmQgdmFsdWVzIHRo
YXQgaGF2ZQogICAgIC8vIGFscmVhZHkgYmVlbiBzcGlsbGVkKSwgdG8gbWFyayB0aGVtIGFzIG5v
IGxvbmdlciBiZWluZyBpbiBtYWNoaW5lIHJlZ2lzdGVycy4KLSAgICB2b2lkIHNldFNwaWxsZWQo
KQorICAgIHZvaWQgc2V0U3BpbGxlZChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCiAgICAgewogICAgICAgICAvLyBTaG91bGQgb25s
eSBiZSBjYWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZywgYW5kIGFyZSBj
dXJyZW50bHkgaW4gcmVnaXN0ZXJzLgogICAgICAgICBBU1NFUlQobV9jYW5GaWxsICYmIG1fcmVn
aXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0
ID0gRGF0YUZvcm1hdE5vbmU7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQor
ICAgICAgICAgICAgYXBwZW5kU3BpbGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCBraWxsU3BpbGxlZCgpCkBAIC0yNTUsNDYgKzMwNSw2NyBA
QCBwdWJsaWM6CiAgICAgLy8gUmVjb3JkIHRoYXQgdGhpcyB2YWx1ZSBpcyBmaWxsZWQgaW50byBt
YWNoaW5lIHJlZ2lzdGVycywKICAgICAvLyB0cmFja2luZyB3aGljaCByZWdpc3RlcnMsIGFuZCB3
aGF0IGZvcm1hdCB0aGUgdmFsdWUgaGFzLgogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdm9pZCBm
aWxsSlNWYWx1ZShHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykK
KyAgICB2b2lkIGZpbGxKU1ZhbHVlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVn
IGdwciwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBB
U1NFUlQoZm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9
IGZvcm1hdDsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9i
b3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0K
ICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCBmaWxsSlNWYWx1ZShHUFJSZWcgdGFn
R1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMp
CisgICAgdm9pZCBmaWxsSlNWYWx1ZShWYXJpYWJsRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVn
IHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1h
dEpTKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHUudi50YWdHUFIgPSB0YWdH
UFI7IC8vIEZJWE1FOiBmb3IgSlNWYWx1ZXMgd2l0aCBrbm93biB0eXBlIChib29sZWFuLCBpbnRl
Z2VyLCBjZWxsIGV0Yy4pIG5vIHRhZ0dQUiBpcyBuZWVkZWQ/CiAgICAgICAgIHUudi5wYXlsb2Fk
R1BSID0gcGF5bG9hZEdQUjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisg
ICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmls
bENlbGwoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxDZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0m
IHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBE
YXRhRm9ybWF0Q2VsbDsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBp
ZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwog
ICAgIH0KICNlbmRpZgotICAgIHZvaWQgZmlsbEludGVnZXIoR1BSUmVnIGdwcikKKyAgICB2b2lk
IGZpbGxJbnRlZ2VyKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAg
ICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAg
ICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAg
ICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxC
b29sZWFuKEdQUlJlZyBncHIpCisgICAgdm9pZCBmaWxsQm9vbGVhbihWYXJpYWJsZUV2ZW50U3Ry
ZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0
ID0gRGF0YUZvcm1hdEJvb2xlYW47CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAg
ICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3Ry
ZWFtKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsRG91YmxlKEZQUlJlZyBmcHIpCisgICAgdm9pZCBm
aWxsRG91YmxlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgRlBSUmVnIGZwcikKICAgICB7
CiAgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1fcmVnaXN0
ZXJGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZp
bGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmlsbFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAg
ICB2b2lkIGZpbGxTdG9yYWdlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdw
cikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsK
ICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NS
KQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KIAogICAgIGJv
b2wgYWxpdmUoKQpAQCAtMzAzLDEyICszNzQsMzMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKKyAgICB2b2lkIGFwcGVuZEZpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQg
PT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhW
YXJpYWJsZUV2ZW50OjpmaWxsRlBSKGtpbmQsIG1fbm9kZUluZGV4LCB1LmZwcikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
aWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIHN0cmVh
bS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwgbV9ub2RlSW5kZXgs
IHUucGFpci50YWdHUFIsIHUucGFpci5wYXlsb2FkR1BSKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxl
RXZlbnQ6OmZpbGxHUFIoa2luZCwgbV9ub2RlSW5kZXgsIHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kU3BpbGwoVmFyaWFibGVFdmVudEtpbmQg
a2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpzcGlsbChraW5kLCBtX25vZGVJbmRleCwgdmlydHVhbFJlZ2lzdGVyLCBtX3NwaWxsRm9y
bWF0KSk7CisgICAgfQorICAgIAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSBy
ZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgdmlydHVhbCByZWdpc3Rlci4KICAgICBOb2RlSW5kZXgg
bV9ub2RlSW5kZXg7CiAgICAgdWludDMyX3QgbV91c2VDb3VudDsKICAgICBEYXRhRm9ybWF0IG1f
cmVnaXN0ZXJGb3JtYXQ7CiAgICAgRGF0YUZvcm1hdCBtX3NwaWxsRm9ybWF0OwogICAgIGJvb2wg
bV9jYW5GaWxsOworICAgIGJvb2wgbV9ib3JuRm9yT1NSOwogICAgIHVuaW9uIHsKICAgICAgICAg
R1BSUmVnIGdwcjsKICAgICAgICAgRlBSUmVnIGZwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkxLDggKzE5MSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlu
a0IKICAgICAgICAgZXhpdC5tX2NoZWNrLmNvcnJlY3RMYXRlSnVtcChsaW5rQnVmZmVyKTsKICAg
ICB9CiAgICAgCi0gICAgY29kZUJsb2NrKCktPnNocmlua1dlYWtSZWZlcmVuY2VzVG9GaXQoKTsK
LSAgICBjb2RlQmxvY2soKS0+c2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRpb25zVG9GaXQoKTsK
KyAgICBjb2RlQmxvY2soKS0+c2hyaW5rREZHRGF0YVRvRml0KCk7CiB9CiAKIGJvb2wgSklUQ29t
cGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHTWluaWZpZWRHcmFwaF9oCisjZGVmaW5lIERGR01pbmlmaWVkR3JhcGhfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR01pbmlmaWVkTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgTWluaWZpZWRHcmFwaCB7CitwdWJsaWM6CisgICAgTWluaWZpZWRHcmFwaCgpIHsg
fQorCisgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IE1pbmlmaWVkTm9kZSogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2VhcmNoPE1pbmlmaWVk
Tm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKKyAgICAgICAgICAgICAg
ICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBXVEY6OktleU11c3RO
b3RCZVByZXNlbnRJbkFycmF5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5pbmRleCgpICE9IG5vZGVJ
bmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZW50cnk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9saXN0LnNpemUoKSB8fCBub2RlLmluZGV4KCkgPiBtX2xpc3Qu
bGFzdCgpLmluZGV4KCkpOworICAgICAgICBtX2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNocmlua1RvRml0KCkKKyAgICB7CisgICAgICAgIG1fbGlzdC5zaHJpbmtU
b0ZpdCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8TWluaWZpZWROb2RlPiBtX2xp
c3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR01pbmlmaWVkR3JhcGhfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZE5v
ZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK01pbmlmaWVkTm9kZSBNaW5pZmllZE5v
ZGU6OmZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCit7CisgICAgaWYg
KGhhc0NoaWxkKG5vZGUub3AoKSkpCisgICAgICAgIHJldHVybiBub2RlV2l0aENoaWxkKG5vZGVJ
bmRleCwgbm9kZS5vcCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgIAorICAgIHJldHVy
biBub2RlV2l0aENvbnN0YW50TnVtYmVyKG5vZGVJbmRleCwgbm9kZS5vcCgpLCBub2RlLmNvbnN0
YW50TnVtYmVyKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNaW5p
ZmllZE5vZGVfaAorI2RlZmluZSBERkdNaW5pZmllZE5vZGVfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5o
IgorI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworc3RydWN0IE5vZGU7CisKK2lubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3Jh
cGgoTm9kZVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpTQ29u
c3RhbnQ6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgor
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2NsYXNzIE1pbmlmaWVkTm9k
ZSB7CitwdWJsaWM6CisgICAgTWluaWZpZWROb2RlKCkgeyB9CisgICAgCisgICAgc3RhdGljIE1p
bmlmaWVkTm9kZSBub2RlV2l0aENoaWxkKE5vZGVJbmRleCBpbmRleCwgTm9kZVR5cGUgb3AsIE5v
ZGVJbmRleCBjaGlsZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDaGlsZChvcCkpOworICAg
ICAgICBNaW5pZmllZE5vZGUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4
OworICAgICAgICByZXN1bHQubV9vcCA9IG9wOworICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5m
byA9IGNoaWxkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgTWluaWZpZWROb2RlIG5vZGVXaXRoQ29uc3RhbnROdW1iZXIoTm9kZUluZGV4IGluZGV4LCBO
b2RlVHlwZSBvcCwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCisgICAgeworICAgICAgICBBU1NF
UlQoaGFzQ29uc3RhbnROdW1iZXIob3ApKTsKKyAgICAgICAgTWluaWZpZWROb2RlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fb3AgPSBv
cDsKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPckluZm8gPSBjb25zdGFudE51bWJlcjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE1pbmlmaWVkTm9kZSBm
cm9tTm9kZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2RlKTsKKyAgICAKKyAgICBOb2Rl
SW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTm9kZVR5cGUgb3Ao
KSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgCisgICAgYm9vbCBoYXNDaGlsZDEoKSBjb25z
dCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQorICAgIAorICAgIE5vZGVJbmRleCBjaGlsZDEo
KSBjb25zdCB7CisgICAgICAgIEFTU0VSVChoYXNDaGlsZChtX29wKSk7CisgICAgICAgIHJldHVy
biBtX2NoaWxkT3JJbmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0NvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBjb25zdGFudE51bWJlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzQ29uc3Rh
bnROdW1iZXIobV9vcCkpOworICAgICAgICByZXR1cm4gbV9jaGlsZE9ySW5mbzsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIE5vZGVJbmRleCBnZXRJbmRleChNaW5pZmllZE5vZGUqIG5vZGUpIHsg
cmV0dXJuIG5vZGUtPmluZGV4KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGJvb2wg
aGFzQ2hpbGQoTm9kZVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgor
ICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgc3RhdGljIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoTm9kZVR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0eXBlID09IEpTQ29uc3RhbnQ7CisgICAgfQorICAgIAorICAg
IE5vZGVJbmRleCBtX2luZGV4OworICAgIE5vZGVUeXBlIG1fb3A7CisgICAgdW5zaWduZWQgbV9j
aGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdyYXBoIGhhdmUgb25seSBvbmUg
Y2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZpZWROb2RlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5j
bHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDEx
MjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDE3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVOdW1WYXJpYWJsZXNGb3JDb2RlT3JpZ2lu
KAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQotewotICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJldHVy
biBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotICAgIHJldHVybgotICAgICAgICBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKwotICAgICAgICBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwotfQotCi1PU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5
SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKICAgICAsIG1fdmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fY2hlY2soY2hlY2spCkBAIC01MiwyNCAr
NDIsMTAgQEAgT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlUwogICAgICwg
bV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX2tpbmQoa2luZCkKICAgICAs
IG1fY291bnQoMCkKLSAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQot
ICAgICwgbV92YXJpYWJsZXMoY29tcHV0ZU51bVZhcmlhYmxlc0ZvckNvZGVPcmlnaW4oaml0LT5t
X2ppdC5ncmFwaCgpLm1fcHJvZmlsZWRCbG9jaywgaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpKQor
ICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQo
aml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewogICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQo
KSk7Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBq
aXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsK
LSAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5z
aXplKCk7ICsrdmFyaWFibGUpCi0gICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwotfQot
Ci12b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAotewotICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVu
dCkKLSAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdLmR1bXAob3V0KTsKLSAgICBmcHJpbnRm
KG91dCwgIiA6ICIpOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8
IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFy
aWFibGVdLmR1bXAob3V0KTsKIH0KIAogYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdDb3Jy
ZWN0YWJsZUp1bXBQb2ludC5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCkBAIC04Myw3ICs4NCw3IEBAIHBy
aXZhdGU6CiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1
bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KIHN0cnVjdCBPU1JF
eGl0IHsKLSAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1
bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1
ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292
ZXJ5SW5kZXggPSAwKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwog
ICAgIApAQCAtOTksMzggKzEwMCw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBFeGl0S2luZCBt
X2tpbmQ7CiAgICAgdWludDMyX3QgbV9jb3VudDsKICAgICAKLSAgICAvLyBDb252ZW5pZW50IHdh
eSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKLSAgICAvLyBn
ZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxlLgotICAgIGludCBudW1iZXJPZlJl
Y292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxl
cy5zaXplKCk7IH0KLSAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGludCBp
bmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMu
c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKLSAgICAgICAg
cmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpXTsKLSAgICB9Ci0g
ICAgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCi0g
ICAgewotICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpCi0gICAgICAgICAg
ICByZXR1cm4gbV9hcmd1bWVudHNbb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCldOwotICAgICAg
ICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07Ci0gICAgfQotICAgIGJvb2wgaXNBcmd1bWVu
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXpl
KCk7IH0KLSAgICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNB
cmd1bWVudChpbmRleCk7IH0KLSAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgfQotICAgIGludCB2YXJpYWJs
ZUZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleCAt
IG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQg
aW5kZXgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRz
LnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChpbmRleCk7Ci0g
ICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKLSAgICB9Ci0gICAgCiAg
ICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0Nv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKICAgICB7CiAgICAgICAgIGlm
ICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQpAQCAtMTM4LDExICsx
MDcsMTAgQEAgc3RydWN0IE9TUkV4aXQgewogICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAgICAKLSAgICBW
ZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7Ci0gICAgVmVjdG9yPFZhbHVlUmVj
b3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAgICAg
aW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgCisgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVy
cmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDExMjMy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksMTEgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkg
JiYgVVNFKEpTVkFMVUU2NCkKIAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKK3ZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYg
b3BlcmFuZHMsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQogewogICAgIC8vIDEpIFBy
by1mb3JtYSBzdHVmZi4KICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCkBAIC00NCw3ICs0
NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAg
ZGF0YUxvZygiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpKTsKICAgICB9CiAgICAgZGF0YUxvZygiKSAgIik7Ci0gICAgZXhpdC5kdW1wKFdURjo6
ZGF0YUZpbGUoKSk7CisgICAgZHVtcE9wZXJhbmRzKG9wZXJhbmRzLCBXVEY6OmRhdGFGaWxlKCkp
OwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCiAg
ICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRp
b25GYWlsdXJlRGVidWdJbmZvOwpAQCAtMTEwLDcgKzExMSw3IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywKICAgICAv
LyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQg
aW50cy4KICAgICAgICAgICAgIAotICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIFZlY3Rvcjxib29sPiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnMob3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkK
ICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7CiAKQEAgLTEyOCw4
ICsxMjksOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ym9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlVUludDMycyA9IGZhbHNl
OwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
QEAgLTE0NCw4ICsxNDUsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QgCiAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBO
b3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQogICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwg
c28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCiAgICAg
ICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCi0gICAgICAgICAgICBpZiAocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZp
cnR1YWxSZWdpc3RlcigpIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChvcGVyYW5kcy5sb2NhbChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0
ZXIoKSkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgogICAgICAg
ICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBV
SW50MzJJbkdQUjoKQEAgLTIxOCw4ICsyMTksOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29t
cGlsZUV4aXQoY29uc3QgCiAgICAgLy8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdl
cnMuCiAgICAgCiAgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzIHx8IGhhdmVVSW50MzJzKSB7Ci0g
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgY2FzZSBVbmJv
eGVkSW50MzJJbkdQUjoKICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuZ3ByKCkgIT0gYWxy
ZWFkeUJveGVkKQpAQCAtMjI3LDcgKzIyOCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6Ci0g
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDx1aW50MzJfdD4oVGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhl
bHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVtYmVy
ID4+IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4ob3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgVUludDMySW5HUFI6
IHsKQEAgLTI3OCwxOSArMjc5LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hh
bmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CiAgICAgLy8gICAgbW9z
dCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVk
cyB0byBiZSBkdW1wZWQuCiAgICAgCi0gICAgaW5pdGlhbGl6ZVBvaXNvbmVkKGV4aXQubV92YXJp
YWJsZXMuc2l6ZSgpKTsKKyAgICBpbml0aWFsaXplUG9pc29uZWQob3BlcmFuZHMubnVtYmVyT2ZM
b2NhbHMoKSk7CiAgICAgdW5zaWduZWQgY3VycmVudFBvaXNvbkluZGV4ID0gMDsKICAgICAKLSAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7Ci0gICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CisgICAgICAgIGludCBvcGVyYW5kID0gb3BlcmFuZHMu
b3BlcmFuZEZvckluZGV4KGluZGV4KTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgewogICAgICAgICBjYXNlIEluR1BSOgogICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgogICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgotICAgICAgICAgICAgaWYgKGV4aXQuaXNW
YXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVG
b3JJbmRleChpbmRleCldKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShp
bmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgewogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlY292ZXJ5Lmdw
cigpLCBzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKLSAgICAgICAgICAgICAg
ICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldID0g
Y3VycmVudFBvaXNvbkluZGV4OworICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGlj
ZXNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4
OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKQEAgLTMw
NSw4ICszMDYsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgaWYgKGhhdmVGUFJzKSB7CiAgICAgICAgIC8vIDcpIEJveCBhbGwgZG91YmxlcyAocmVsaWVz
IG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQUnMpCiAgICAgICAgIAotICAgICAgICBm
b3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytp
bmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0
LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKQEAgLTMxNywxNyArMzE4
LDE3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAg
Ly8gOCkgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUg
c2NyYXRjaCBzdG9yYWdlIGlmCiAgICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFs
IHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRz
LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gSW5GUFIpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5
LmZwcigpKSk7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNv
bkluZGV4KTsKLSAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFy
aWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OworICAgICAgICAgICAg
ICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRl
eCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lzb25J
bmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAg
LTMzNSwxMyArMzM2LDEzIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAKICAgICAvLyA5KSBCb3ggYWxsIHVuYm94ZWQgZG91YmxlcyBpbiB0aGUgcmVnaXN0
ZXIgZmlsZS4KICAgICBpZiAoaGF2ZVVuYm94ZWREb3VibGVzKSB7Ci0gICAgICAgIGZvciAoaW50
IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7
Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZERvdWJsZSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNz
ZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAg
ICAgIG1faml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7Ci0g
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMzU3LDggKzM1OCw4IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8v
IHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KICAgICAgICAgCiAgICAgICAgICAgICB1bnNp
Z25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292
ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBv
cGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKQEAgLTM4NCwxMyArMzg1LDEz
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBj
YXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBE
b3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86
OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MTYsOCArNDE3LDggQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQg
SklUKSBsb2NhdGlvbnMuCiAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgc2NyYXRjaElu
ZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKQEAgLTQ0NSwx
NCArNDQ2LDE0IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBzY3JhdGNoSW5kZXggPSBudW1iZXJP
ZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0g
MDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9w
ZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRj
aCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlOgogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNDY3LDExICs0NjgsMTEgQEAgdm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vIDExKSBEdW1wIGFsbCBw
b2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KICAgICAKICAgICBpZiAobnVtYmVyT2ZQb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0g
MDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0
dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmly
dHVhbFJlZ2lzdGVyIDwgKGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK3ZpcnR1YWxS
ZWdpc3RlcikgewogICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmly
dHVhbFJlZ2lzdGVyXSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFi
bGVzW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IG9wZXJhbmRzLmxvY2FsKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluR1BSOgog
ICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKQEAgLTQ5NCwxNCArNDk1LDE0IEBA
IHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgaWYgKGhh
dmVVbmRlZmluZWQpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25z
dGFudCgpLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkp
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE5ICs2MywyOSBAQCB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAgIC0+aml0Q29tcGlsZSgqZ2xv
YmFsRGF0YSk7CiAgICAgfQogICAgIAorICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJp
ZXMuCisgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFuZHM7CisgICAgY29kZUJsb2Nr
LT52YXJpYWJsZUV2ZW50U3RyZWFtKCkucmVjb25zdHJ1Y3QoY29kZUJsb2NrLCBleGl0Lm1fY29k
ZU9yaWdpbiwgY29kZUJsb2NrLT5taW5pZmllZERGRygpLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9w
ZXJhbmRzKTsKKyAgICAKKyAgICAvLyBUaGVyZSBtYXkgYmUgYW4gb3ZlcnJpZGUsIGZvciBmb3J3
YXJkIHNwZWN1bGF0aW9ucy4KKyAgICBpZiAoISFleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
KSB7CisgICAgICAgIG9wZXJhbmRzLnNldE9wZXJhbmQoCisgICAgICAgICAgICBleGl0Lm1fdmFs
dWVSZWNvdmVyeU92ZXJyaWRlLT5vcGVyYW5kLCBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
LT5yZWNvdmVyeSk7CisgICAgfQorICAgIAogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292
ZXJ5ID0gMDsKICAgICBpZiAoZXhpdC5tX3JlY292ZXJ5SW5kZXgpCiAgICAgICAgIHJlY292ZXJ5
ID0gJmNvZGVCbG9jay0+c3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCAt
IDEpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2coIkdlbmVy
YXRpbmcgT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4i
LCBleGl0SW5kZXgsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2Rl
SW5kZXgsIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCBjb2RlQmxvY2spOworICAgIGRh
dGFMb2coIkdlbmVyYXRpbmcgT1NSIGV4aXQgIyV1IChzZXEjJXUsIGJjIyV1LCBAJXUsICVzKSBm
b3IgY29kZSBibG9jayAlcC5cbiIsIGV4aXRJbmRleCwgZXhpdC5tX3N0cmVhbUluZGV4LCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRv
U3RyaW5nKGV4aXQubV9raW5kKSwgY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgewogICAgICAg
ICBBc3NlbWJseUhlbHBlcnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CiAgICAgICAgIE9T
UkV4aXRDb21waWxlciBleGl0Q29tcGlsZXIoaml0KTsKICAgICAgICAgCi0gICAgICAgIGV4aXRD
b21waWxlci5jb21waWxlRXhpdChleGl0LCByZWNvdmVyeSk7CisgICAgICAgIGV4aXRDb21waWxl
ci5jb21waWxlRXhpdChleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKICAgICAg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2NrKTsK
ICAgICAgICAgZXhpdC5tX2NvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2
aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxh
dGlvblJlY292ZXJ5Kik7CisgICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBPU1JFeGl0JiwgY29u
c3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7CiAKIHBy
aXZhdGU6CiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMTIz
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEludGVnZXIoTm9kZUkKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtOTAsNyArOTAsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQ
Uik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMu
cmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwot
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gcGF5bG9hZEdQUjsKICAgICB9CkBAIC0x
MjIsMTMgKzEyMiwxMyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUlu
CiAgICAgICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9z
dHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICB9
IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAg
IEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWRE
b3VibGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZUluZGV4KSwgZnByKTsKICAgICAgICAg
ICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBmcHI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KQEAgLTE0MSw3ICsxNDEsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVy
biBmcHI7CiAgICAgICAgICAgICB9CiAKQEAgLTE2MSw3ICsxNjEsNyBAQCBGUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgaGFzVW5ib3hlZERv
dWJsZS5saW5rKCZtX2ppdCk7CiAKICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsK
ICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMDYsNyArMjA2
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICBt
X2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2socGF5bG9hZEdQUik7
CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJE
b3VibGUpOwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxs
RG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAg
ICAgICByZXR1cm4gZnByOwogICAgIH0KQEAgLTI1MSw3ICsyNTEsNyBAQCBib29sIFNwZWN1bGF0
aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCkucGF5bG9hZCgpKSwgcGF5bG9hZEdQUik7CiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkgPyBE
YXRhRm9ybWF0SlNJbnRlZ2VyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIGluZm8uZmls
bEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChu
b2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGls
bEZvcm1hdCgpOwogICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lICYmIHNwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsKQEAgLTI3Nyw3ICsyNzcs
NyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwg
cGF5bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHBh
eWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRKU0RvdWJsZSA/IERhdGFGb3JtYXRKUyA6IHNwaWxsRm9ybWF0KTsKKyAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIHNwaWxs
Rm9ybWF0ID09IERhdGFGb3JtYXRKU0RvdWJsZSA/IERhdGFGb3JtYXRKUyA6IHNwaWxsRm9ybWF0
KTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzE5LDcgKzMxOSw3IEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAgICAgICAgbV9ncHJz
LnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
dGFnR1BSLCBwYXlsb2FkR1BSLCBmaWxsRm9ybWF0KTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIApAQCAtMzM0LDcgKzMzNCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxKU1ZhbHVlKE5vZGVJbmQKICAgICAgICAgbV9mcHJzLnJlbGVhc2Uob2xkRlBSKTsK
ICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJKUyk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2Fk
R1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwg
dGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKQEAgLTEwMDQsNyArMTAwNCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIodmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZUluZGV4KSksIGdwcik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0s
IGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAg
ICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KQEAgLTEwMTksNyArMTAxOSw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbElu
dGVnZXIoZ3ByKTsKKyAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAg
ICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KQEAgLTEwMzcsNyArMTAzNyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAg
ICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5
bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySW50ZWdlcik7Ci0gICAgICAgIGlu
Zm8uZmlsbEludGVnZXIocGF5bG9hZEdQUik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1f
c3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCBy
ZXR1cm4uCiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAg
ICByZXR1cm4gcGF5bG9hZEdQUjsKQEAgLTEwOTgsMTMgKzEwOTgsMTMgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIg
PSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5v
ZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50
KG5vZGVJbmRleCksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExMTUsNyArMTEx
NSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGZw
cik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIp
OworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KIApAQCAtMTEzNyw3ICsxMTM3
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAg
ICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTE3Myw3ICsxMTczLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlRG91YgogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3By
cy51bmxvY2socGF5bG9hZEdQUik7CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnBy
KTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgaW5m
by5raWxsU3BpbGxlZCgpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KQEAgLTEyMzAsNyAr
MTIzMCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwo
KSksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxDZWxsKGdwcik7CisgICAgICAgICAgICBp
bmZvLmZpbGxDZWxsKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgIH0KIApAQCAtMTI0MCw3ICsxMjQwLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5mby5maWxsQ2VsbChncHIpOworICAgICAgICBpbmZv
LmZpbGxDZWxsKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAK
QEAgLTEyNjIsNyArMTI2Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJl
bGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ2VsbCk7Ci0gICAgICAgIGluZm8uZmlsbENlbGwocGF5
bG9hZEdQUik7CisgICAgICAgIGluZm8uZmlsbENlbGwoKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsK
ICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CiAgICAgfQogCkBAIC0xMzAzLDcgKzEzMDMsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoanNWYWx1ZS5hc0Jvb2xlYW4oKSksIGdw
cik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFuKGdwcik7CisgICAgICAgICAgICBpbmZv
LmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgIH0KIApAQCAtMTMxNSw3ICsxMzE1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIpOworICAgICAgICBp
bmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICB9CiAKQEAgLTEzMzgsNyArMTMzOCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9n
cHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQ
UiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9vbGVhbik7Ci0gICAgICAgIGluZm8uZmls
bEJvb2xlYW4ocGF5bG9hZEdQUik7CisgICAgICAgIGluZm8uZmlsbEJvb2xlYW4oKm1fc3RyZWFt
LCBwYXlsb2FkR1BSKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAg
ICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgewogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJ
bmRleCkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAg
ICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtNzMsNyArNzMsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgIC8vIFNpbmNlIHdlIHN0YXRp
Y2FsbHkga25vdyB0aGF0IHdlJ3JlIGZpbGxpbmcgYW4gaW50ZWdlciwgYW5kIHZhbHVlcwogICAg
ICAgICAvLyBpbiB0aGUgUmVnaXN0ZXJGaWxlIGFyZSBib3hlZCwgdGhpcyBtdXN0IGJlIERhdGFG
b3JtYXRKU0ludGVnZXIuCiAgICAgICAgIC8vIFdlIHdpbGwgY2hlY2sgdGhpcyB3aXRoIGEgaml0
QXNzZXJ0IGJlbG93LgotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpT
SW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKU0ludGVnZXIpOwogICAgICAgICB1bmxvY2soZ3ByKTsKICAgICB9CiAKQEAgLTEyNiw3
ICsxMjYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3By
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAg
aW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIo
Km1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAg
ICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAg
ICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKQEAgLTEzNSw3ICsxMzUsNyBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgdW5s
b2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3Vi
bGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KQEAgLTE0Myw3
ICsxNDMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMp
OwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewpAQCAtMTUzLDcgKzE1Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERv
dWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsK
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihm
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCpt
X3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIApAQCAtMTYyLDcgKzE2Miw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihn
cHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwog
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQpAQCAtMTczLDcgKzE3Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bERvdWJsZShOb2RlSW4KICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAg
ICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkBAIC0yMTUsNyArMjE1LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91
YmxlKE5vZGVJbgogICAgICAgICBtX2dwcnMudW5sb2NrKGpzVmFsdWVHcHIpOwogICAgICAgICBt
X2dwcnMudW5sb2NrKHRlbXBHcHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGlu
Zm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNDYsNyAr
MjQ2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICBtX2dwcnMucmVsZWFzZShncHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKIAotICAgICAgICBpbmZvLmZpbGxEb3VibGUo
ZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAg
cmV0dXJuIGZwcjsKICAgICB9CiAKQEAgLTI3MywxOCArMjczLDE4IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKIAogICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKSB7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7
CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1i
ZXIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSks
IGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4
KSkgewotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNE
b3VibGUpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpT
VmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0
YW50KTsKQEAgLTMwNCw3ICszMDQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1Zh
bHVlKE5vZGVJCiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMzIwLDcgKzMyMCw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgfQogICAgICAgICBtX2dwcnMu
bG9jayhncHIpOwogICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIGdwcik7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZv
cm1hdEpTSW50ZWdlcik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0zMjksNyAr
MzI5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAg
ICBHUFJSZWcgZ3ByID0gYm94RG91YmxlKGZwcik7CiAKICAgICAgICAgLy8gVXBkYXRlIGFsbCBp
bmZvCi0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwor
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3Vi
bGUpOwogICAgICAgICBtX2ZwcnMucmVsZWFzZShmcHIpOwogICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogCkBAIC0xMDE2LDcgKzEwMTYs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQp
OwogICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIp
OworICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgIH0KQEAgLTEwMzEsNyArMTAzMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3
YXMgc3BpbGxlZCBhcyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCiAg
ICAgICAgICAgICBpZiAoc3RyaWN0KSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbElu
dGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAg
ICB9CkBAIC0xMDQwLDE0ICsxMDQwLDE0IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUludEkKICAgICAgICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRK
U0ludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3By
KTsKIAogICAgICAgICAvLyBGaWxsIGFzIEpTVmFsdWUsIGFuZCBmYWxsIHRocm91Z2guCi0gICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAg
ICAgICAgIG1fZ3Bycy51bmxvY2soZ3ByKTsKICAgICB9CiAKQEAgLTEwNTYsNyArMTA1Niw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgR1BSUmVn
IGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1h
dEpTSW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERh
dGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJl
dHVybi4KICAgICAgICAgaWYgKCFzdHJpY3QpIHsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9
IERhdGFGb3JtYXRKU0ludGVnZXI7CkBAIC0xMDc3LDcgKzEwNzcsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdGUoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGdwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1faml0Lnplcm9FeHRl
bmQzMlRvUHRyKGdwciwgcmVzdWx0KTsKQEAgLTExNTgsNyArMTE1OCw3IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKIAogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIp
OworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKQEAgLTExNjgsNyArMTE2OCw3IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKIAogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwpAQCAtMTE4MSw3ICsxMTgxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGZwcik7CiAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsK
ICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTE5
MCw3ICsxMTkwLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91Ygog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgIGlu
Zm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3Ry
ZWFtLCBncHIpOwogICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTIwMSw3ICsxMjAxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZv
cm1hdEpTKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICB1bmxvY2soZ3By
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjQzLDcgKzEyNDMsNyBAQCBG
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy51
bmxvY2soanNWYWx1ZUdwcik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91Ymxl
KCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICBy
ZXR1cm4gZnByOwogICAgIH0KQEAgLTEyNzQsNyArMTI3NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAg
ICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJs
ZSk7CiAKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERv
dWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogCkBAIC0x
MzEyLDcgKzEzMTIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxs
CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihq
c1ZhbHVlLmFzQ2VsbCgpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwpAQCAtMTMyMiwx
MCArMTMyMiwxMCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGls
bGVkKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBncHIpOwogCi0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRh
Rm9ybWF0SlMpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRK
U0NlbGwpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICB9CiAKQEAgLTEzNDAsNyArMTM0MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAg
IG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CisgICAgICAgIGluZm8uZmls
bEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1
cm4gZ3ByOwogICAgIH0KIApAQCAtMTM4NSw3ICsxMzg1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFu
KCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsK
LSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0
YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwpAQCAtMTM5NSwxMyArMTM5NSwxMyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5yZXRh
aW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIp
OwogCi0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKICAgICAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCBncHIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4x
KSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIElu
dmFsaWRHUFJSZWcpKTsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9Ci0gICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xNDE4LDcgKzE0MTgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1faml0LnhvclB0cihUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4p
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNC
b29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTE4NDYsNyArMTg0Niw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2
ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxl
IGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwK
ICAgICAgICAgICAgICAgICAvLyBidXQgdGhhdCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUuCi0g
ICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwo
KSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAg
cmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVy
RmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAK
QEAgLTE4NTUsNyArMTg1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdw
cigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3Vy
Y2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMklu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg2NSw3ICsxODY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjZWxsR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsK
ICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2Fs
KG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xODc1LDE0ICsxODc1LDE0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0J5dGVBcnJheTo6c19pbmZvKSkpOwogICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9k
ZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAg
ICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShDZWxsSW5SZWdp
c3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgYm9vbGVhbih0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihib29sZWFuLmdwcigpLCBKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3Rl
ckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFs
dWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
dmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0
ZXJGaWxlKTsKKyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJj
ZShWYWx1ZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywyMiBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK1NwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChK
SVRDb21waWxlciYgaml0KQorICAgIDogbV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9qaXQo
aml0KQorICAgICwgbV9jb21waWxlSW5kZXgoMCkKKyAgICAsIG1faW5kZXhJbkJsb2NrKDApCisg
ICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lz
dGVycykKKyAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCisg
ICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkKKyAgICAs
IG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQorICAgICwgbV9sYXN0U2V0T3Bl
cmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICwgbV9zdGF0ZShqaXQu
Z3JhcGgoKSkKKyAgICAsIG1fc3RyZWFtKCZqaXQuY29kZUJsb2NrKCktPnZhcmlhYmxlRXZlbnRT
dHJlYW0oKSkKKyAgICAsIG1fbWluaWZpZWRHcmFwaCgmaml0LmNvZGVCbG9jaygpLT5taW5pZmll
ZERGRygpKQoreworfQorCiAvLyBPbiBXaW5kb3dzIHdlIG5lZWQgdG8gd3JhcCBmbW9kOyBvbiBv
dGhlciBwbGF0Zm9ybXMgd2UgY2FuIGNhbGwgaXQgZGlyZWN0bHkuCiAvLyBPbiBBUk12NyB3ZSBh
c3NlcnQgdGhhdCBhbGwgZnVuY3Rpb24gcG9pbnRlcnMgaGF2ZSB0byBsb3cgYml0IHNldCAocG9p
bnQgdG8gdGh1bWIgY29kZSkuCiAjaWYgQ0FMTElOR19DT05WRU5USU9OX0lTX1NURENBTEwgfHwg
Q1BVKEFSTV9USFVNQjIpCkBAIC02NCw3ICs4MCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFN0b3JhZ2UoTm9kZUkKICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICBpbmZvLmZp
bGxTdG9yYWdlKGdwcik7CisgICAgICAgIGluZm8uZmlsbFN0b3JhZ2UoKm1fc3RyZWFtLCBncHIp
OwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KICAgICAgICAgCkBAIC03NDMsMzMgKzc1OSw2
IEBAIEZQUlRlbXBvcmFyeTo6RlBSVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSkkKIH0KICNlbmRpZgog
Ci12b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKLXsKLSAgICBzd2l0Y2gg
KGtpbmQoKSkgewotICAgIGNhc2UgU291cmNlTm90U2V0OgotICAgICAgICBmcHJpbnRmKG91dCwg
Ik5vdFNldCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6
Ci0gICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJJbnQzMiIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENlbGxJblJlZ2lzdGVyRmlsZToKLSAgICAgICAg
ZnByaW50ZihvdXQsICJDZWxsIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm9vbGVhbklu
UmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIkJvb2wiKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQs
ICJEb3VibGUiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBIYXZlTm9kZToKLSAgICAgICAg
ZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFu
Y2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRv
dWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJy
YW5jaE5vZGVJbmRleCk7CkBAIC04ODMsMTIgKzg3MiwzMSBAQCBib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aChOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2Rl
KQoreworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxS
ZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOworICAgIAorICAgIGlmICghaW5mby5ub3RpY2VPU1JCaXJ0aCgqbV9z
dHJlYW0sIHZpcnR1YWxSZWdpc3RlcikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAo
YmVsb25nc0luTWluaWZpZWRHcmFwaChub2RlLm9wKCkpKQorICAgICAgICBtX21pbmlmaWVkR3Jh
cGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG5vZGVJbmRleCwgbm9kZSkpOworfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQogewogICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJbmRleEZv
ck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFz
dFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChu
b2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCks
IGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAg
ICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hp
bGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCAr
OTEwLDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBE
RkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50
KCk7CiAjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0
YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxvY2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyNlbmRp
ZgorICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6cmVzZXQo
KSk7CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CisgICAgICAgIFZhbHVlU291cmNlIHZh
bHVlU291cmNlOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFw
aCgpLmFyZ3VtZW50SXNDYXB0dXJlZChpKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5v
ZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCku
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJndW1lbnRz
W2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFG
b3JtYXQoKSkpOwogICAgIH0KICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7CkBAIC05MTgsMTIg
KzkzNSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAg
QVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVz
QXRIZWFkLmxvY2FsKGkpOworICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAg
ICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVy
ZWQoaSkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICBtX3Zh
cmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAg
ICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQ
cmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9u
KGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAg
ICAgIG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBl
bmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1h
dCgpKSk7CiAgICAgfQogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwpAQCAtOTM2LDYgKzk1NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIHZlcmlmaWNhdGlvblN1Y2NlZWRlZC5s
aW5rKCZtX2ppdCk7CiAgICAgfQogCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
IGRhdGFMb2coIlxuIik7CisjZW5kaWYKKwogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBt
X2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAg
ICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKICAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKQEAgLTk4OCw2ICsxMDEyLDE3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsZSBwcm94
eSBub2Rlcy4KKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAg
ICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgbm90aWNlT1NSQmly
dGgobV9jb21waWxlSW5kZXgsIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgIGlm
IChub2RlLmhhc1Jlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwpAQCAtMTAwOCwx
NiArMTA0Myw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNl
bmRpZgogICAgICAgICB9CiAgICAgICAgIAotI2lmIERGR19FTkFCTEUoVkVSQk9TRV9WQUxVRV9S
RUNPVkVSSUVTKQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoYXJndW1lbnRU
b09wZXJhbmQoaSkpLmR1bXAoc3RkZXJyKTsKLSAgICAgICAgCi0gICAgICAgIGRhdGFMb2coIiA6
ICIpOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IDA7IG9wZXJhbmQgPCAo
aW50KW1fdmFyaWFibGVzLnNpemUoKTsgKytvcGVyYW5kKQotICAgICAgICAgICAgY29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOwotI2VuZGlmCi0KICNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGRhdGFMb2coIlxuIik7CiAjZW5kaWYKQEAg
LTEyNTQsMTM2ICsxMjc5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVz
KExpbmsKIAogVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlKQogewotICAgIHN3aXRjaCAodmFs
dWVTb3VyY2Uua2luZCgpKSB7Ci0gICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7Ci0gICAgICAg
IAotICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7Ci0KLSAgICBjYXNl
IENlbGxJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVh
ZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGwoKTsKLQotICAgIGNhc2UgQm9vbGVhbkluUmVn
aXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0
ZXJGaWxlQXNVbmJveGVkQm9vbGVhbigpOwotICAgICAgICAKLSAgICBjYXNlIERvdWJsZUluUmVn
aXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0
ZXJGaWxlQXNVbmJveGVkRG91YmxlKCk7Ci0KLSAgICBjYXNlIEhhdmVOb2RlOiB7Ci0gICAgICAg
IGlmIChpc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKLSAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCh2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJj
ZS5ub2RlSW5kZXgoKSkpOwotICAgIAotICAgICAgICBOb2RlKiBub2RlUHRyID0gJmF0KHZhbHVl
U291cmNlLm5vZGVJbmRleCgpKTsKLSAgICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0
ZSgpKSB7Ci0gICAgICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9i
b2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAotICAgICAgICAgICAgLy8g
ZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUg
T1NSLgotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICB9Ci0gICAgCi0gICAgICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRy
ID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAg
ICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpIHsKLSAgICAgICAgICAgIC8vIFRyeSB0byBzZWUgaWYgdGhlcmUg
aXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1ZSB3ZSB3YW50
LgotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBJbnQzMlRvRG91YmxlOiBXZSBjYW4gdXNlIHRoaXMgaW4g
cGxhY2Ugb2YgdGhlIG9yaWdpbmFsIG5vZGUsIGJ1dAotICAgICAgICAgICAgLy8gICAgd2UnZCBy
YXRoZXIgbm90OyBzbyB3ZSB1c2UgaXQgb25seSBpZiBpdCBpcyB0aGUgb25seSByZW1haW5pbmcK
LSAgICAgICAgICAgIC8vICAgIGxpdmUgdmVyc2lvbi4KLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAvLyBWYWx1ZVRvSW50MzI6IElmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24g
b2YgdGhlIHZhbHVlIGlzCi0gICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2Ug
Y2FuIHVzZSBpdC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBVSW50MzJUb051bWJl
cjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVt
YmVyCi0gICAgICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBv
bmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKLSAgICAgICAgICAgIC8vICAg
IHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBh
IFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCi0gICAgICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBp
cyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9m
Ci0gICAgICAgICAgICAvLyAgICB0aGUgbnVtYmVyIHdvdWxkIGJlIGZpbmUgd2l0aCBhIFVJbnQz
MiBpbnRlcm1lZGlhdGUuCi0gICAgICAgIAotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgpID09IFVJbnQzMlRvTnVt
YmVyKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNo
aWxkMSgpLmluZGV4KCk7Ci0gICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZhdChub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkg
JiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgaWYg
KCFmb3VuZCkgewotICAgICAgICAgICAgICAgIE5vZGVJbmRleCBpbnQzMlRvRG91YmxlSW5kZXgg
PSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0g
Tm9Ob2RlOwotICAgICAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0g
Tm9Ob2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCB2aXJ0
dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCBtX2dlbmVyYXRpb25JbmZvLnNpemUo
KTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGlvbklu
Zm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9k
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAg
ICBOb2RlJiBub2RlID0gYXQoaW5mby5ub2RlSW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJs
ZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGludDMyVG9Eb3VibGVJbmRleCA9IGluZm8ubm9k
ZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRv
SW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXhUb1VzZTsKLSAgICAgICAgICAgICAgICBpZiAoaW50MzJUb0RvdWJsZUlu
ZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBpbnQz
MlRvRG91YmxlSW5kZXg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVl
VG9JbnQzMkluZGV4OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQz
MlRvTnVtYmVySW5kZXg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZVB0ciA9ICZhdChub2RlSW5kZXhUb1VzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJbmRl
eCgpID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoIWZvdW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25z
dGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgfQorICAgIGlmICh2YWx1ZVNvdXJjZS5pc0lu
UmVnaXN0ZXJGaWxlKCkpCisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZS52YWx1ZVJlY292ZXJ5
KCk7CiAgICAgCi0gICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpKTsKLQotICAgICAgICBp
ZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAg
ICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mb1B0ci0+ZnBy
KCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVn
aXN0ZXJGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKGluZm9QdHItPnRhZ0dQUigpLCBpbmZvUHRyLT5wYXlsb2FkR1BS
KCkpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5m
b1B0ci0+Z3ByKCksIGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQotICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4obm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCkpLCBpbmZv
UHRyLT5zcGlsbEZvcm1hdCgpKTsKKyAgICBBU1NFUlQodmFsdWVTb3VyY2Uua2luZCgpID09IEhh
dmVOb2RlKTsKKyAgICBpZiAoaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCh2YWx1ZU9mSlNDb25zdGFudCh2
YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOwogICAgIAotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeSgpOwotICAgIH0KKyAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwog
fQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJiBub2Rl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR1Nw
ZWN1bGF0aXZlSklUX2gKICNkZWZpbmUgREZHU3BlY3VsYXRpdmVKSVRfaAogCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0U3RhdGUuaCIKQEAgLTMzLDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdKSVRDb21waWxl
ci5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJNYXJrZWRBbGxvY2F0b3Iu
aCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKQEAgLTQ2LDg1ICs0OSw2IEBAIGNsYXNz
IFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ7CiBjbGFzcyBTcGVjdWxhdGVDZWxsT3BlcmFuZDsKIGNs
YXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOwogCi0KLWVudW0gVmFsdWVTb3VyY2VLaW5kIHsK
LSAgICBTb3VyY2VOb3RTZXQsCi0gICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwKLSAgICBJbnQzMklu
UmVnaXN0ZXJGaWxlLAotICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKLSAgICBCb29sZWFuSW5SZWdp
c3RlckZpbGUsCi0gICAgRG91YmxlSW5SZWdpc3RlckZpbGUsCi0gICAgSGF2ZU5vZGUKLX07Ci0K
LWNsYXNzIFZhbHVlU291cmNlIHsKLXB1YmxpYzoKLSAgICBWYWx1ZVNvdXJjZSgpCi0gICAgICAg
IDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQoU291cmNlTm90U2V0KSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1
ZVNvdXJjZUtpbmQpCi0gICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQodmFs
dWVTb3VyY2VLaW5kKSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNlTm90
U2V0KTsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBIYXZlTm9kZSk7Ci0gICAgfQotICAgIAot
ICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAgICAgIDog
bV9ub2RlSW5kZXgobm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBI
YXZlTm9kZSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0
aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMy
UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJ
bnQzMkluUmVnaXN0ZXJGaWxlKTsKLSAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRp
Y3Rpb24pIHx8IGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAg
IHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNC
b29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVNv
dXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUpOwotICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2Uo
VmFsdWVJblJlZ2lzdGVyRmlsZSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNTZXQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KSAh
PSBTb3VyY2VOb3RTZXQ7Ci0gICAgfQotICAgIAotICAgIFZhbHVlU291cmNlS2luZCBraW5kKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRl
eCk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAotICAgIHsK
LSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7Ci0gICAgICAgIHJldHVybiBtX25v
ZGVJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0g
ICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFs
dWVTb3VyY2VLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VO
b3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKLSAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7
Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5k
ZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGtpbmQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUluZGV4KTsKLSAgICAgICAgaWYgKGtp
bmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2RlKSkKLSAgICAgICAgICAgIHJldHVy
biBIYXZlTm9kZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4o
a2luZCk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKLX07Ci0KLQog
ZW51bSBHZW5lcmF0ZWRPcGVyYW5kVHlwZSB7IEdlbmVyYXRlZE9wZXJhbmRUeXBlVW5rbm93biwg
R2VuZXJhdGVkT3BlcmFuZEludGVnZXIsIEdlbmVyYXRlZE9wZXJhbmREb3VibGUsIEdlbmVyYXRl
ZE9wZXJhbmRKU1ZhbHVlfTsKIAogLy8gPT09IFNwZWN1bGF0aXZlSklUID09PQpAQCAtMzA4LDcg
KzIzMiw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyB1c2UoKSByZXR1cm5zIHRydWUgd2hlbiB0
aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55CiAgICAgICAgIC8vIGFzc29jaWF0ZWQgcmVz
b3VyY2VzIG1heSBiZSBmcmVlZC4KLSAgICAgICAgaWYgKCFpbmZvLnVzZSgpKQorICAgICAgICBp
ZiAoIWluZm8udXNlKCptX3N0cmVhbSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Ly8gUmVsZWFzZSB0aGUgYXNzb2NpYXRlZCBtYWNoaW5lIHJlZ2lzdGVycy4KQEAgLTM2OCw2ICsy
OTIsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKKyAg
ICB2b2lkIG5vdGljZU9TUkJpcnRoKE5vZGVJbmRleCwgTm9kZSYpOwogICAgIHZvaWQgY29tcGls
ZU1vdkhpbnQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKQEAgLTY1
Nyw3ICs1ODIsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBDaGVjayB0aGUgR2VuZXJhdGlvbklu
Zm8gdG8gc2VlIGlmIHRoaXMgdmFsdWUgbmVlZCB3cml0aW5nCiAgICAgICAgIC8vIHRvIHRoZSBS
ZWdpc3RlckZpbGUgLSBpZiBub3QsIG1hcmsgaXQgYXMgc3BpbGxlZCAmIHJldHVybi4KICAgICAg
ICAgaWYgKCFpbmZvLm5lZWRzU3BpbGwoKSkgewotICAgICAgICAgICAgaW5mby5zZXRTcGlsbGVk
KCk7CisgICAgICAgICAgICBpbmZvLnNldFNwaWxsZWQoKm1fc3RyZWFtLCBzcGlsbE1lKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC02NjcsMjAgKzU5MiwyMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpT
IHZhbHVlIC0gYXMgaW4gaXQncyBub3QgdmlzaWJsZSB0byBKUwogICAgICAgICAgICAgLy8gY29k
ZS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdFN0
b3JhZ2UpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFG
b3JtYXRTdG9yYWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5m
by5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAg
aW5mby5zcGlsbChEYXRhRm9ybWF0SW50ZWdlcik7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCpt
X3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdEludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwo
RGF0YUZvcm1hdERvdWJsZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3Bp
bGxNZSwgRGF0YUZvcm1hdERvdWJsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtNjk2LDEzICs2MjEsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gU3BpbGwgdGhlIHZhbHVlLCBhbmQgcmVjb3JkIGl0IGFzIHNwaWxs
ZWQgaW4gaXRzIGJveGVkIGZvcm0uCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwo
KERhdGFGb3JtYXQpKHNwaWxsRm9ybWF0IHwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBp
bmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgKERhdGFGb3JtYXQpKHNwaWxsRm9ybWF0IHwg
RGF0YUZvcm1hdEpTKSk7CiAgICAgICAgICAgICByZXR1cm47CiAjZWxpZiBVU0UoSlNWQUxVRTMy
XzY0KQogICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgICAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOiB7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8uZ3ByKCksIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoc3Bp
bGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNw
aWxsRm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MTAsNyAr
NjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6IHsKICAg
ICAgICAgICAgIC8vIE9uIEpTVkFMVUUzMl82NCBib3hpbmcgYSBkb3VibGUgaXMgYSBuby1vcC4K
ICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpT
RG91YmxlKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRh
Rm9ybWF0SlNEb3VibGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTcx
OSw3ICs2NDQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby50YWdHUFIoKSwg
SklUQ29tcGlsZXI6OnRhZ0ZvcihzcGlsbE1lKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KGluZm8ucGF5bG9hZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0g
ICAgICAgICAgICBpbmZvLnNwaWxsKHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uc3Bp
bGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47
CiAjZW5kaWYKICAgICAgICAgfQpAQCAtMTgyMCw3ICsxNzQ1LDcgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCku
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0
aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CiAgICAgfQogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVz
ZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKICAgICB7CkBAIC0xODQzLDcgKzE3
NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJl
Y292ZXJ5KHJlY292ZXJ5KTsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQu
Y29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291
cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUlu
ZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2Nr
KCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKICAgICB9CiAgICAgdm9pZCBz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBT
cGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKICAgICB7CkBAIC0xODYzLDcgKzE3ODgsOCBA
QCBwcml2YXRlOgogICAgICAgICBleGl0Lm1fY29kZU9yaWdpbiA9IG5leHROb2RlLmNvZGVPcmln
aW47CiAgICAgICAgIGV4aXQubV9sYXN0U2V0T3BlcmFuZCA9IHNldExvY2FsLmxvY2FsKCk7CiAg
ICAgICAgIAotICAgICAgICBleGl0LnZhbHVlUmVjb3ZlcnlGb3JPcGVyYW5kKHNldExvY2FsLmxv
Y2FsKCkpID0gdmFsdWVSZWNvdmVyeTsKKyAgICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZSA9IGFkb3B0UmVmKAorICAgICAgICAgICAgbmV3IFZhbHVlUmVjb3ZlcnlPdmVycmlkZShz
ZXRMb2NhbC5sb2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVk
IHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bC4KQEAgLTE5MjEsNiArMTg0NywxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV92YXJp
YWJsZXNbb3BlcmFuZF07CiAgICAgfQogICAgIAorICAgIHZvaWQgcmVjb3JkU2V0TG9jYWwoaW50
IG9wZXJhbmQsIFZhbHVlU291cmNlIHZhbHVlU291cmNlKQorICAgIHsKKyAgICAgICAgdmFsdWVT
b3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gdmFsdWVTb3VyY2U7CisgICAgICAg
IG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwob3BlcmFuZCwg
dmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CisgICAgfQorICAgIAogICAgIC8vIFRoZSBKSVQs
IHdoaWxlIGFsc28gcHJvdmlkZXMgTWFjcm9Bc3NlbWJsZXIgZnVuY3Rpb25hbGl0eS4KICAgICBK
SVRDb21waWxlciYgbV9qaXQ7CiAgICAgLy8gVGhlIGN1cnJlbnQgbm9kZSBiZWluZyBnZW5lcmF0
ZWQuCkBAIC0xOTU0LDYgKzE4ODYsOSBAQCBwcml2YXRlOgogICAgIAogICAgIEFic3RyYWN0U3Rh
dGUgbV9zdGF0ZTsKICAgICAKKyAgICBWYXJpYWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKKyAg
ICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3JhcGg7CisgICAgCiAgICAgVmFsdWVSZWNvdmVy
eSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTI1NzMs
MjAgKzI1MDgsNiBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAK
LWlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkK
LSAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKLSAgICAsIG1faml0KGppdCkKLSAgICAsIG1fY29t
cGlsZUluZGV4KDApCi0gICAgLCBtX2luZGV4SW5CbG9jaygwKQotICAgICwgbV9nZW5lcmF0aW9u
SW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCi0gICAgLCBtX2Js
b2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQotICAgICwgbV9hcmd1bWVudHMo
aml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhqaXQu
Z3JhcGgoKS5tX2xvY2FsVmFycykKLSAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKLXsKLX0K
LQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92
ZXJyaWRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGVfaAorI2RlZmluZSBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGVfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlZhbHVl
UmVjb3ZlcnkuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFZhbHVlUmVjb3ZlcnlPdmVycmlkZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4geworcHVibGljOgorICAgIFZhbHVl
UmVjb3ZlcnlPdmVycmlkZSgpIHsgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZShp
bnQgb3BlcmFuZCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgICAgIDogb3Bl
cmFuZChvcGVyYW5kKQorICAgICAgICAsIHJlY292ZXJ5KHJlY292ZXJ5KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgaW50IG9wZXJhbmQ7CisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2Uu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIGZwcmludGYo
b3V0LCAiTm90U2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICJJblJlZ0ZpbGUiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIklu
dDMyIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAg
ICAgICBmcHJpbnRmKG91dCwgIkNlbGwiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCb29s
ZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiQm9vbCIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRm
KG91dCwgIkRvdWJsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEhhdmVOb2RlOgorICAg
ICAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1
ZVNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhbHVlU291cmNl
X2gKKyNkZWZpbmUgREZHVmFsdWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIkRhdGFGb3JtYXQuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSAi
VmFsdWVSZWNvdmVyeS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Vu
dW0gVmFsdWVTb3VyY2VLaW5kIHsKKyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJblJlZ2lz
dGVyRmlsZSwKKyAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAorICAgIENlbGxJblJlZ2lzdGVyRmls
ZSwKKyAgICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCisgICAgRG91YmxlSW5SZWdpc3RlckZpbGUs
CisgICAgSGF2ZU5vZGUKK307CisKK3N0YXRpYyBpbmxpbmUgVmFsdWVTb3VyY2VLaW5kIGRhdGFG
b3JtYXRUb1ZhbHVlU291cmNlS2luZChEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCit7CisgICAgc3dp
dGNoIChkYXRhRm9ybWF0KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjoKKyAgICAgICAg
cmV0dXJuIEludDMySW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgor
ICAgICAgICByZXR1cm4gRG91YmxlSW5SZWdpc3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0
Qm9vbGVhbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5JblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgorICAgICAgICByZXR1cm4gQ2VsbEluUmVnaXN0ZXJGaWxlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlSW5SZWdpc3RlckZpbGU7CisgICAgfQorfQorCitzdGF0aWMgaW5s
aW5lIERhdGFGb3JtYXQgdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KFZhbHVlU291cmNlS2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVy
RmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIEludDMySW5SZWdp
c3RlckZpbGU6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SW50ZWdlcjsKKyAgICBjYXNlIENl
bGxJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNh
c2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xl
YW47CisgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXREb3VibGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXROb25l
OworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIGlzSW5SZWdpc3RlckZpbGUoVmFsdWVT
b3VyY2VLaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1h
dChraW5kKSAhPSBEYXRhRm9ybWF0Tm9uZTsKK30KKworY2xhc3MgVmFsdWVTb3VyY2UgeworcHVi
bGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhG
cm9tS2luZChTb3VyY2VOb3RTZXQpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
VmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKKyAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOworICAgICAgICBBU1NFUlQoa2lu
ZCgpICE9IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2Uo
Tm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOworICAg
ICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rp
b24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlIGZvckRhdGFGb3JtYXQoRGF0YUZvcm1h
dCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKGRhdGFGb3Jt
YXRUb1ZhbHVlU291cmNlS2luZChkYXRhRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1f
bm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNl
S2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRl
eChtX25vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNJblJlZ2lzdGVyRmlsZSgp
IGNvbnN0IHsgcmV0dXJuIEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxlKGtpbmQoKSk7IH0KKyAg
ICAKKyAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChraW5kKCkpOworICAgIH0KKyAgICAKKyAg
ICBWYWx1ZVJlY292ZXJ5IHZhbHVlUmVjb3ZlcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzSW5SZWdpc3RlckZpbGUoKSk7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
ICAgIGNhc2UgVmFsdWVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEludDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIENlbGxJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVh
bigpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkRG91YmxlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnkoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAg
ICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChGSUxFKiBv
dXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgTm9kZUluZGV4IG5vZGVJbmRl
eEZyb21LaW5kKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPj0gU291cmNlTm90U2V0ICYmIGtpbmQgPCBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBO
b05vZGUgLSBraW5kOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVTb3VyY2VLaW5kIGtp
bmRGcm9tTm9kZUluZGV4KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICB1bnNp
Z25lZCBraW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KE5vTm9kZSAtIG5vZGVJbmRleCk7Cisg
ICAgICAgIGlmIChraW5kID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihIYXZlTm9kZSkpCisgICAg
ICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1
ZVNvdXJjZUtpbmQ+KGtpbmQpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5k
ZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhbHVlU291cmNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVF
dmVudC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgi
CisjaW5jbHVkZSAiREZHRlBSSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK3ZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFJlc2V0OgorICAgICAgICBmcHJpbnRmKG91dCwg
IlJlc2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmlydGhUb0ZpbGw6CisgICAgICAg
IGR1bXBGaWxsSW5mbygiQmlydGhUb0ZpbGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEJpcnRoVG9TcGlsbDoKKyAgICAgICAgZHVtcFNwaWxsSW5mbygiQmlydGhUb1NwaWxsIiwg
b3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxsOgorICAgICAgICBkdW1wRmlsbElu
Zm8oIkZpbGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNwaWxsOgorICAgICAg
ICBkdW1wU3BpbGxJbmZvKCJTcGlsbCIsIG91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RGVhdGg6CisgICAgICAgIGZwcmludGYob3V0LCAiRGVhdGgoQCV1KSIsIG5vZGVJbmRleCgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ik1vdkhpbnQoQCV1LCByJWQpIiwgbm9kZUluZGV4KCksIG9wZXJhbmQoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKKyAgICAgICAgZnByaW50ZihvdXQsICJTZXRM
b2NhbChyJWQsICVzKSIsIG9wZXJhbmQoKSwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQo
KSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIFZhcmlhYmxlRXZlbnQ6
OmR1bXBGaWxsSW5mbyhjb25zdCBjaGFyKiBuYW1lLCBGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAg
ZnByaW50ZihvdXQsICIlcyhAJXUsICIsIG5hbWUsIG5vZGVJbmRleCgpKTsKKyAgICBpZiAoZGF0
YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgIGZwcmludGYob3V0LCAiJXMi
LCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAg
IGVsc2UgaWYgKGRhdGFGb3JtYXQoKSAmIERhdGFGb3JtYXRKUykKKyAgICAgICAgZnByaW50Zihv
dXQsICIlczolcyIsIEdQUkluZm86OmRlYnVnTmFtZSh0YWdHUFIoKSksIEdQUkluZm86OmRlYnVn
TmFtZShwYXlsb2FkR1BSKCkpKTsKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgZnByaW50Zihv
dXQsICIlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOworICAgIGZwcmludGYob3V0LCAi
LCAlcykiLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSk7Cit9CisKK3ZvaWQgVmFy
aWFibGVFdmVudDo6ZHVtcFNwaWxsSW5mbyhjb25zdCBjaGFyKiBuYW1lLCBGSUxFKiBvdXQpIGNv
bnN0Cit7CisgICAgZnByaW50ZihvdXQsICIlcyhAJXUsIHIlZCwgJXMpIiwgbmFtZSwgbm9kZUlu
ZGV4KCksIHZpcnR1YWxSZWdpc3RlcigpLCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgp
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxl
RXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhcmlhYmxlRXZl
bnRfaAorI2RlZmluZSBERkdWYXJpYWJsZUV2ZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNp
bmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNs
dWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0g
VmFyaWFibGVFdmVudEtpbmQgeworICAgIC8vIE1hcmtzIHRoZSBiZWdpbm5pbmcgb2YgYSBjaGVj
a3BvaW50LiBJZiB5b3UgaW50ZXJwcmV0IHRoZSB2YXJpYWJsZQorICAgIC8vIGV2ZW50cyBzdGFy
dGluZyBhdCBhIFJlc2V0IHBvaW50IHRoZW4geW91J2xsIGdldCBldmVyeXRoaW5nIHlvdSBuZWVk
LgorICAgIFJlc2V0LAorICAgIAorICAgIC8vIE5vZGUgYmlydGhzLiBQb2ludHMgaW4gdGhlIGNv
ZGUgd2hlcmUgYSBub2RlIGJlY29tZXMgcmVsZXZhbnQgZm9yIE9TUi4KKyAgICAvLyBJdCBtYXkg
YmUgdGhlIHBvaW50IHdoZXJlIGl0IGlzIGFjdHVhbGx5IGJvcm4gKGkuZS4gYXNzaWduZWQpIG9y
IGl0IG1heQorICAgIC8vIGJlIGEgbGF0ZXIgcG9pbnQsIGlmIGl0J3Mgb25seSBsYXRlciBpbiB0
aGUgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zCisgICAgLy8gdGhhdCB3ZSBzdGFydCB0byBjYXJl
IGFib3V0IHRoaXMgbm9kZS4KKyAgICBCaXJ0aFRvRmlsbCwKKyAgICBCaXJ0aFRvU3BpbGwsCisg
ICAgCisgICAgLy8gRXZlbnRzIHJlbGF0ZWQgdG8gaG93IGEgbm9kZSBpcyByZXByZXNlbnRlZC4K
KyAgICBGaWxsLAorICAgIFNwaWxsLAorICAgIAorICAgIC8vIERlYXRoIG9mIGEgbm9kZSAtIGFm
dGVyIHRoaXMgd2Ugbm8gbG9uZ2VyIGNhcmUgYWJvdXQgdGhpcyBub2RlLgorICAgIERlYXRoLAor
ICAgIAorICAgIC8vIEEgTW92SGludCBtZWFucyB0aGF0IGEgbm9kZSBpcyBiZWluZyBhc3NvY2lh
dGVkIHdpdGggYSBieXRlY29kZSBvcGVyYW5kLAorICAgIC8vIGJ1dCB0aGF0IGl0IGhhcyBub3Qg
YmVlbiBzdG9yZWQgaW50byB0aGF0IG9wZXJhbmQuCisgICAgTW92SGludCwKKyAgICAKKyAgICAv
LyBBIFNldExvY2FsRXZlbnQgbWVhbnMgdGhhdCBhIG5vZGUncyB2YWx1ZSBoYXMgYWN0dWFsbHkg
YmVlbiBzdG9yZWQgaW50byB0aGUKKyAgICAvLyBieXRlY29kZSBvcGVyYW5kIHRoYXQgaXQncyBh
c3NvY2lhdGVkIHdpdGguCisgICAgU2V0TG9jYWxFdmVudCwKKyAgICAKKyAgICAvLyBVc2VkIHRv
IGluZGljYXRlIGFuIHVuaW5pdGlhbGl6ZWQgVmFyaWFibGVFdmVudC4gRG9uJ3QgdXNlIGZvciBv
dGhlcgorICAgIC8vIHB1cnBvc2VzLgorICAgIEludmFsaWRFdmVudEtpbmQKK307CisKK3VuaW9u
IFZhcmlhYmxlUmVwcmVzZW50YXRpb24geworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklE
IGdwcjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcjsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIHN0cnVjdCB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHRhZ0dQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQ
UjsKKyAgICB9IHBhaXI7CisjZW5kaWYKKyAgICBpbnQzMl90IHZpcnR1YWxSZWc7Cit9OworCitj
bGFzcyBWYXJpYWJsZUV2ZW50IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUV2ZW50KCkKKyAgICAg
ICAgOiBtX2tpbmQoSW52YWxpZEV2ZW50S2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYXJpYWJsZUV2ZW50IHJlc2V0KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQg
ZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IFJlc2V0OworICAgICAgICByZXR1cm4gZXZl
bnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZpbGxHUFIoVmFyaWFi
bGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQo
ZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0RG91YmxlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgICAgICBBU1NFUlQoIShkYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJ
bmRleDsKKyAgICAgICAgZXZlbnQudS5ncHIgPSBncHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9
IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGRhdGFGb3JtYXQ7CisgICAgICAg
IHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBmaWxsUGFpcihWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFIpCisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBWYXJpYWJsZUV2
ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBl
dmVudC51LnBhaXIudGFnR1BSID0gdGFnR1BSOworICAgICAgICBldmVudC51LnBhaXIucGF5bG9h
ZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAg
IGV2ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgcmV0dXJuIGV2ZW50
OworICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIHN0YXRpYyBW
YXJpYWJsZUV2ZW50IGZpbGxGUFIoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5v
ZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHIpCisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBraW5kID09IEZpbGwpOworICAgICAgICBW
YXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4Owor
ICAgICAgICBldmVudC51LmZwciA9IGZwcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsK
KyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAg
cmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzcGls
bChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kID09IEJpcnRoVG9TcGlsbCB8fCBraW5kID09IFNwaWxsKTsKKyAgICAgICAg
VmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsK
KyAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZ2lzdGVyOworICAgICAgICBl
dmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxl
RXZlbnQgZGVhdGgoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxl
RXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAg
IGV2ZW50Lm1fa2luZCA9IERlYXRoOworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNldExvY2FsKGludCBvcGVyYW5kLCBEYXRhRm9y
bWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAg
IGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IFNl
dExvY2FsRXZlbnQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKKyAgICAg
ICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBt
b3ZIaW50KE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
VmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsK
KyAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gb3BlcmFuZDsKKyAgICAgICAgZXZlbnQubV9r
aW5kID0gTW92SGludDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBW
YXJpYWJsZUV2ZW50S2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxWYXJpYWJsZUV2ZW50S2luZD4obV9raW5kKTsKKyAgICB9CisgICAgCisgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09
IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQg
PT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbAorICAgICAgICAgICAgICAgfHwgbV9r
aW5kID09IERlYXRoIHx8IG1fa2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0dXJuIG1faW5k
ZXg7CisgICAgfQorICAgIAorICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxs
CisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gQmlydGhUb1NwaWxsIHx8IG1fa2luZCA9PSBT
cGlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IFNldExvY2FsRXZlbnQpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9kYXRhRm9ybWF0KTsKKyAgICB9Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1h
dCAhPSBEYXRhRm9ybWF0RG91YmxlKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBB
U1NFUlQoIShtX2RhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpKTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gdS5ncHI7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBB
U1NFUlQobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuIHUucGFp
ci50YWdHUFI7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRH
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8
fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpOworICAgICAgICByZXR1cm4gdS5wYWlyLnBheWxvYWRHUFI7CisgICAgfQorI2VuZGlm
IC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0
ZXJJRCBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRv
RmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgPT0g
RGF0YUZvcm1hdERvdWJsZSk7CisgICAgICAgIHJldHVybiB1LmZwcjsKKyAgICB9CisgICAgCisg
ICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPih1LnZpcnR1YWxSZWcpOwor
ICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgpIGNvbnN0IHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50KTsKKyAgICAgICAgcmV0
dXJuIHUudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFyaWFibGVSZXByZXNl
bnRhdGlvbiYgdmFyaWFibGVSZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHU7IH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoRklMRSopIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB2b2lk
IGR1bXBGaWxsSW5mbyhjb25zdCBjaGFyKiBuYW1lLCBGSUxFKikgY29uc3Q7CisgICAgdm9pZCBk
dW1wU3BpbGxJbmZvKGNvbnN0IGNoYXIqIG5hbWUsIEZJTEUqKSBjb25zdDsKKyAgICAKKyAgICBO
b2RlSW5kZXggbV9pbmRleDsKKyAgICAKKyAgICAvLyBGb3IgQmlydGhUb0ZpbGwsIEZpbGw6Cisg
ICAgLy8gICAtIFRoZSBHUFIgb3IgRlBSLCBvciBhIEdQUiBwYWlyLgorICAgIC8vIEZvciBCaXJ0
aFRvU3BpbGwsIFNwaWxsOgorICAgIC8vICAgLSBUaGUgdmlydHVhbCByZWdpc3Rlci4KKyAgICAv
LyBGb3IgTW92SGludCwgU2V0TG9jYWxFdmVudDoKKyAgICAvLyAgIC0gVGhlIGJ5dGVjb2RlIG9w
ZXJhbmQuCisgICAgLy8gRm9yIERlYXRoOgorICAgIC8vICAgLSBVbnVzZWQuCisgICAgVmFyaWFi
bGVSZXByZXNlbnRhdGlvbiB1OworICAgIAorICAgIGludDhfdCBtX2tpbmQ7CisgICAgaW50OF90
IG1fZGF0YUZvcm1hdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVFdmVudF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR1ZhbHVl
U291cmNlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OmxvZ0V2ZW50KGNvbnN0
IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQoreworICAgIGRhdGFMb2coInNlcSMlbHU6Iiwgc2l6ZSgp
KTsKKyAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgZGF0YUxvZygiICIpOwor
fQorCitzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyB7CisgICAgYm9vbCBmaWxsZWQ7IC8v
IHRydWUgLT4gaW4gZ3ByL2Zwci9wYWlyLCBmYWxzZSAtPiBzcGlsbGVkCisgICAgVmFyaWFibGVS
ZXByZXNlbnRhdGlvbiB1OworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIAorICAgIE1pbmlm
aWVkR2VuZXJhdGlvbkluZm8oKQorICAgICAgICA6IGZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2
ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAgICAgICAgZmlsbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRoVG9TcGlsbDoKKyAg
ICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgICAgIGZpbGxlZCA9IGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVhdGg6CisgICAgICAgICAgICBmb3JtYXQgPSBEYXRh
Rm9ybWF0Tm9uZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdSA9IGV2ZW50LnZh
cmlhYmxlUmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgZm9ybWF0ID0gZXZlbnQuZGF0YUZvcm1h
dCgpOworICAgIH0KK307CisKK3ZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3Qo
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZp
ZWRHcmFwaCYgZ3JhcGgsCisgICAgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zl
cnk+JiB2YWx1ZVJlY292ZXJpZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAgCisgICAgLy8gU3Rl
cCAxOiBGaW5kIHRoZSBsYXN0IGNoZWNrcG9pbnQsIGFuZCBmaWd1cmUgb3V0IHRoZSBudW1iZXIg
b2YgdmlydHVhbCByZWdpc3RlcnMgYXMgd2UgZ28uCisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9
IGluZGV4IC0gMTsKKyAgICB3aGlsZSAoYXQoc3RhcnRJbmRleCkua2luZCgpICE9IFJlc2V0KQor
ICAgICAgICBzdGFydEluZGV4LS07CisgICAgCisgICAgLy8gU3RlcCAyOiBDcmVhdGUgYSBtb2Nr
LXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgorICAgIHVuc2ln
bmVkIG51bVZhcmlhYmxlczsKKyAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgZWxzZQorICAgICAgICBu
dW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Cisg
ICAgCisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgIFZlY3RvcjxNaW5pZmllZEdlbmVy
YXRpb25JbmZvLCAzMj4gZ2VuZXJhdGlvbkluZm9zKGluZGV4IC0gc3RhcnRJbmRleCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAg
Y29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBhdChpKTsKKyAgICAgICAgc3dpdGNoIChldmVu
dC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZXNldDoKKyAgICAgICAgICAgIC8vIG5vdGhpbmcg
dG8gZG8uCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaXJ0aFRvRmlsbDoKKyAg
ICAgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGNhc2UgRmlsbDoKKyAgICAgICAgY2Fz
ZSBTcGlsbDoKKyAgICAgICAgY2FzZSBEZWF0aDoKKyAgICAgICAgICAgIGdlbmVyYXRpb25JbmZv
c1tldmVudC5ub2RlSW5kZXgoKSAtIHN0YXJ0SW5kZXhdLnVwZGF0ZShldmVudCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgaWYgKG9wZXJh
bmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgpKSkKKyAgICAgICAgICAgICAgICBv
cGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZl
bnQubm9kZUluZGV4KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldExv
Y2FsRXZlbnQ6CisgICAgICAgICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVu
dC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQo
ZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdChldmVudC5kYXRhRm9y
bWF0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDM6IFJlY29yZCB0aGUgdGhpbmdzIHRoYXQgYXJlIGxp
dmUsIHNvIHdlIGNhbiBnZXQgdG8gdGhlbSBtb3JlIHF1aWNrbHkuCisgICAgVmVjdG9yPHVuc2ln
bmVkLCAxNj4gaW5kaWNlc09mTGl2ZVRoaW5nczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFy
dEluZGV4OyBpIDwgaW5kZXg7ICsraSkgeworICAgICAgICBpZiAoZ2VuZXJhdGlvbkluZm9zW2kg
LSBzdGFydEluZGV4XS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICBpbmRp
Y2VzT2ZMaXZlVGhpbmdzLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gU3RlcCA0OiBD
b21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCisgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFuZHM8
VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNlc1tpXTsKKyAg
ICAgICAgaWYgKHNvdXJjZS5pc0luUmVnaXN0ZXJGaWxlKCkpIHsKKyAgICAgICAgICAgIHZhbHVl
UmVjb3Zlcmllc1tpXSA9IHNvdXJjZS52YWx1ZVJlY292ZXJ5KCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHNvdXJjZS5raW5kKCkg
PT0gSGF2ZU5vZGUpOworICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3Vy
Y2Uubm9kZUluZGV4KCkpOworICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNDb25zdGFudCgp
KSB7CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25z
dGFudCgKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoCisgICAg
ICAgICAgICAgICAgICAgIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3Rh
bnROdW1iZXIoKSkuZ2V0KCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8qIGluZm8gPSAmZ2VuZXJhdGlv
bkluZm9zW3NvdXJjZS5ub2RlSW5kZXgoKSAtIHN0YXJ0SW5kZXhdOworICAgICAgICBpZiAoaW5m
by0+Zm9ybWF0ID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gc2Vl
IGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFs
dWUgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW50MzJUb0RvdWJsZTogV2UgY2FuIHVz
ZSB0aGlzIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBub2RlLCBidXQKKyAgICAgICAgICAgIC8v
ICAgIHdlJ2QgcmF0aGVyIG5vdDsgc28gd2UgdXNlIGl0IG9ubHkgaWYgaXQgaXMgdGhlIG9ubHkg
cmVtYWluaW5nCisgICAgICAgICAgICAvLyAgICBsaXZlIHZlcnNpb24uCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBJZiB0aGUgb25seSByZW1haW5pbmcgbGl2
ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgLy8gICAgVmFsdWVUb0ludDMy
LCB0aGVuIHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVUlu
dDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBV
SW50MzJUb051bWJlcgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcg
dXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAgICAg
ICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUg
Y291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAgYWx0
ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1haW5p
bmcgdXNlcyBvZgorICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdp
dGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2Rl
SW5kZXgpOworICAgICAgICAgICAgICAgIGluZm8gPSAmZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRl
eCAtIHN0YXJ0SW5kZXhdOworICAgICAgICAgICAgICAgIGlmIChpbmZvLT5mb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAg
ICAgICAgIE5vZGVJbmRleCBpbnQzMlRvRG91YmxlSW5kZXggPSBOb05vZGU7CisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRpY2VzT2ZM
aXZlVGhpbmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBpbmRpY2VzT2ZMaXZlVGhpbmdzW2ldOworICAgICAgICAgICAgICAgICAgICBu
b2RlID0gZ3JhcGguYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmICghbm9kZS0+aGFzQ2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZS5ub2Rl
SW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRleCAtIHN0YXJ0SW5kZXhdLmZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQzMlRvRG91YmxlSW5kZXggPSBub2RlSW5kZXg7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1
ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IG5v
ZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
VG9OdW1iZXJJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAg
ICAgICAgICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRleDsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2Rl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAh
PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nb
bm9kZUluZGV4VG9Vc2UgLSBzdGFydEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292
ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgQVNTRVJUKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAg
IAorICAgICAgICBpZiAoaW5mby0+ZmlsbGVkKSB7CisgICAgICAgICAgICBpZiAoaW5mby0+Zm9y
bWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJp
ZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvLT51LmZwcik7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgICAgIGlmIChpbmZvLT5mb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mby0+dS50YWdH
UFIsIGluZm8tPnUucGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVl
UmVjb3Zlcnk6OmluR1BSKGluZm8tPnUuZ3ByLCBpbmZvLT5mb3JtYXQpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tp
XSA9CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8tPnUudmlydHVhbFJlZyksIGluZm8tPmZv
cm1hdCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW1faAorI2RlZmluZSBERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdNaW5pZmll
ZEdyYXBoLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIk9wZXJh
bmRzLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZh
cmlhYmxlRXZlbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJp
YWJsZUV2ZW50JiBldmVudCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQor
ICAgICAgICBsb2dFdmVudChldmVudCk7CisjZW5kaWYKKyAgICAgICAgYXBwZW5kKGV2ZW50KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCisg
ICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgbG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVu
dCYgZXZlbnQpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134245</attachid>
            <date>2012-03-28 02:38:28 -0700</date>
            <delta_ts>2012-03-28 03:36:48 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>variablestream_patch_9.diff</filename>
            <type>text/plain</type>
            <size>160468</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyOCBA
QAorMjAxMi0wMy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBhaW1zIHRvIHJlZHVjZSBvbmUgYXNwZWN0IG9mIERGRyBjb21waWxlIHRpbWVz
OiB0aGUgZmFjdAorICAgICAgICB0aGF0IHdlIGN1cnJlbnRseSBjb21wdXRlIHRoZSB2YWx1ZSBy
ZWNvdmVyaWVzIGZvciBlYWNoIGxvY2FsIGFuZAorICAgICAgICBhcmd1bWVudCBvbiBldmVyeSBz
cGVjdWxhdGlvbiBjaGVjay4gV2UgY29tcGlsZSBtYW55IHNwZWN1bGF0aW9uIGNoZWNrcywKKyAg
ICAgICAgc28gdGhpcyBjYW4gYWRkIHVwIHF1aWNrLiBUaGUgc3RyYXRlZ3kgdGhhdCB0aGlzIGNo
YW5nZSB0YWtlcyBpcyB0bworICAgICAgICBoYXZlIHRoZSBERkcgc2F2ZSBqdXN0IGVub3VnaCBp
bmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGNvbXBpbGVyIGlzCisgICAgICAgIGNob29zaW5nIHRv
IHJlcHJlc2VudCBzdGF0ZSwgdGhhdCB0aGUgREZHOjpPU1JFeGl0Q29tcGlsZXIgY2FuIHJlaWZ5
CisgICAgICAgIHRoZSB2YWx1ZSByZWNvdmVyaWVzIGxhemlseS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXBwZWFycyB0byBiZSBhbiAwLjMlIFN1blNwaWRlciBzcGVlZC11cCBhbmQgaXMgbmV1
dHJhbCBlbHNld2hlcmUuCisgICAgICAgIAorICAgICAgICBJIGFsc28gdG9vayB0aGUgb3Bwb3J0
dW5pdHkgdG8gZml4IHRoZSBzYW1wbGluZyByZWdpb25zIHByb2ZpbGVyIChpdAorICAgICAgICB3
YXMgbWlzc2luZyBhbiBleHBvcnQgbWFjcm8pIGFuZCB0byBwdXQgaW4gbW9yZSBzYW1wbGluZyBy
ZWdpb25zIGluCisgICAgICAgIHRoZSBERkcgKHdoaWNoIGFyZSBkaXNhYmxlZCBzbyBsb25nIGFz
IEVOQUJMRShTQU1QTElOR19SRUdJT05TKSBpcworICAgICAgICBmYWxzZSkuCisgICAgICAgIAor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFUb0Zp
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1pbmlmaWVkREZHKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKERGR0RhdGEpOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpoYXNP
cGVyYW5kKToKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNp
emUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6YXJndW1lbnRGb3JJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp2YXJpYWJsZUZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRGb3JJbmRleCk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdSZWdpb24pOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgor
ICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bUNGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbklu
Zm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2VuZXJhdGlvbkluZm8p
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRp
b25JbmZvOjppbml0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmluaXREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0U3Rv
cmFnZSk6CisgICAgICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c3BpbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzZXRTcGlsbGVkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9u
SW5mbzo6ZmlsbEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpm
aWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRGaWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kU3BpbGwpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChN
aW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpNaW5pZmll
ZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphdCk6CisgICAgICAg
IChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZEdyYXBoOjpwcmVwYXJlQW5kU2hyaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5p
ZmllZEdyYXBoOjpzZXRPcmlnaW5hbEdyYXBoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWRHcmFwaDo6b3JpZ2luYWxHcmFwaFNpemUpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmll
ZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YmVsb25nc0luTWluaWZp
ZWRHcmFwaCk6CisgICAgICAgIChNaW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok1p
bmlmaWVkTm9kZTo6TWluaWZpZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5v
ZGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29u
c3RhbnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnRO
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAg
ICAgICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRDb21w
aWxlcik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBl
cmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdSZWR1bmRhbnRQ
aGlFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUmVkdW5k
YW50UGhpRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9y
YWdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjp1c2UpOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGlsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpmb3J3YXJkU3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnJlY29yZFNldExvY2FsKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbERvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUJvb2xlYW4pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFsdWVSZWNv
dmVyeU92ZXJyaWRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU6
OlZhbHVlUmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmNw
cDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHVmFsdWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAg
IChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmRhdGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6
CisgICAgICAgIChKU0M6OkRGRzo6dmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAg
ICAgKEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVT
b3VyY2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVNvdXJjZTo6dmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVT
b3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJ
bmRleEZyb21LaW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21O
b2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXApOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXBGaWxsSW5mbyk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVtcFNwaWxsSW5mbyk6CisgICAgICAgICogZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFy
aWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6VmFyaWFibGVF
dmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6cmVzZXQpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50OjpmaWxsRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZGVhdGgpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50Ojptb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojpr
aW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojpub2RlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmRhdGFGb3JtYXQpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6dGFnR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpwYXlsb2Fk
R1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmcHIpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6dmFyaWFibGVSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9nRXZlbnQpOgorICAgICAgICAoTWluaWZpZWRH
ZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5m
bzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRH
ZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50
U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFibGVFdmVudFN0cmVh
bSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9n
KToKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbik6CisK
IDIwMTItMDMtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBE
RkcgT1NSIGV4aXQgc2hvdWxkIG5vdCBnZW5lcmF0ZSBhbiBleGl0IGZvciB2YXJpYWJsZXMgb2Yg
aW5saW5lZXMgaWYgdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJD
RVMKICAgICBkZmcvREZHRml4dXBQaGFzZS5jcHAKICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAg
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAg
ZGZnL0RGR05vZGVGbGFncy5jcHAKICAgICBkZmcvREZHT1NSRW50cnkuY3BwCiAgICAgZGZnL0RG
R09TUkV4aXQuY3BwCkBAIC04Myw2ICs4NCw5IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKKyAgICBkZmcvREZHVmFsdWVTb3Vy
Y2UuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uY3BwCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2UuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2
ICsxNzEsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGgu
aCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlRmxhZ3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFn
cy5oIFwKQEAgLTIwMyw2ICsyMDYsMTMgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVGh1bmtzLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVS
ZWNvdmVyeU92ZXJyaWRlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVT
b3VyY2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAgXAorCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTIzMjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr
OTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHRml4dXBQaGFzZS5jcHAgXAogICAgIGRm
Zy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9ERkdKSVRDb21waWxlci5jcHAgXAorICAgIGRmZy9E
RkdNaW5pZmllZE5vZGUuY3BwIFwKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcCBcCiAgICAgZGZn
L0RGR09wZXJhdGlvbnMuY3BwIFwKICAgICBkZmcvREZHT1NSRW50cnkuY3BwIFwKQEAgLTExMCw2
ICsxMTEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBcCiAgICAgZGZnL0RGR1RodW5r
cy5jcHAgXAorICAgIGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHAgXAorICAgIGRmZy9ERkdWYXJpYWJs
ZUV2ZW50LmNwcCBcCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIFwKICAgICBk
ZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCBcCiAgICAgaW50ZXJwcmV0
ZXIvQWJzdHJhY3RQQy5jcHAgXAogICAgIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHAgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3NiwxNiBAQAogCQkwRjJCREMxNjE1MUM1RDRGMDBD
RDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJC
REMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAg
LyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMyQjE1MUZE
RThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0NjE1MjI4MDIw
MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZp
ZWROb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0Yx
NTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ4MTUyMjgwMjkw
MENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291
cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQxMTUyMjgwMTcwMENE
ODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNEExNTIyODA5QTAwQ0Q4OTEwIC8qIERGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQkRDNDIxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwICovOyB9OworCQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0
RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwICovOyB9OworCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAg
LyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNw
cCAqLzsgfTsKKwkJMEYyQkRDNTExNTIyOEZGRDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRD
NTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwICovOyB9OwogCQkwRjJD
NTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8q
IERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjJDNTU3MDE0NzM4RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0
NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgKi87IH07CiAJCTBGNDI2QTQ4MTQ2
MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC03MjgsNiArNzM4LDE2IEBACiAJCTBGMkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkxMCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBk
ZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJE
QzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBPcGVyYW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
REMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmllZEdyYXBoLmg7IHBhdGggPSBkZmcvREZHTWlu
aWZpZWRHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRTE1MjI4
MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR01pbmlmaWVkTm9kZS5oOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAg
LyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0MDE1
MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuaDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAg
LyogREZHVmFyaWFibGVFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdWYXJpYWJsZUV2ZW50Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0MjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFy
aWFibGVFdmVudFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNDMxNTIyODAx
NzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVFdmVudFN0cmVhbS5oOyBwYXRoID0gZGZnL0RGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRD
NEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5pZmllZE5vZGUuY3BwOyBwYXRoID0gZGZnL0RG
R01pbmlmaWVkTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzRF
MTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVNvdXJjZS5jcHA7IHBhdGggPSBkZmcvREZHVmFs
dWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM1MDE1MjI4
RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJp
YWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDcz
OEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERGR0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zl
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjAwNiw2ICsyMDI2LDkgQEAKIAkJCQkwRjJC
REMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi8sCiAJCQkJODZFQzlE
QkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURC
QzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKKwkJCQkwRjJCREMzRDE1
MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAorCQkJCTBGMkJEQzRDMTUy
MjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovLAorCQkJCTBGMkJEQzNFMTUy
MjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAqLywKIAkJCQk4NkVDQTNFOTEzMkRF
RjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAogCQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJE
OSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAv
KiBERkdOb2RlRmxhZ3MuaCAqLywKQEAgLTIwMzgsNyArMjA2MSwxNCBAQAogCQkJCTg2ODgwRjRD
MTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMw
OTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0
NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi8sCisJCQkJMEYyQkRDM0YxNTIyODAxNzAw
Q0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLAorCQkJCTBGMkJEQzRFMTUy
MjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8sCisJCQkJMEYyQkRDNDAxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAorCQkJCTBGMkJEQzUwMTUy
MjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLywKKwkJCQkwRjJCREM0MTE1
MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oICovLAorCQkJCTBGMkJEQzQyMTUy
MjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCAqLywKKwkJCQkwRjJC
REM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJ
CTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKIAkJCSk7CkBAIC0yNTEyLDYgKzI1NDIsMTIg
QEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJh
bmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZH
TWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4
OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDcxNTIy
ODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1Zh
cmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzA3MCw2ICszMTA2LDEwIEBA
CiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0
Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0
RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0
QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJEQzRGMTUyMjhCRjMwMENEODkxMCAvKiBERkdWYWx1
ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAg
LyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMTIzMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ3MSw3ICsyNDcxLDE5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9m
aWxlcygpCiAgICAgICAgIGRhdGFMb2coIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5
dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKK3ZvaWQgQ29kZUJsb2NrOjpzaHJpbmtERkdEYXRhVG9GaXQoKQoreworICAgIGlmICghbV9k
ZmdEYXRhKQorICAgICAgICByZXR1cm47CisgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5z
aHJpbmtUb0ZpdCgpOworICAgIG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsK
KyAgICBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHLnByZXBhcmVBbmRTaHJpbmsoKTsKKyAgICBtX2Rm
Z0RhdGEtPnZhcmlhYmxlRXZlbnRTdHJlYW0uc2hyaW5rVG9GaXQoKTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogc2l6ZV90IENvZGVCbG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVT
aXplKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsMTAgQEAKICNpbmNsdWRlICJD
b21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKICNpbmNs
dWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKKyNpbmNsdWRlICJE
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZv
LmgiCkBAIC0zMTAsMTMgKzMxMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9k
ZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoV3JpdGVCYXJyaWVyPEpTQ2VsbD4oKmdsb2Jh
bERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIHRhcmdldCkpOwogICAgICAgICB9CiAgICAgICAg
IAotICAgICAgICB2b2lkIHNocmlua1dlYWtSZWZlcmVuY2VzVG9GaXQoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzLnNocmlua1RvRml0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCiAgICAgICAgIHZvaWQgYXBwZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24o
SlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMzI0LDEyICszMTks
MTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5z
aXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIGNvZGVPcmlnaW4sIGZyb20s
IHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2hyaW5rV2Vha1JlZmVy
ZW5jZVRyYW5zaXRpb25zVG9GaXQoKQorICAgICAgICBERkc6Ok1pbmlmaWVkR3JhcGgmIG1pbmlm
aWVkREZHKCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaHJp
bmtUb0ZpdCgpOworICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5taW5pZmllZERGRzsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtJiB2YXJpYWJsZUV2ZW50U3RyZWFt
KCkKKyAgICAgICAgeworICAgICAgICAgICAgY3JlYXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7Cisg
ICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT52YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNocmlua0RGR0RhdGFUb0ZpdCgpOwogI2VuZGlm
CiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFk
ZHJlc3MpCkBAIC0xMTg2LDYgKzExODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAg
IFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAg
ICAgICAgICAgICBWZWN0b3I8V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwog
ICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7
CisgICAgICAgICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVh
bTsKKyAgICAgICAgICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKICAgICAgICAg
ICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlzb25lZDsK
ICAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBh
bmQgdXNlZCBvbiBldmVyeSBHQy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDYgKzExMywxMyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5v
cGVyYW5kKG9wZXJhbmQpKTsgfQogICAgIAorICAgIGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFu
ZCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6
ZV90PihvcGVyYW5kKSA8IG51bWJlck9mTG9jYWxzKCk7CisgICAgfQorICAgIAogICAgIHZvaWQg
c2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTEyNCw2ICsxMzEsMzkgQEAgcHVi
bGljOgogICAgICAgICBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAg
IHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJl
ck9mTG9jYWxzKCk7IH0KKyAgICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAg
cmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4
IC0gbnVtYmVyT2ZBcmd1bWVudHMoKV07CisgICAgfQorICAgIFQmIGF0KHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV9sb2NhbHNb
aW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpXTsKKyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFQmIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGJvb2wg
aXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgbnVtYmVyT2ZB
cmd1bWVudHMoKTsgfQorICAgIGJvb2wgaXNWYXJpYWJsZShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBhcmd1bWVudEZvckluZGV4KHNp
emVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9Cisg
ICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3Bl
cmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRUb09w
ZXJhbmQoaW5kZXgpOworICAgICAgICByZXR1cm4gaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygp
OworICAgIH0KKyAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCkBAIC0xNTMsNiArMTkzLDE2
IEBAIHZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRzPFQsIFRyYWl0cz4mIG8KICAgICB9CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK3ZvaWQgZHVtcE9wZXJhbmRz
KGNvbnN0IE9wZXJhbmRzPFQsIFRyYWl0cz4mIG9wZXJhbmRzLCBGSUxFKiBvdXQpCit7CisgICAg
Ly8gVXNlIGNvbnN0LWNhc3QgYmVjYXVzZToKKyAgICAvLyAxKSBJIGRvbid0IGZlZWwgbGlrZSB3
cml0aW5nIHRoaXMgY29kZSB0d2ljZSwgYW5kCisgICAgLy8gMikgU29tZSBkdW1wKCkgbWV0aG9k
cyBtYXkgbm90IGJlIGNvbnN0LCBhbmQgSSBkb24ndCByZWFsbHkgY2FyZSBpZiB0aGF0J3MKKyAg
ICAvLyAgICB0aGUgY2FzZS4KKyAgICBkdW1wT3BlcmFuZHMoKmNvbnN0X2Nhc3Q8T3BlcmFuZHM8
VCwgVHJhaXRzPio+KCZvcGVyYW5kcyksIG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQs
NyArMTI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdm9p
ZCBzYW1wbGUoKTsKICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB2b2lkIGR1bXAoKTsKKyAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZHVtcCgpOwogICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICBjb25zdCBjaGFyKiBtX25hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTEyMzI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3NjcsNiArMjc2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlKCkKIAogYm9vbCBwYXJzZShHcmFwaCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oIkRGRyBQYXJzaW5nIik7CiAjaWYgREZHX0RFQlVHX0xPQ0FMX0RJU0JB
TEUKICAgICBVTlVTRURfUEFSQU0oZ3JhcGgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIHByaXZhdGU6CiAKIHZvaWQgcGVyZm9ybUNGQShHcmFw
aCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDRkEg
UGhhc2UiKTsKICAgICBydW5QaGFzZTxDRkFQaGFzZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY5Nyw2ICs2OTcsNyBAQCBwcml2YXRlOgogCiB2b2lkIHBlcmZvcm1DU0UoR3JhcGgm
IGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBo
YXNlIik7CiAgICAgcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNDUsNiArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICAKIHZvaWQgcGVyZm9ybUZp
eHVwKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIEZpeHVwIFBoYXNlIik7CiAgICAgcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5o
CShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVy
YXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZH
VmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKICNp
bmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTAsNiArNTIsNyBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICAgICAgICAg
LCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAgICAsIG1fY2FuRmlsbChmYWxz
ZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAtNjAs
NiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0
Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBt
X2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRJbnRlZ2VyKE5vZGVJbmRl
eCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpAQCAtNzAsNiArNzQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAg
ICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBt
X2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0K
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODMsNiArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
c3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7
CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAg
ICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CkBAIC05Nyw2ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwog
ICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwogICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBh
eWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQo
bV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDgsNiArMTE1LDcgQEAgcHVibGljOgog
ICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmls
bCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0g
ZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0
Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdw
cikKQEAgLTExOCw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBE
YXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3By
ID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1f
dXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRl
eCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCkBAIC0xMjksNiArMTM4LDcgQEAgcHVi
bGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1f
Y2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgbV9ib3JuRm9y
T1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9p
ZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BS
UmVnIGdwcikKQEAgLTEzOSwxOSArMTQ5LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZv
cm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAg
ICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBB
U1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUg
bm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgp
IHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChW
YXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIE5vZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1YWxS
ZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBpZiAobV9ub2RlSW5kZXgg
IT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWFsaXZlKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisg
ICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9GaWxsLCBzdHJlYW0pOworICAgICAgICBlbHNl
IGlmIChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICAgICAgYXBwZW5k
U3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgfQogCiAg
ICAgLy8gTWFyayB0aGUgdmFsdWUgYXMgaGF2aW5nIGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1
c2VDb3VudCkuCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBv
ZiB0aGUgdmFsdWUsIGFuZCBhbnkKICAgICAvLyBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJz
IG1heSBiZSBmcmVlZC4KLSAgICBib29sIHVzZSgpCisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVu
dFN0cmVhbSYgc3RyZWFtKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAg
ICAgICByZXR1cm4gIS0tbV91c2VDb3VudDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3Vz
ZUNvdW50OworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICAgICAg
c3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpkZWF0aChtX25vZGVJbmRleCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAg
IC8vIFVzZWQgdG8gY2hlY2sgdGhlIG9wZXJhbmRzIG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRo
ZXkgYXJlIG9uCkBAIC0yMjQsNyArMjU5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIENh
bGxlZCB3aGVuIGEgVmlydHVhbFJlZ2lzdGVyIGlzIGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJlZ2lz
dGVyRmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0IHNw
aWxsRm9ybWF0KQorICAgIHZvaWQgc3BpbGwoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQog
ICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRvbid0
IG5lZWQgc3BpbGxpbmcuCiAgICAgICAgIEFTU0VSVCghbV9jYW5GaWxsKTsKQEAgLTIzNSwxNSAr
MjcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRO
b25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gc3BpbGxGb3JtYXQ7CiAgICAgICAgIG1fY2Fu
RmlsbCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAg
ICAgICAgYXBwZW5kU3BpbGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9
CiAKICAgICAvLyBDYWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAoY29u
c3RhbnRzIGFuZCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxsZWQp
LCB0byBtYXJrIHRoZW0gYXMgbm8gbG9uZ2VyIGJlaW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJzLgot
ICAgIHZvaWQgc2V0U3BpbGxlZCgpCisgICAgdm9pZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZlbnRT
dHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAg
ICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB2YWx1ZXMgdGhhdCBkb24ndCBuZWVk
IHNwaWxsaW5nLCBhbmQgYXJlIGN1cnJlbnRseSBpbiByZWdpc3RlcnMuCiAgICAgICAgIEFTU0VS
VChtX2NhbkZpbGwgJiYgbV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRTcGlsbChTcGlsbCwgc3RyZWFt
LCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGtpbGxTcGlsbGVkKCkK
QEAgLTI1NSw0NiArMjk2LDY3IEBAIHB1YmxpYzoKICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHZh
bHVlIGlzIGZpbGxlZCBpbnRvIG1hY2hpbmUgcmVnaXN0ZXJzLAogICAgIC8vIHRyYWNraW5nIHdo
aWNoIHJlZ2lzdGVycywgYW5kIHdoYXQgZm9ybWF0IHRoZSB2YWx1ZSBoYXMuCiAjaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVlKEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZm9y
bWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQgZmlsbEpTVmFsdWUoVmFyaWFibGVFdmVudFN0
cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRK
UykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICBtX3JlZ2lzdGVyRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZp
bGwsIHN0cmVhbSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGZp
bGxKU1ZhbHVlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZv
cm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lkIGZpbGxKU1ZhbHVlKFZhcmlhYmxFdmVudFN0
cmVhbSYgc3RyZWFtLCBHUFJSZWcgdGFnR1BSLCBHUFJSZWcgcGF5bG9hZEdQUiwgRGF0YUZvcm1h
dCBmb3JtYXQgPSBEYXRhRm9ybWF0SlMpCiAgICAgewogICAgICAgICBBU1NFUlQoZm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IGZvcm1hdDsKICAgICAg
ICAgdS52LnRhZ0dQUiA9IHRhZ0dQUjsgLy8gRklYTUU6IGZvciBKU1ZhbHVlcyB3aXRoIGtub3du
IHR5cGUgKGJvb2xlYW4sIGludGVnZXIsIGNlbGwgZXRjLikgbm8gdGFnR1BSIGlzIG5lZWRlZD8K
ICAgICAgICAgdS52LnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworICAgICAgICAKKyAgICAgICAg
aWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsK
ICAgICB9Ci0gICAgdm9pZCBmaWxsQ2VsbChHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmlsbENlbGwo
VmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAg
bV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRDZWxsOwogICAgICAgICB1LmdwciA9IGdwcjsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRG
aWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQogI2VuZGlmCi0gICAgdm9pZCBmaWxsSW50ZWdlcihH
UFJSZWcgZ3ByKQorICAgIHZvaWQgZmlsbEludGVnZXIoVmFyaWFibGVFdmVudFN0cmVhbSYgc3Ry
ZWFtLCBHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFG
b3JtYXRJbnRlZ2VyOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlm
IChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAg
ICAgfQotICAgIHZvaWQgZmlsbEJvb2xlYW4oR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxCb29s
ZWFuKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Qm9vbGVhbjsKICAgICAgICAgdS5ncHIg
PSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAg
YXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxEb3VibGUoRlBS
UmVnIGZwcikKKyAgICB2b2lkIGZpbGxEb3VibGUoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFt
LCBGUFJSZWcgZnByKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZwciAhPSBJbnZhbGlkRlBSUmVn
KTsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CiAgICAgICAg
IHUuZnByID0gZnByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAg
ICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsU3Rv
cmFnZShHUFJSZWcgZ3ByKQorICAgIHZvaWQgZmlsbFN0b3JhZ2UoVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtLCBHUFJSZWcgZ3ByKQogICAgIHsKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9
IERhdGFGb3JtYXRTdG9yYWdlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVh
bSk7CiAgICAgfQogCiAgICAgYm9vbCBhbGl2ZSgpCkBAIC0zMDMsMTIgKzM2NSwzMyBAQCBwdWJs
aWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIHZvaWQgYXBwZW5kRmlsbChWYXJpYWJsZUV2ZW50
S2luZCBraW5kLCBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0pCisgICAgeworICAgICAgICBp
ZiAobV9yZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICBz
dHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxGUFIoa2luZCwgbV9ub2RlSW5k
ZXgsIHUuZnByKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgICAgICBpZiAobV9yZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUykg
eworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsUGFp
cihraW5kLCBtX25vZGVJbmRleCwgdS5wYWlyLnRhZ0dQUiwgdS5wYWlyLnBheWxvYWRHUFIpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHN0cmVhbS5h
cHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbEdQUihraW5kLCBtX25vZGVJbmRleCwgdS5n
cHIsIG1fcmVnaXN0ZXJGb3JtYXQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRTcGls
bChWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBzdHJlYW0uYXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OnNwaWxsKGtpbmQsIG1fbm9kZUluZGV4LCB2aXJ0dWFs
UmVnaXN0ZXIsIG1fc3BpbGxGb3JtYXQpKTsKKyAgICB9CisgICAgCiAgICAgLy8gVGhlIGluZGV4
IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lz
dGVyLgogICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKICAgICB1aW50MzJfdCBtX3VzZUNvdW50
OwogICAgIERhdGFGb3JtYXQgbV9yZWdpc3RlckZvcm1hdDsKICAgICBEYXRhRm9ybWF0IG1fc3Bp
bGxGb3JtYXQ7CiAgICAgYm9vbCBtX2NhbkZpbGw7CisgICAgYm9vbCBtX2Jvcm5Gb3JPU1I7CiAg
ICAgdW5pb24gewogICAgICAgICBHUFJSZWcgZ3ByOwogICAgICAgICBGUFJSZWcgZnByOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlz
aW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMTIgKzE5MSwxNCBAQCB2b2lkIEpJVENvbXBpbGVy
OjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIGV4aXQubV9jaGVjay5jb3JyZWN0TGF0
ZUp1bXAobGlua0J1ZmZlcik7CiAgICAgfQogICAgIAotICAgIGNvZGVCbG9jaygpLT5zaHJpbmtX
ZWFrUmVmZXJlbmNlc1RvRml0KCk7Ci0gICAgY29kZUJsb2NrKCktPnNocmlua1dlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uc1RvRml0KCk7CisgICAgY29kZUJsb2NrKCktPm1pbmlmaWVkREZHKCkuc2V0
T3JpZ2luYWxHcmFwaFNpemUobV9ncmFwaC5zaXplKCkpOworICAgIGNvZGVCbG9jaygpLT5zaHJp
bmtERkdEYXRhVG9GaXQoKTsKIH0KIAogYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2Rl
JiBlbnRyeSkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEJhY2tl
bmQiKTsKKwogICAgIGNvbXBpbGVFbnRyeSgpOwogICAgIFNwZWN1bGF0aXZlSklUIHNwZWN1bGF0
aXZlKCp0aGlzKTsKICAgICBjb21waWxlQm9keShzcGVjdWxhdGl2ZSk7CkBAIC0yMTYsNiArMjE4
LDggQEAgYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogCiBib29sIEpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciYgZW50cnlXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIEJhY2tlbmQiKTsKKyAgICAKICAgICBjb21waWxlRW50cnkoKTsKIAog
ICAgIC8vID09PSBGdW5jdGlvbiBoZWFkZXIgY29kZSBnZW5lcmF0aW9uID09PQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR01pbmlmaWVkR3JhcGhfaAorI2RlZmluZSBERkdNaW5p
ZmllZEdyYXBoX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdNaW5pZmllZE5vZGUuaCIKKyNpbmNsdWRlIDxhbGdvcml0
aG0+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBNaW5pZmllZEdy
YXBoIHsKK3B1YmxpYzoKKyAgICBNaW5pZmllZEdyYXBoKCkgeyB9CisKKyAgICBNaW5pZmllZE5v
ZGUqIGF0KE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIW1fbGlzdC5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgTWluaWZpZWROb2RlKiBlbnRy
eSA9CisgICAgICAgICAgICBiaW5hcnlTZWFyY2g8TWluaWZpZWROb2RlLCBOb2RlSW5kZXgsIE1p
bmlmaWVkTm9kZTo6Z2V0SW5kZXg+KAorICAgICAgICAgICAgICAgIG1fbGlzdC5iZWdpbigpLCBt
X2xpc3Quc2l6ZSgpLCBub2RlSW5kZXgsIFdURjo6S2V5TXVzdE5vdEJlUHJlc2VudEluQXJyYXkp
OworICAgICAgICBpZiAoZW50cnktPmluZGV4KCkgIT0gbm9kZUluZGV4KQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICB9CisgICAgCisgICAgdm9pZCBh
cHBlbmQoY29uc3QgTWluaWZpZWROb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgbV9saXN0LmFw
cGVuZChub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBwcmVwYXJlQW5kU2hyaW5rKCkKKyAg
ICB7CisgICAgICAgIHN0ZDo6c29ydChtX2xpc3QuYmVnaW4oKSwgbV9saXN0LmVuZCgpLCBNaW5p
ZmllZE5vZGU6OmNvbXBhcmVCeU5vZGVJbmRleCk7CisgICAgICAgIG1fbGlzdC5zaHJpbmtUb0Zp
dCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE9yaWdpbmFsR3JhcGhTaXplKHNpemVfdCBz
aXplKSB7IG1fc2l6ZSA9IHNpemU7IH0KKyAgICAKKyAgICBzaXplX3Qgb3JpZ2luYWxHcmFwaFNp
emUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8TWlu
aWZpZWROb2RlPiBtX2xpc3Q7CisgICAgc2l6ZV90IG1fc2l6ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHTWluaWZpZWRHcmFwaF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWluaWZpZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR01pbmlmaWVkTm9kZS5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUoTm9kZUluZGV4
IG5vZGVJbmRleCwgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoYmVsb25nc0luTWluaWZpZWRH
cmFwaChub2RlLm9wKCkpKTsKKyAgICBNaW5pZmllZE5vZGUgcmVzdWx0OworICAgIHJlc3VsdC5t
X2luZGV4ID0gbm9kZUluZGV4OworICAgIHJlc3VsdC5tX29wID0gbm9kZS5vcCgpOworICAgIGlm
IChoYXNDaGlsZChub2RlLm9wKCkpKQorICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IG5v
ZGUuY2hpbGQxKCkuaW5kZXgoKTsKKyAgICBlbHNlIGlmIChoYXNDb25zdGFudE51bWJlcihub2Rl
Lm9wKCkpKQorICAgICAgICByZXN1bHQubV9jaGlsZE9ySW5mbyA9IG5vZGUuY29uc3RhbnROdW1i
ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25zdGFudChub2RlLm9w
KCkpKTsKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPckluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihub2RlLndlYWtDb25zdGFudCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2Rl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWluaWZpZWROb2RlX2gKKyNkZWZp
bmUgREZHTWluaWZpZWROb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdO
b2RlVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBO
b2RlOworCitpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAgIGNhc2Ug
V2Vha0pTQ29uc3RhbnQ6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBJbnQzMlRv
RG91YmxlOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2NsYXNzIE1p
bmlmaWVkTm9kZSB7CitwdWJsaWM6CisgICAgTWluaWZpZWROb2RlKCkgeyB9CisgICAgCisgICAg
c3RhdGljIE1pbmlmaWVkTm9kZSBmcm9tTm9kZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBu
b2RlKTsKKyAgICAKKyAgICBOb2RlSW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgCisgICAg
Ym9vbCBoYXNDaGlsZDEoKSBjb25zdCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQorICAgIAor
ICAgIE5vZGVJbmRleCBjaGlsZDEoKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChoYXNDaGlsZCht
X29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0KKyAgICAKKyAgICBi
b29sIGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8fCBo
YXNXZWFrQ29uc3RhbnQoKTsgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoKSBj
b25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQorICAgIAorICAgIHVuc2ln
bmVkIGNvbnN0YW50TnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNDb25z
dGFudE51bWJlcihtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0K
KyAgICAKKyAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1dlYWtD
b25zdGFudChtX29wKTsgfQorICAgIAorICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChoYXNXZWFrQ29uc3RhbnQobV9vcCkpOworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fY2hpbGRPckluZm8pOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSogbm9kZSkgeyByZXR1
cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIHN0YXRpYyBib29sIGNvbXBhcmVCeU5vZGVJbmRleChj
b25zdCBNaW5pZmllZE5vZGUmIGEsIGNvbnN0IE1pbmlmaWVkTm9kZSYgYikKKyAgICB7CisgICAg
ICAgIHJldHVybiBhLm1faW5kZXggPCBiLm1faW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBjYXNl
IEludDMyVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihO
b2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gSlNDb25zdGFudDsK
KyAgICB9CisgICAgc3RhdGljIGJvb2wgaGFzV2Vha0NvbnN0YW50KE5vZGVUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gdHlwZSA9PSBXZWFrSlNDb25zdGFudDsKKyAgICB9CisgICAg
CisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsKKyAgICB1aW50cHRy
X3QgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdyYXBoIGhhdmUgb25s
eSBvbmUgY2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZpZWROb2RlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExMjMyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgi
CiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgog
I2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC01NzMsNyArNTc0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQobV92
aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHJldHVy
biBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHNldFZpcnR1YWxS
ZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGhhc1Jlc3VsdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZU51
bVZhcmlhYmxlc0ZvckNvZGVPcmlnaW4oCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0
IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7
Ci0gICAgcmV0dXJuCi0gICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArCi0gICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci19Ci0KLU9TUkV4
aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgp
CitPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1J
bmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1Zh
bHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9j
aGVjayhjaGVjaykKQEAgLTUyLDI0ICs0MiwxMCBAQCBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAg
ICAsIG1fa2luZChraW5kKQogICAgICwgbV9jb3VudCgwKQotICAgICwgbV9hcmd1bWVudHMoaml0
LT5tX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhjb21wdXRlTnVtVmFyaWFi
bGVzRm9yQ29kZU9yaWdpbihqaXQtPm1faml0LmdyYXBoKCkubV9wcm9maWxlZEJsb2NrLCBqaXQt
Pm1fY29kZU9yaWdpbkZvck9TUikpCisgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQog
ICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CiAgICAgQVNT
RVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCi0gICAgICAgIG1f
YXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5t
X2FyZ3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2
YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAgICAgICAgbV92YXJp
YWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFy
aWFibGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNv
bnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0u
ZHVtcChvdXQpOwotICAgIGZwcmludGYob3V0LCAiIDogIik7Ci0gICAgZm9yICh1bnNpZ25lZCB2
YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQot
ICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOwogfQogCiBib29sIE9TUkV4
aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0Nv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
NyBAQAogI2luY2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCiAjaW5jbHVkZSAiREZH
RXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVkZSAiREZHVmFs
dWVSZWNvdmVyeU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNs
dWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMu
aCIKQEAgLTgzLDcgKzg0LDcgQEAgcHJpdmF0ZToKIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJl
cyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNl
bGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKKyAgICBP
U1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCBzdHJl
YW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwogICAgIAogICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBtX2NvZGU7CiAgICAgCkBAIC05OSwzOCArMTAwLDYgQEAgc3RydWN0IE9T
UkV4aXQgewogICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICB1aW50MzJfdCBtX2NvdW50OwogICAg
IAotICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3Zlcmll
cyB3aGlsZSBiZWluZwotICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFi
bGUuCi0gICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1l
bnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIGNvbnN0IFZhbHVlUmVjb3Zl
cnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHNbaW5kZXhdOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3Vt
ZW50cy5zaXplKCldOwotICAgIH0KLSAgICBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5Rm9y
T3BlcmFuZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tvcGVyYW5kVG9Bcmd1
bWVudChvcGVyYW5kKV07Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKLSAg
ICB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXgg
PCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQotICAgIGJvb2wgaXNWYXJpYWJsZShpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAgIGludCBhcmd1bWVu
dEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbmRleDsK
LSAgICB9Ci0gICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwotICAgIH0KLSAgICBp
bnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChp
bmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmRUb0FyZ3VtZW50KGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMu
c2l6ZSgpOwotICAgIH0KLSAgICAKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRhYmxl
KG1fa2luZCkpCkBAIC0xMzgsMTEgKzEwNywxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgICAg
IHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2Nr
LCBwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZHVtcChGSUxFKiBv
dXQpIGNvbnN0OwotICAgIAotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50
czsKLSAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CisgICAgdW5zaWdu
ZWQgbV9zdHJlYW1JbmRleDsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICAKKyAgICBS
ZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsKIAog
cHJpdmF0ZToKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhD
b2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMSBA
QAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQogCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQordm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBkYXRhTG9nKCIpICAi
KTsKLSAgICBleGl0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkdW1wT3BlcmFuZHMob3Bl
cmFuZHMsIFdURjo6ZGF0YUZpbGUoKSk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0Vf
U1BFQ1VMQVRJT05fRkFJTFVSRSkKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRl
YnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CkBAIC0xMTAsNyArMTEx
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAg
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFy
ZSBhbnkgY29uc3RhbnRzLAogICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIg
c2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgogICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJv
b2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Cisg
ICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJP
ZkxvY2FscygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
aV0gPSBmYWxzZTsKIApAQCAtMTI4LDggKzEyOSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKICAgICBi
b29sIGhhdmVVSW50MzJzID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ0LDggKzE0NSw4IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlz
IGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAg
ICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVk
IGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBl
bi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhp
dC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92
YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm51
bWJlck9mTG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2Fs
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgpAQCAtMjE4LDggKzIxOSw4IEBAIHZv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA1KSBQZXJmb3Jt
IGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KICAgICAKICAgICBpZiAoaGF2ZVVuYm94ZWRJbnQz
MnMgfHwgaGF2ZVVJbnQzMnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCkBAIC0yMjcsNyArMjI4LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVt
YmVyID4+IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBVSW50MzJJbkdQUjogewpAQCAtMjc4LDE5ICsyNzksMTkgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJz
IGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhw
ZWN0IHRoYXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQg
bGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFs
aXplUG9pc29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lz
b25lZChvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9p
c29uSW5kZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
b3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29u
SW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAg
ICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbklu
ZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpb3BlcmFuZCkpOwpAQCAtMzA1LDggKzMwNiw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICBpZiAoaGF2ZUZQUnMpIHsKICAgICAgICAgLy8gNykg
Qm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBS
cykKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5k
ZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5
LmZwcigpOwpAQCAtMzE3LDE3ICszMTgsMTcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKICAgICAgICAgLy8gICAg
dGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCiAgICAgICAgIAot
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQ
UkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0
Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29u
U2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9p
c29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5k
cy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAg
ICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMzM1LDEzICszMzYsMTMgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDkpIEJveCBhbGwgdW5ib3hl
ZCBkb3VibGVzIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgIGlmIChoYXZlVW5ib3hlZERvdWJs
ZXMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkRG91YmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUklu
Zm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC0zNTcsOCArMzU4LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgogICAg
ICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOwpAQCAtMzg0LDEzICszODUsMTMgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNl
bWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
ICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3Bs
YWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQxNiw4ICs0MTcs
OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KICAgICAgICAgCiAgICAgICAg
ICAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyczsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgpAQCAtNDQ1LDE0ICs0NDYsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAg
IHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00
NjcsMTEgKzQ2OCwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgLy8gMTEpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAgIAog
ICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAgICAgICBmb3Ig
KGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92
YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBmb3IgKGludCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KW9wZXJhbmRzLm51bWJl
ck9mTG9jYWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CiAgICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwodmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgpAQCAtNDk0LDE0ICs0OTUsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKICAgICAgICAgICAgIG1faml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292
ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShyZWNvdmVyeS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsOCBAQCBleHRlcm4gIkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRXhp
dCBDb21waWxhdGlvbiIpOworICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC02MywxOSArNjUs
MjkgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAt
PmppdENvbXBpbGUoKmdsb2JhbERhdGEpOwogICAgIH0KICAgICAKKyAgICAvLyBDb21wdXRlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRz
OworICAgIGNvZGVCbG9jay0+dmFyaWFibGVFdmVudFN0cmVhbSgpLnJlY29uc3RydWN0KGNvZGVC
bG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+bWluaWZpZWRERkcoKSwgZXhpdC5t
X3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CisgICAgCisgICAgLy8gVGhlcmUgbWF5IGJlIGFuIG92
ZXJyaWRlLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCisgICAgaWYgKCEhZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZSkgeworICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAorICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQog
ICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5t
X3JlY292ZXJ5SW5kZXggLSAxKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZvciBj
b2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgY29k
ZUJsb2NrKTsKKyAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoc2VxIyV1LCBi
YyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGV4aXQubV9z
dHJlYW1JbmRleCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgZXhpdC5tX25vZGVJ
bmRleCwgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIGNvZGVCbG9jayk7CiAjZW5kaWYK
IAogICAgIHsKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAgICAgICAg
IAotICAgICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgcmVjb3ZlcnkpOworICAg
ICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsK
ICAgICAgICAgCiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZq
aXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBP
U1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZvaWQgY29tcGlsZUV4aXQoY29u
c3QgT1NSRXhpdCYsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiwgU3BlY3VsYXRpb25S
ZWNvdmVyeSopOwogCiBwcml2YXRlOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODE3LDYgKzgxNyw3IEBAIHByaXZhdGU6CiAgICAgCiB2b2lkIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgUHJlZGljdGlvbiBQcm9wYWdhdGlvbiBQaGFzZSIpOwogICAgIHJ1blBoYXNl
PFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAKIHZvaWQgcGVyZm9ybVJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFJlZHVuZGFudCBQaGkgRWxpbWluYXRpb24gUGhhc2UiKTsKICAgICBydW5Q
aGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgaW5m
by5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTkwLDcgKzkw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICBt
X2dwcnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BS
KTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsK
KyAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxv
YWRHUFI7CiAgICAgfQpAQCAtMTIyLDEzICsxMjIsMTMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRl
eCksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDEsNyAr
MTQxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
ZnByKTsKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQogCkBAIC0xNjEsNyArMTYx
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAg
ICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjA2LDcgKzIwNiw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJs
ZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMu
dW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7
CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8u
a2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNTEsNyArMjUx
LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnBheWxvYWQo
KSksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25z
dGFudChub2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BS
LCBpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFn
ZSk7CkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUo
Tm9kZUluZAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BS
LCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9ybWF0SlMgOiBzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BS
LCBwYXlsb2FkR1BSLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9y
bWF0SlMgOiBzcGlsbEZvcm1hdCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMxOSw3ICszMTksNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2Rl
SW5kCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CisgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxG
b3JtYXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNCw3ICszMzQsNyBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgIG1fZnBy
cy5yZWxlYXNlKG9sZEZQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQ
UiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
LSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0
YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC0x
MDE5LDcgKzEwMTksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwot
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIo
Km1fc3RyZWFtLCBncHIpOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdl
cjsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAg
ICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlcklu
dGVnZXIpOwotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOworICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIC8vIElmICFz
dHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CkBAIC0xMDk4LDEzICsxMDk4
LDEzIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgp
KSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVn
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnBy
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xMTE1LDcgKzExMTUsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnBy
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9
CiAKQEAgLTExMzcsNyArMTEzNyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
IAogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgcmV0dXJu
IGZwcjsKICAgICAgICAgfQogICAgIH0KQEAgLTExNzMsNyArMTE3Myw3IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdH
UFIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICB9CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQ2VsbChn
cHIpOworICAgICAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEyNDAsNyArMTI0MCw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbENlbGwo
Z3ByKTsKKyAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQogCkBAIC0xMjYyLDcgKzEyNjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7
CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMucmV0
YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwotICAgICAg
ICBpbmZvLmZpbGxDZWxsKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0
cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2FkR1BSOwogICAgIH0KIApA
QCAtMTMwMyw3ICsxMzAzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwog
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVmFs
dWUuYXNCb29sZWFuKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIp
OworICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEzMTUsNyArMTMxNSw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbEJvb2xl
YW4oZ3ByKTsKKyAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRh
Z0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dw
cnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4p
OwotICAgICAgICBpbmZvLmZpbGxCb29sZWFuKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZp
bGxCb29sZWFuKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2Fk
R1BSOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsK
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZp
bGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KQEAgLTczLDcg
KzczLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAg
ICAvLyBTaW5jZSB3ZSBzdGF0aWNhbGx5IGtub3cgdGhhdCB3ZSdyZSBmaWxsaW5nIGFuIGludGVn
ZXIsIGFuZCB2YWx1ZXMKICAgICAgICAgLy8gaW4gdGhlIFJlZ2lzdGVyRmlsZSBhcmUgYm94ZWQs
IHRoaXMgbXVzdCBiZSBEYXRhRm9ybWF0SlNJbnRlZ2VyLgogICAgICAgICAvLyBXZSB3aWxsIGNo
ZWNrIHRoaXMgd2l0aCBhIGppdEFzc2VydCBiZWxvdy4KLSAgICAgICAgaW5mby5maWxsSlNWYWx1
ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgdW5sb2NrKGdwcik7
CiAgICAgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
RG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJl
YWNoYWJsZT8KICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0z
Mih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKICAgICAgICAgICAgICAg
ICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQp
OwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5k
ZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CkBAIC0x
MzUsNyArMTM1LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgog
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogCiAgICAgICAgICAgICAgICAgbV9mcHJzLnJl
dGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91
YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBy
ZWFjaGFibGU/CkBAIC0xNDMsNyArMTQzLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
RG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwog
ICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERh
dGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTE1Myw3ICsxNTMsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUp
OwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICAgICAgICAg
IGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZwcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTE2Miw3ICsxNjIsNyBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAg
IGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2Vy
KCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE3Myw3ICsxNzMsNyBAQCBGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgQVNTRVJU
KHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZv
cm1hdCk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwg
c3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMjE1LDcgKzIxNSw3IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnVubG9jayhqc1Zh
bHVlR3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0ZW1wR3ByKTsKICAgICAgICAgbV9mcHJz
LnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAg
IGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFt
LCBmcHIpOwogICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7CiAgICAgICAgIHJldHVybiBmcHI7
CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERv
dWJsZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnJlbGVhc2UoZ3ByKTsKICAgICAgICAgbV9mcHJz
LnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7CiAKLSAgICAg
ICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJl
YW0sIGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQogCkBAIC0yNzMsMTggKzI3Mywx
OCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAKICAgICAgICAg
aWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERh
dGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwog
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJl
ckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNvZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNv
bnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRl
eCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50
KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC0zMDQsNyArMzA0LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0
KTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9y
bWF0KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTMyMCw3ICsz
MjAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAg
IH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1f
c3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICByZXR1cm4gZ3ByOwog
ICAgIH0KIApAQCAtMzI5LDcgKzMyOSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpT
VmFsdWUoTm9kZUkKICAgICAgICAgR1BSUmVnIGdwciA9IGJveERvdWJsZShmcHIpOwogCiAgICAg
ICAgIC8vIFVwZGF0ZSBhbGwgaW5mbwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAgICAgbV9mcHJzLnJlbGVhc2UoZnByKTsKICAg
ICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsK
IApAQCAtMTAxNiw3ICsxMDE2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlSW50SQogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQo
bm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0z
Mih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKLSAgICAgICAgICAgIGlu
Zm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3Ry
ZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7
CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC0xMDMxLDcgKzEwMzEsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAv
LyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQgYXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3
aXRob3V0IGNoZWNraW5nLgogICAgICAgICAgICAgaWYgKHN0cmljdCkgewogICAgICAgICAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1
cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTA0MCwxNCArMTA0MCwxNCBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAgICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIpOwogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgq
bV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgICAgICByZXR1cm5G
b3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICAgICAgfQogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAgICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQg
ZmFsbCB0aHJvdWdoLgotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpT
SW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKU0ludGVnZXIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKGdwcik7CiAgICAgfQogCkBA
IC0xMDU2LDcgKzEwNTYsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJ
bnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9j
ayhncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3By
LCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0
cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CiAgICAgICAg
ICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwpAQCAtMTA3Nyw3ICsxMDc3
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVn
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBncHI7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihncHIsIHJlc3VsdCk7CkBAIC0xMTU4LDcgKzEx
NTgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAg
ICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CkBAIC0xMTY4
LDcgKzExNjgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAg
ICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0
YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3Vi
bGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTExODEsNyArMTE4MSw3IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgIEZQUlJlZyBm
cHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgbV9m
cHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTExOTAsNyArMTE5MCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHVubG9jayhncHIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEyMDEsNyArMTIwMSw3IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgIEFTU0VSVChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7
Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAg
ICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTI0Myw3ICsxMjQzLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91
YgogICAgICAgICBtX2dwcnMudW5sb2NrKGpzVmFsdWVHcHIpOwogICAgICAgICBtX2dwcnMudW5s
b2NrKHRlbXBHcHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAg
ICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNw
aWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0xMjc0LDcgKzEyNzQsNyBA
QCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3By
cy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwogCi0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOwor
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICByZXR1cm4g
ZnByOwogICAgIH0KIApAQCAtMTMxMiw3ICsxMzEyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsK
ICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7Ci0gICAgICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKQEAgLTEzMjIsMTAgKzEzMjIsMTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAotICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgq
bV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3Jt
YXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xMzQwLDcgKzEzNDAsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBp
bmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwp
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlND
ZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTEzODUsNyArMTM4NSw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIGlm
IChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIs
IERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzOTUs
MTMgKzEzOTUsMTMgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAog
ICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3Bp
bGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0
YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3Vs
YXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CiAgICAgICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsK
ICAgICAgICAgfQotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTQxOCw3ICsx
NDE4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAg
ICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgZ3ByKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVj
dWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJS
ZWcpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQog
CkBAIC0xODQ2LDcgKzE4NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBu
ZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICAgICAgLy8gdGhp
cyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4g
dGhlIHJlZ2lzdGVyIGZpbGUsCiAgICAgICAgICAgICAgICAgLy8gYnV0IHRoYXQgaXQgaXMgc3Rv
cmVkIGFzIGEgZG91YmxlLgotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9y
T3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUp
OworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3Vy
Y2UoRG91YmxlSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0xODU1LDcgKzE4NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdl
ck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAg
ICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0g
VmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTE4NjUsNyArMTg2NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2Rl
LmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAg
ICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lz
dGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg3
NSwxNCArMTg3NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6Y2xh
c3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNCeXRlQXJy
YXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3Rl
ckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFs
dWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xl
YW4odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Ym9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAg
IHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3Vy
Y2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2Nh
bChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODkxLDcg
KzE4OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihu
b2RlLmxvY2FsKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogCi0gICAg
ICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUu
bG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
MjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitTcGVjdWxhdGl2ZUpJ
VDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IG1fY29tcGlsZU9rYXko
dHJ1ZSkKKyAgICAsIG1faml0KGppdCkKKyAgICAsIG1fY29tcGlsZUluZGV4KDApCisgICAgLCBt
X2luZGV4SW5CbG9jaygwKQorICAgICwgbV9nZW5lcmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAgLCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCku
bV9ibG9ja3Muc2l6ZSgpKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1Q
YXJhbWV0ZXJzKCkpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykK
KyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkK
KyAgICAsIG1fc3RhdGUoaml0LmdyYXBoKCkpCisgICAgLCBtX3N0cmVhbSgmaml0LmNvZGVCbG9j
aygpLT52YXJpYWJsZUV2ZW50U3RyZWFtKCkpCisgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5j
b2RlQmxvY2soKS0+bWluaWZpZWRERkcoKSkKK3sKK30KKwogLy8gT24gV2luZG93cyB3ZSBuZWVk
IHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZvcm1zIHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5
LgogLy8gT24gQVJNdjcgd2UgYXNzZXJ0IHRoYXQgYWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUg
dG8gbG93IGJpdCBzZXQgKHBvaW50IHRvIHRodW1iIGNvZGUpLgogI2lmIENBTExJTkdfQ09OVkVO
VElPTl9JU19TVERDQUxMIHx8IENQVShBUk1fVEhVTUIyKQpAQCAtNjQsNyArODAsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJCiAgICAgICAgIEFTU0VSVChpbmZv
LnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3By
KTsKLSAgICAgICAgaW5mby5maWxsU3RvcmFnZShncHIpOworICAgICAgICBpbmZvLmZpbGxTdG9y
YWdlKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAgICAgICAg
IApAQCAtNzQzLDMzICs3NTksNiBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxh
dGl2ZUpJCiB9CiAjZW5kaWYKIAotdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNv
bnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsKLSAgICBjYXNlIFNvdXJjZU5vdFNldDoKLSAg
ICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBW
YWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZw
cmludGYob3V0LCAiSW50MzIiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDZWxsSW5SZWdp
c3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiQ2VsbCIpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJC
b29sIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0g
ICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SGF2ZU5vZGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5k
ZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwpAQCAtODgzLDEyICs4NzIsMzAgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZUluZGV4IG5v
ZGVJbmRleCwgTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUuaGFzVmlydHVhbFJlZ2lzdGVy
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
Z2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAgICBpbmZvLm5v
dGljZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZUluZGV4LCB2aXJ0dWFsUmVnaXN0ZXIpOworfQor
CiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQogewogICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJbmRleEZv
ck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFz
dFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChu
b2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCks
IGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAg
ICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hp
bGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6
Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCAr
OTA5LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBE
RkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50
KCk7CiAjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0
YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxvY2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyNlbmRp
ZgorICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6cmVzZXQo
KSk7CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
YXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CisgICAgICAgIFZhbHVlU291cmNlIHZh
bHVlU291cmNlOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFw
aCgpLmFyZ3VtZW50SXNDYXB0dXJlZChpKSkKLSAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5v
ZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAg
ICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCku
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fYXJndW1lbnRz
W2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFi
bGVFdmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09wZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFG
b3JtYXQoKSkpOwogICAgIH0KICAgICAKICAgICBtX3N0YXRlLnJlc2V0KCk7CkBAIC05MTgsMTIg
KzkzNCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAg
QVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVy
T2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVz
QXRIZWFkLmxvY2FsKGkpOworICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAg
ICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwgbV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVy
ZWQoaSkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFsdWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpCi0gICAgICAgICAgICBtX3Zh
cmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAg
ICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQ
cmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9u
KGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAg
ICAgIG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBl
bmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1h
dCgpKSk7CiAgICAgfQogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwpAQCAtOTM2LDYgKzk1NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIHZlcmlmaWNhdGlvblN1Y2NlZWRlZC5s
aW5rKCZtX2ppdCk7CiAgICAgfQogCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
IGRhdGFMb2coIlxuIik7CisjZW5kaWYKKwogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBt
X2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAg
ICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5kZXhJbkJsb2NrXTsKICAgICAgICAgTm9kZSYg
bm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKQEAgLTk0NSw2ICs5NjgsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAgICAgZGF0YUxvZygiU3Bl
Y3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXgg
ICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgogICAgICAgICAgICAgc3dpdGNoIChub2Rl
Lm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNhc2Ug
V2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQo
TWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2NvbXBpbGVJbmRleCwgbm9kZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKICAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTk4OCw2ICsxMDE2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUu
b3AoKSkpIHsKKyAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmll
ZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4LCBub2RlKSk7CisgICAgICAgICAgICAgICAg
bm90aWNlT1NSQmlydGgobV9jb21waWxlSW5kZXgsIG5vZGUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgaWYg
KG5vZGUuaGFzUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07CkBAIC0xMDA4LDE2
ICsxMDQxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2Vu
ZGlmCiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgREZHX0VOQUJMRShWRVJCT1NFX1ZBTFVFX1JF
Q09WRVJJRVMpCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihhcmd1bWVudFRv
T3BlcmFuZChpKSkuZHVtcChzdGRlcnIpOwotICAgICAgICAKLSAgICAgICAgZGF0YUxvZygiIDog
Iik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChp
bnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCi0gICAgICAgICAgICBjb21wdXRlVmFs
dWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7Ci0jZW5kaWYKLQogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiXG4iKTsKICNlbmRpZgpAQCAt
MTI1NCwxMzYgKzEyNzcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMo
TGluawogCiBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCiB7Ci0gICAgc3dpdGNoICh2YWx1
ZVNvdXJjZS5raW5kKCkpIHsKLSAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKLSAgICAgICAg
Ci0gICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzIoKTsKLQotICAgIGNhc2Ug
Q2VsbEluUmVnaXN0ZXJGaWxlOgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFk
eUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgpOwotCi0gICAgY2FzZSBCb29sZWFuSW5SZWdp
c3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7Ci0gICAgICAgIAotICAgIGNhc2UgRG91YmxlSW5SZWdp
c3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWREb3VibGUoKTsKLQotICAgIGNhc2UgSGF2ZU5vZGU6IHsKLSAgICAgICAg
aWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQotICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNl
Lm5vZGVJbmRleCgpKSk7Ci0gICAgCi0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpOwotICAgICAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRl
KCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2Jv
ZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCi0gICAgICAgICAgICAvLyBl
dmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBP
U1IuCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAg
IGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBp
cyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQu
Ci0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIEludDMyVG9Eb3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBw
bGFjZSBvZiB0aGUgb3JpZ2luYWwgbm9kZSwgYnV0Ci0gICAgICAgICAgICAvLyAgICB3ZSdkIHJh
dGhlciBub3Q7IHNvIHdlIHVzZSBpdCBvbmx5IGlmIGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZwot
ICAgICAgICAgICAgLy8gICAgbGl2ZSB2ZXJzaW9uLgotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIFZhbHVlVG9JbnQzMjogSWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBv
ZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBj
YW4gdXNlIGl0LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVy
OiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1i
ZXIKLSAgICAgICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9u
ZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgotICAgICAgICAgICAgLy8gICAg
cmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEg
VUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlz
IHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YK
LSAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMy
IGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gVUludDMyVG9OdW1i
ZXIpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hp
bGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleCk7
Ci0gICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZp
cnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAm
JiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9
IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBO
b05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBO
b05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1
YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgp
OyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5m
byYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2Rl
KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBhdChpbmZvLm5vZGVJbmRleCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91Ymxl
OgotICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJUb0RvdWJsZUluZGV4ID0gaW5mby5ub2Rl
SW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9J
bnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAgICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMy
VG9Eb3VibGVJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRl
eCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVU
b0ludDMySW5kZXg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRl
eCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMy
VG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgewotICAgICAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJmF0KG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9
ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4
KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAg
IGlmICghZm91bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0
YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9CisgICAgaWYgKHZhbHVlU291cmNlLmlzSW5S
ZWdpc3RlckZpbGUoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlLnZhbHVlUmVjb3Zlcnko
KTsKICAgICAKLSAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOwotCi0gICAgICAgIGlm
IChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAg
ICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIo
KSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdp
c3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjppblBhaXIoaW5mb1B0ci0+dGFnR1BSKCksIGluZm9QdHItPnBheWxvYWRHUFIo
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZv
UHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSksIGluZm9Q
dHItPnNwaWxsRm9ybWF0KCkpOworICAgIEFTU0VSVCh2YWx1ZVNvdXJjZS5raW5kKCkgPT0gSGF2
ZU5vZGUpOworICAgIGlmIChpc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKSk7CiAgICAgCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOwotICAgIH0KLSAgICAgICAgCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQorICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CiB9
CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHU3Bl
Y3VsYXRpdmVKSVRfaAogI2RlZmluZSBERkdTcGVjdWxhdGl2ZUpJVF9oCiAKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJz
dHJhY3RTdGF0ZS5oIgpAQCAtMzMsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVy
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
KyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgogI2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKIApAQCAtNDYsODUgKzQ5LDYgQEAgY2xhc3Mg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwogY2xh
c3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAKLQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewot
ICAgIFNvdXJjZU5vdFNldCwKLSAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAotICAgIEludDMySW5S
ZWdpc3RlckZpbGUsCi0gICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAotICAgIEJvb2xlYW5JblJlZ2lz
dGVyRmlsZSwKLSAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKLSAgICBIYXZlTm9kZQotfTsKLQot
Y2xhc3MgVmFsdWVTb3VyY2UgewotcHVibGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAg
OiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVl
U291cmNlS2luZCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1
ZVNvdXJjZUtpbmQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RT
ZXQpOwotICAgICAgICBBU1NFUlQoa2luZCgpICE9IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0g
ICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhh
dmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rp
b24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKElu
dDMySW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGlj
dGlvbikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAg
cmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIGlmIChpc0Jv
b2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291
cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShW
YWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9
IFNvdXJjZU5vdFNldDsKLSAgICB9Ci0gICAgCi0gICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4
KTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICAgICAgcmV0dXJuIG1fbm9k
ZUluZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAg
ICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIE5vZGVJbmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1
ZVNvdXJjZUtpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5v
dFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOwotICAgICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsK
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlU291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRl
eChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQga2luZCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5kZXgpOwotICAgICAgICBpZiAoa2lu
ZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJu
IEhhdmVOb2RlOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihr
aW5kKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwotfTsKLQotCiBl
bnVtIEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duLCBH
ZW5lcmF0ZWRPcGVyYW5kSW50ZWdlciwgR2VuZXJhdGVkT3BlcmFuZERvdWJsZSwgR2VuZXJhdGVk
T3BlcmFuZEpTVmFsdWV9OwogCiAvLyA9PT0gU3BlY3VsYXRpdmVKSVQgPT09CkBAIC0zMDgsNyAr
MjMyLDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRo
ZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkKICAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNv
dXJjZXMgbWF5IGJlIGZyZWVkLgotICAgICAgICBpZiAoIWluZm8udXNlKCkpCisgICAgICAgIGlm
ICghaW5mby51c2UoKm1fc3RyZWFtKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAv
LyBSZWxlYXNlIHRoZSBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzLgpAQCAtMzY4LDYgKzI5
Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAg
IHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZUluZGV4LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxl
TW92SGludChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIApAQCAtNjU3
LDcgKzU4Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIENoZWNrIHRoZSBHZW5lcmF0aW9uSW5m
byB0byBzZWUgaWYgdGhpcyB2YWx1ZSBuZWVkIHdyaXRpbmcKICAgICAgICAgLy8gdG8gdGhlIFJl
Z2lzdGVyRmlsZSAtIGlmIG5vdCwgbWFyayBpdCBhcyBzcGlsbGVkICYgcmV0dXJuLgogICAgICAg
ICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0gICAgICAgICAgICBpbmZvLnNldFNwaWxsZWQo
KTsKKyAgICAgICAgICAgIGluZm8uc2V0U3BpbGxlZCgqbV9zdHJlYW0sIHNwaWxsTWUpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY2NywyMCArNTkyLDIwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMg
dmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCiAgICAgICAgICAgICAvLyBjb2Rl
LgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3Rv
cmFnZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZv
cm1hdFN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZv
LmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBp
bmZvLnNwaWxsKERhdGFGb3JtYXRJbnRlZ2VyKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1f
c3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0SW50ZWdlcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1h
dERvdWJsZTogewogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChE
YXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGls
bE1lLCBEYXRhRm9ybWF0RG91YmxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC02OTYsMTMgKzYyMSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxl
ZCBpbiBpdHMgYm94ZWQgZm9ybS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbCgo
RGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlu
Zm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCAoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBE
YXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIHJldHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1h
dEJvb2xlYW46IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3Bp
bGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTcxMCw3ICs2
MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewogICAg
ICAgICAgICAgLy8gT24gSlNWQUxVRTMyXzY0IGJveGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgog
ICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNE
b3VibGUpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFG
b3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzE5
LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBE
YXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBK
SVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
aW5mby5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAg
ICAgICAgICAgIGluZm8uc3BpbGwoc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5zcGls
bCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICNlbmRpZgogICAgICAgICB9CkBAIC0xODIwLDcgKzE3NDUsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2Rl
SW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRo
aXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogICAgIHsKQEAgLTE4NDMsNyArMTc2
OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVj
b3ZlcnkocmVjb3ZlcnkpOwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhp
dChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5j
b2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOworICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5k
ZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2so
KS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwogICAgIH0KICAgICB2b2lkIHNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogICAgIHsKQEAgLTE4NjMsNyArMTc4OCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGV4aXQubV9jb2RlT3JpZ2luID0gbmV4dE5vZGUuY29kZU9yaWdp
bjsKICAgICAgICAgZXhpdC5tX2xhc3RTZXRPcGVyYW5kID0gc2V0TG9jYWwubG9jYWwoKTsKICAg
ICAgICAgCi0gICAgICAgIGV4aXQudmFsdWVSZWNvdmVyeUZvck9wZXJhbmQoc2V0TG9jYWwubG9j
YWwoKSkgPSB2YWx1ZVJlY292ZXJ5OworICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJy
aWRlID0gYWRvcHRSZWYoCisgICAgICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNl
dExvY2FsLmxvY2FsKCksIHZhbHVlUmVjb3ZlcnkpKTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQg
d2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWls
LgpAQCAtMTkyMSw2ICsxODQ3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX3Zhcmlh
Ymxlc1tvcGVyYW5kXTsKICAgICB9CiAgICAgCisgICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQg
b3BlcmFuZCwgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UpCisgICAgeworICAgICAgICB2YWx1ZVNv
dXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAg
bV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2
YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAgICB9CisgICAgCiAgICAgLy8gVGhlIEpJVCwg
d2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJ
VENvbXBpbGVyJiBtX2ppdDsKICAgICAvLyBUaGUgY3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRl
ZC4KQEAgLTE5NTQsNiArMTg4Niw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0
ZSBtX3N0YXRlOwogICAgIAorICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0qIG1fc3RyZWFtOworICAg
IE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRHcmFwaDsKKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5
IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1
ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQpAQCAtMjU3Mywy
MCArMjUwOCw2IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAot
aW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQot
ICAgIDogbV9jb21waWxlT2theSh0cnVlKQotICAgICwgbV9qaXQoaml0KQotICAgICwgbV9jb21w
aWxlSW5kZXgoMCkKLSAgICAsIG1faW5kZXhJbkJsb2NrKDApCi0gICAgLCBtX2dlbmVyYXRpb25J
bmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycykKLSAgICAsIG1fYmxv
Y2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5zaXplKCkpCi0gICAgLCBtX2FyZ3VtZW50cyhq
aXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkKLSAgICAsIG1fdmFyaWFibGVzKGppdC5n
cmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9zdGF0ZShtX2ppdC5ncmFwaCgpKQotewotfQot
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZV9oCisjZGVmaW5lIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiVmFsdWVS
ZWNvdmVyeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFsdWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGlj
IFJlZkNvdW50ZWQ8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiB7CitwdWJsaWM6CisgICAgVmFsdWVS
ZWNvdmVyeU92ZXJyaWRlKCkgeyB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGlu
dCBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSkKKyAgICAgICAgOiBvcGVy
YW5kKG9wZXJhbmQpCisgICAgICAgICwgcmVjb3ZlcnkocmVjb3ZlcnkpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQgb3BlcmFuZDsKKyAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJjZU5vdFNldDoKKyAgICAgICAgZnByaW50Zihv
dXQsICJOb3RTZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW50
MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6CisgICAg
ICAgIGZwcmludGYob3V0LCAiQ2VsbCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJvb2xl
YW5JblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICJCb29sIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYo
b3V0LCAiRG91YmxlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAg
ICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlU291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFsdWVTb3VyY2Vf
aAorI2RlZmluZSBERkdWYWx1ZVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRlICJW
YWx1ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51
bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0
ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZpbGUsCisgICAgQ2VsbEluUmVnaXN0ZXJGaWxl
LAorICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwKKyAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwK
KyAgICBIYXZlTm9kZQorfTsKKworc3RhdGljIGlubGluZSBWYWx1ZVNvdXJjZUtpbmQgZGF0YUZv
cm1hdFRvVmFsdWVTb3VyY2VLaW5kKERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKK3sKKyAgICBzd2l0
Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICBy
ZXR1cm4gSW50MzJJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6Cisg
ICAgICAgIHJldHVybiBEb3VibGVJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXRC
b29sZWFuOgorICAgICAgICByZXR1cm4gQm9vbGVhbkluUmVnaXN0ZXJGaWxlOworICAgIGNhc2Ug
RGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJldHVybiBDZWxsSW5SZWdpc3RlckZpbGU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAg
ICAgICByZXR1cm4gVmFsdWVJblJlZ2lzdGVyRmlsZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp
bmUgRGF0YUZvcm1hdCB2YWx1ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQoVmFsdWVTb3VyY2VLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgSW50MzJJblJlZ2lz
dGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnRlZ2VyOworICAgIGNhc2UgQ2Vs
bEluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2Fz
ZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVh
bjsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZv
cm1hdERvdWJsZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdE5vbmU7
CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJlZ2lzdGVyRmlsZShWYWx1ZVNv
dXJjZUtpbmQga2luZCkKK3sKKyAgICByZXR1cm4gdmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0
KGtpbmQpICE9IERhdGFGb3JtYXROb25lOworfQorCitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJs
aWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZy
b21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBW
YWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFsdWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1f
bm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZhbHVlU291cmNlS2luZCkpCisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5vdFNldCk7CisgICAgICAgIEFTU0VSVChraW5k
KCkgIT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShO
b2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChub2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJj
ZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBW
YWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgaWYgKGlzQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3Rpb24pIHx8IGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAg
ICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4g
VmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBWYWx1ZVNvdXJjZSBmb3JEYXRhRm9ybWF0KERhdGFGb3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShkYXRhRm9ybWF0VG9WYWx1ZVNvdXJjZUtpbmQo
ZGF0YUZvcm1hdCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRleChtX25vZGVJbmRleCkgIT0gU291cmNl
Tm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3RlckZpbGUoKSBjb25zdCB7IHJldHVybiBKU0M6
OkRGRzo6aXNJblJlZ2lzdGVyRmlsZShraW5kKCkpOyB9CisgICAgCisgICAgRGF0YUZvcm1hdCBk
YXRhRm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZUtpbmRU
b0RhdGFGb3JtYXQoa2luZCgpKTsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeSB2YWx1
ZVJlY292ZXJ5KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luUmVnaXN0ZXJGaWxl
KCkpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIFZhbHVlSW5SZWdp
c3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVn
aXN0ZXJGaWxlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJG
aWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDZWxsSW5S
ZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUlu
UmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Qm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4oKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZERvdWJsZSgpOworICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIE5vZGVJbmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJj
ZUtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5vdFNldCAm
JiBraW5kIDwgSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRleChOb2Rl
SW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5kZXgpOworICAgICAgICBpZiAoa2luZCA+PSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIEhhdmVO
b2RlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdWYWx1ZVNvdXJjZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnQuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR0ZQUklu
Zm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxl
RXZlbnQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgY2FzZSBSZXNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJSZXNldCIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEJpcnRoVG9GaWxsOgorICAgICAgICBkdW1wRmlsbEluZm8oIkJpcnRo
VG9GaWxsIiwgb3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCaXJ0aFRvU3BpbGw6Cisg
ICAgICAgIGR1bXBTcGlsbEluZm8oIkJpcnRoVG9TcGlsbCIsIG91dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmlsbDoKKyAgICAgICAgZHVtcEZpbGxJbmZvKCJGaWxsIiwgb3V0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgZHVtcFNwaWxsSW5mbygiU3Bp
bGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERlYXRoOgorICAgICAgICBmcHJp
bnRmKG91dCwgIkRlYXRoKEAldSkiLCBub2RlSW5kZXgoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTW92SGludDoKKyAgICAgICAgZnByaW50ZihvdXQsICJNb3ZIaW50KEAldSwgciVkKSIs
IG5vZGVJbmRleCgpLCBvcGVyYW5kKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldExv
Y2FsRXZlbnQ6CisgICAgICAgIGZwcmludGYob3V0LCAiU2V0TG9jYWwociVkLCAlcykiLCBvcGVy
YW5kKCksIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKwordm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wRmlsbEluZm8oY29uc3Qg
Y2hhciogbmFtZSwgRklMRSogb3V0KSBjb25zdAoreworICAgIGZwcmludGYob3V0LCAiJXMoQCV1
LCAiLCBuYW1lLCBub2RlSW5kZXgoKSk7CisgICAgaWYgKGRhdGFGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKQorICAgICAgICBmcHJpbnRmKG91dCwgIiVzIiwgRlBSSW5mbzo6ZGVidWdOYW1l
KGZwcigpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBlbHNlIGlmIChkYXRhRm9ybWF0
KCkgJiBEYXRhRm9ybWF0SlMpCisgICAgICAgIGZwcmludGYob3V0LCAiJXM6JXMiLCBHUFJJbmZv
OjpkZWJ1Z05hbWUodGFnR1BSKCkpLCBHUFJJbmZvOjpkZWJ1Z05hbWUocGF5bG9hZEdQUigpKSk7
CisjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYob3V0LCAiJXMiLCBHUFJJbmZvOjpk
ZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICBmcHJpbnRmKG91dCwgIiwgJXMpIiwgZGF0YUZvcm1hdFRv
U3RyaW5nKGRhdGFGb3JtYXQoKSkpOworfQorCit2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXBTcGls
bEluZm8oY29uc3QgY2hhciogbmFtZSwgRklMRSogb3V0KSBjb25zdAoreworICAgIGZwcmludGYo
b3V0LCAiJXMoQCV1LCByJWQsICVzKSIsIG5hbWUsIG5vZGVJbmRleCgpLCB2aXJ0dWFsUmVnaXN0
ZXIoKSwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50X2gKKyNkZWZpbmUgREZHVmFy
aWFibGVFdmVudF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5o
IgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIHsK
KyAgICAvLyBNYXJrcyB0aGUgYmVnaW5uaW5nIG9mIGEgY2hlY2twb2ludC4gSWYgeW91IGludGVy
cHJldCB0aGUgdmFyaWFibGUKKyAgICAvLyBldmVudHMgc3RhcnRpbmcgYXQgYSBSZXNldCBwb2lu
dCB0aGVuIHlvdSdsbCBnZXQgZXZlcnl0aGluZyB5b3UgbmVlZC4KKyAgICBSZXNldCwKKyAgICAK
KyAgICAvLyBOb2RlIGJpcnRocy4gUG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGEgbm9kZSBiZWNv
bWVzIHJlbGV2YW50IGZvciBPU1IuCisgICAgLy8gSXQgbWF5IGJlIHRoZSBwb2ludCB3aGVyZSBp
dCBpcyBhY3R1YWxseSBib3JuIChpLmUuIGFzc2lnbmVkKSBvciBpdCBtYXkKKyAgICAvLyBiZSBh
IGxhdGVyIHBvaW50LCBpZiBpdCdzIG9ubHkgbGF0ZXIgaW4gdGhlIHNlcXVlbmNlIG9mIGluc3Ry
dWN0aW9ucworICAgIC8vIHRoYXQgd2Ugc3RhcnQgdG8gY2FyZSBhYm91dCB0aGlzIG5vZGUuCisg
ICAgQmlydGhUb0ZpbGwsCisgICAgQmlydGhUb1NwaWxsLAorICAgIAorICAgIC8vIEV2ZW50cyBy
ZWxhdGVkIHRvIGhvdyBhIG5vZGUgaXMgcmVwcmVzZW50ZWQuCisgICAgRmlsbCwKKyAgICBTcGls
bCwKKyAgICAKKyAgICAvLyBEZWF0aCBvZiBhIG5vZGUgLSBhZnRlciB0aGlzIHdlIG5vIGxvbmdl
ciBjYXJlIGFib3V0IHRoaXMgbm9kZS4KKyAgICBEZWF0aCwKKyAgICAKKyAgICAvLyBBIE1vdkhp
bnQgbWVhbnMgdGhhdCBhIG5vZGUgaXMgYmVpbmcgYXNzb2NpYXRlZCB3aXRoIGEgYnl0ZWNvZGUg
b3BlcmFuZCwKKyAgICAvLyBidXQgdGhhdCBpdCBoYXMgbm90IGJlZW4gc3RvcmVkIGludG8gdGhh
dCBvcGVyYW5kLgorICAgIE1vdkhpbnQsCisgICAgCisgICAgLy8gQSBTZXRMb2NhbEV2ZW50IG1l
YW5zIHRoYXQgYSBub2RlJ3MgdmFsdWUgaGFzIGFjdHVhbGx5IGJlZW4gc3RvcmVkIGludG8gdGhl
CisgICAgLy8gYnl0ZWNvZGUgb3BlcmFuZCB0aGF0IGl0J3MgYXNzb2NpYXRlZCB3aXRoLgorICAg
IFNldExvY2FsRXZlbnQsCisgICAgCisgICAgLy8gVXNlZCB0byBpbmRpY2F0ZSBhbiB1bmluaXRp
YWxpemVkIFZhcmlhYmxlRXZlbnQuIERvbid0IHVzZSBmb3Igb3RoZXIKKyAgICAvLyBwdXJwb3Nl
cy4KKyAgICBJbnZhbGlkRXZlbnRLaW5kCit9OworCit1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0
aW9uIHsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHI7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdHJ1
Y3QgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0YWdHUFI7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBheWxvYWRHUFI7CisgICAgfSBwYWlyOworI2Vu
ZGlmCisgICAgaW50MzJfdCB2aXJ0dWFsUmVnOworfTsKKworY2xhc3MgVmFyaWFibGVFdmVudCB7
CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRF
dmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBy
ZXNldCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVu
dC5tX2tpbmQgPSBSZXNldDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5v
ZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZv
cm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0Zp
bGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZv
cm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQVNTRVJUKCEoZGF0
YUZvcm1hdCAmIERhdGFGb3JtYXRKUykpOworI2VuZGlmCisgICAgICAgIFZhcmlhYmxlRXZlbnQg
ZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50
LnUuZ3ByID0gZ3ByOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVu
dC5tX2RhdGFGb3JtYXQgPSBkYXRhRm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAg
fQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQg
ZmlsbFBhaXIoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJ
RCBwYXlsb2FkR1BSKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwg
fHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAg
ZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS5wYWlyLnRhZ0dQUiA9
IHRhZ0dQUjsKKyAgICAgICAgZXZlbnQudS5wYWlyLnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOwor
ICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQg
PSBEYXRhRm9ybWF0SlM7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisjZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsRlBS
KFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpGUFJlZ2lzdGVySUQgZnByKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmly
dGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsK
KyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQudS5mcHIg
PSBmcHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0
YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgc3BpbGwoVmFyaWFibGVFdmVudEtpbmQg
a2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3Rl
ciwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0
aFRvU3BpbGwgfHwga2luZCA9PSBTcGlsbCk7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7
CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmly
dHVhbFJlZyA9IHZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsK
KyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OworICAgICAgICByZXR1cm4gZXZl
bnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGRlYXRoKE5vZGVJbmRl
eCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAg
ICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC5tX2tpbmQgPSBEZWF0
aDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFi
bGVFdmVudCBzZXRMb2NhbChpbnQgb3BlcmFuZCwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgewor
ICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC51LnZpcnR1YWxSZWcg
PSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tpbmQgPSBTZXRMb2NhbEV2ZW50OworICAgICAg
ICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgbW92SGludChOb2RlSW5kZXggbm9k
ZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7
CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUudmly
dHVhbFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IE1vdkhpbnQ7CisgICAg
ICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVFdmVudEtpbmQga2lu
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFyaWFibGVFdmVu
dEtpbmQ+KG1fa2luZCk7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tp
bmQgPT0gRmlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBt
X2tpbmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9PSBEZWF0aCB8fCBtX2tp
bmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKyAgICAKKyAg
ICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbAorICAgICAgICAgICAgICAgfHwg
bV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAg
IHx8IG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PERhdGFGb3JtYXQ+KG1fZGF0YUZvcm1hdCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5k
ID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0
YUZvcm1hdCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJs
ZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgQVNTRVJUKCEobV9kYXRhRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHUuZ3ByOworICAgIH0K
KyAgICAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIHRhZ0dQUigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRo
VG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAm
IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybiB1LnBhaXIudGFnR1BSOworICAgIH0KKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOwor
ICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0
dXJuIHUucGFpci5wYXlsb2FkR1BSOworICAgIH0KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZp
bGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOwor
ICAgICAgICByZXR1cm4gdS5mcHI7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBC
aXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4odS52aXJ0dWFsUmVnKTsKKyAgICB9CisgICAgCisgICAgaW50
IG9wZXJhbmQoKSBjb25zdCB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVu
dCB8fCBtX2tpbmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiB1LnZpcnR1YWxSZWc7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IFZhcmlhYmxlUmVwcmVzZW50YXRpb24mIHZhcmlhYmxlUmVw
cmVzZW50YXRpb24oKSBjb25zdCB7IHJldHVybiB1OyB9CisgICAgCisgICAgdm9pZCBkdW1wKEZJ
TEUqKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wRmlsbEluZm8oY29uc3Qg
Y2hhciogbmFtZSwgRklMRSopIGNvbnN0OworICAgIHZvaWQgZHVtcFNwaWxsSW5mbyhjb25zdCBj
aGFyKiBuYW1lLCBGSUxFKikgY29uc3Q7CisgICAgCisgICAgTm9kZUluZGV4IG1faW5kZXg7Cisg
ICAgCisgICAgLy8gRm9yIEJpcnRoVG9GaWxsLCBGaWxsOgorICAgIC8vICAgLSBUaGUgR1BSIG9y
IEZQUiwgb3IgYSBHUFIgcGFpci4KKyAgICAvLyBGb3IgQmlydGhUb1NwaWxsLCBTcGlsbDoKKyAg
ICAvLyAgIC0gVGhlIHZpcnR1YWwgcmVnaXN0ZXIuCisgICAgLy8gRm9yIE1vdkhpbnQsIFNldExv
Y2FsRXZlbnQ6CisgICAgLy8gICAtIFRoZSBieXRlY29kZSBvcGVyYW5kLgorICAgIC8vIEZvciBE
ZWF0aDoKKyAgICAvLyAgIC0gVW51c2VkLgorICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gdTsK
KyAgICAKKyAgICBpbnQ4X3QgbV9raW5kOworICAgIGludDhfdCBtX2RhdGFGb3JtYXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR1ZhcmlhYmxlRXZlbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVu
dCkKK3sKKyAgICBkYXRhTG9nKCJzZXEjJWx1OiIsIHNpemUoKSk7CisgICAgZXZlbnQuZHVtcChX
VEY6OmRhdGFGaWxlKCkpOworICAgIGRhdGFMb2coIiAiKTsKK30KKworc3RydWN0IE1pbmlmaWVk
R2VuZXJhdGlvbkluZm8geworICAgIGJvb2wgZmlsbGVkOyAvLyB0cnVlIC0+IGluIGdwci9mcHIv
cGFpciwgZmFsc2UgLT4gc3BpbGxlZAorICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gdTsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAKKyAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvKCkK
KyAgICAgICAgOiBmb3JtYXQoRGF0YUZvcm1hdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHVwZGF0ZShjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgQmlydGhUb0ZpbGw6CisgICAg
ICAgIGNhc2UgRmlsbDoKKyAgICAgICAgICAgIGZpbGxlZCA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGNhc2UgU3BpbGw6Cisg
ICAgICAgICAgICBmaWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERlYXRoOgorICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHUgPSBldmVudC52YXJpYWJsZVJlcHJlc2VudGF0aW9u
KCk7CisgICAgICAgIGZvcm1hdCA9IGV2ZW50LmRhdGFGb3JtYXQoKTsKKyAgICB9Cit9OworCit2
b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBoLAorICAg
IHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVyaWVz
KSBjb25zdAoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpOworICAgIAorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAg
ICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG51bVZhcmlhYmxlcyA9
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQ7CisgICAgZWxzZQorICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGlu
ZUNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgCisgICAgLy8gQ3Jhenkgc3Bl
Y2lhbCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFy
Z3VtZW50IGNoZWNrCisgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVz
IGFyZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCisgICAgLy8gcmVmbGVj
dCB0aGlzLgorICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3Bl
cmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlh
Ymxlcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVy
eTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgLy8gU3RlcCAxOiBGaW5kIHRoZSBsYXN0IGNoZWNrcG9pbnQsIGFuZCBmaWd1cmUgb3V0
IHRoZSBudW1iZXIgb2YgdmlydHVhbCByZWdpc3RlcnMgYXMgd2UgZ28uCisgICAgdW5zaWduZWQg
c3RhcnRJbmRleCA9IGluZGV4IC0gMTsKKyAgICB3aGlsZSAoYXQoc3RhcnRJbmRleCkua2luZCgp
ICE9IFJlc2V0KQorICAgICAgICBzdGFydEluZGV4LS07CisgICAgCisgICAgLy8gU3RlcCAyOiBD
cmVhdGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRz
LgorICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51
bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBWZWN0b3I8TWluaWZpZWRHZW5lcmF0
aW9uSW5mbywgMzI+IGdlbmVyYXRpb25JbmZvcyhncmFwaC5vcmlnaW5hbEdyYXBoU2l6ZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgeworICAg
ICAgICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOworICAgICAgICBzd2l0Y2gg
KGV2ZW50LmtpbmQoKSkgeworICAgICAgICBjYXNlIFJlc2V0OgorICAgICAgICAgICAgLy8gbm90
aGluZyB0byBkby4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRoVG9GaWxs
OgorICAgICAgICBjYXNlIEJpcnRoVG9TcGlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAg
ICBjYXNlIFNwaWxsOgorICAgICAgICBjYXNlIERlYXRoOgorICAgICAgICAgICAgZ2VuZXJhdGlv
bkluZm9zW2V2ZW50Lm5vZGVJbmRleCgpXS51cGRhdGUoZXZlbnQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNl
cy5oYXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNv
dXJjZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50Lm5vZGVJ
bmRleCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50
OgorICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFu
ZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9w
ZXJhbmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQuZGF0YUZvcm1hdCgpKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gU3RlcCAzOiBSZWNvcmQgdGhlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLCBzbyB3
ZSBjYW4gZ2V0IHRvIHRoZW0gbW9yZSBxdWlja2x5LgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+
IGluZGljZXNPZkxpdmVUaGluZ3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdlbmVy
YXRpb25JbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZ2VuZXJhdGlvbkluZm9zW2ld
LmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIGluZGljZXNPZkxpdmVUaGlu
Z3MuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDQ6IENvbXB1dGUgdmFsdWUg
cmVjb3ZlcmllcyEKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
Pihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
VmFsdWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOworICAgICAgICBpZiAoc291
cmNlLmlzSW5SZWdpc3RlckZpbGUoKSkgeworICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ld
ID0gc291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc291cmNlLmtpbmQoKSA9PSBIYXZlTm9kZSk7
CisgICAgICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5ub2RlSW5kZXgo
KSk7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnROdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0
YW50UmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCArIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNXZWFr
Q29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
TWluaWZpZWRHZW5lcmF0aW9uSW5mbyogaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nbc291cmNlLm5v
ZGVJbmRleCgpXTsKKyAgICAgICAgaWYgKGluZm8tPmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkg
eworICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9k
ZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgICAgICAvLyBU
aGVyZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIEludDMyVG9Eb3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2lu
YWwgbm9kZSwgYnV0CisgICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVz
ZSBpdCBvbmx5IGlmIGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZworICAgICAgICAgICAgLy8gICAg
bGl2ZSB2ZXJzaW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQz
MjogSWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAg
ICAgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZl
IHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgICAgIC8v
ICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJv
cGVybHkgZm9ybWVkIG51bWJlcgorICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50
MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZSByZXZl
cnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1
dCBpdHMKKyAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlz
IG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgICAgIC8vICAg
IHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7
CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGUtPmNoaWxkMSgpOwor
ICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGluZm8gPSAmZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAg
aWYgKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMyVG9Eb3VibGVJbmRl
eCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXgg
PSBOb05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXgg
PSBOb05vZGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluZGljZXNPZkxpdmVUaGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZGljZXNPZkxpdmVUaGluZ3NbaV07
CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2RlSW5kZXgpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNDaGlsZDEoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCkgIT0gc291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mb3Nbbm9k
ZUluZGV4XS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91
YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJUb0RvdWJsZUluZGV4ID0gbm9kZUlu
ZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMy
SW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhU
b1VzZTsKKyAgICAgICAgICAgICAgICBpZiAoaW50MzJUb0RvdWJsZUluZGV4ICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBpbnQzMlRvRG91YmxlSW5kZXg7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4Owor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1Vz
ZSA9IE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSAmZ2VuZXJh
dGlvbkluZm9zW25vZGVJbmRleFRvVXNlXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGlu
Zm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJp
ZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIAor
ICAgICAgICBpZiAoaW5mby0+ZmlsbGVkKSB7CisgICAgICAgICAgICBpZiAoaW5mby0+Zm9ybWF0
ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPSBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvLT51LmZwcik7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAg
ICAgIGlmIChpbmZvLT5mb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mby0+dS50YWdHUFIs
IGluZm8tPnUucGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVj
b3Zlcnk6OmluR1BSKGluZm8tPnUuZ3ByLCBpbmZvLT5mb3JtYXQpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9
CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGluZm8tPnUudmlydHVhbFJlZyksIGluZm8tPmZvcm1h
dCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW1faAorI2RlZmluZSBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZEdy
YXBoLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIk9wZXJhbmRz
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZhcmlh
YmxlRXZlbnQ+IHsKK3B1YmxpYzoKKyAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJpYWJs
ZUV2ZW50JiBldmVudCkKKyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
ICAgICBsb2dFdmVudChldmVudCk7CisjZW5kaWYKKyAgICAgICAgYXBwZW5kKGV2ZW50KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCisgICAg
ICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgb3BlcmFuZHMpIGNv
bnN0OworCitwcml2YXRlOgorICAgIHZvaWQgbG9nRXZlbnQoY29uc3QgVmFyaWFibGVFdmVudCYg
ZXZlbnQpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogCiB2b2lkIHBl
cmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFZpcnR1YWwgUmVnaXN0ZXIgQWxsb2NhdGlv
biBQaGFzZSIpOwogICAgIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4o
Z3JhcGgpOwogfQogCg==
</data>
<flag name="commit-queue"
          id="138464"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134253</attachid>
            <date>2012-03-28 03:36:48 -0700</date>
            <delta_ts>2012-03-28 03:47:36 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>variablestream_patch_10.diff</filename>
            <type>text/plain</type>
            <size>184465</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxMi0wMy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBhaW1zIHRvIHJlZHVjZSBvbmUgYXNwZWN0IG9mIERGRyBjb21waWxlIHRpbWVz
OiB0aGUgZmFjdAorICAgICAgICB0aGF0IHdlIGN1cnJlbnRseSBjb21wdXRlIHRoZSB2YWx1ZSBy
ZWNvdmVyaWVzIGZvciBlYWNoIGxvY2FsIGFuZAorICAgICAgICBhcmd1bWVudCBvbiBldmVyeSBz
cGVjdWxhdGlvbiBjaGVjay4gV2UgY29tcGlsZSBtYW55IHNwZWN1bGF0aW9uIGNoZWNrcywKKyAg
ICAgICAgc28gdGhpcyBjYW4gYWRkIHVwIHF1aWNrLiBUaGUgc3RyYXRlZ3kgdGhhdCB0aGlzIGNo
YW5nZSB0YWtlcyBpcyB0bworICAgICAgICBoYXZlIHRoZSBERkcgc2F2ZSBqdXN0IGVub3VnaCBp
bmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGNvbXBpbGVyIGlzCisgICAgICAgIGNob29zaW5nIHRv
IHJlcHJlc2VudCBzdGF0ZSwgdGhhdCB0aGUgREZHOjpPU1JFeGl0Q29tcGlsZXIgY2FuIHJlaWZ5
CisgICAgICAgIHRoZSB2YWx1ZSByZWNvdmVyaWVzIGxhemlseS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXBwZWFycyB0byBiZSBhbiAwLjMlIFN1blNwaWRlciBzcGVlZC11cCBhbmQgaXMgbmV1
dHJhbCBlbHNld2hlcmUuCisgICAgICAgIAorICAgICAgICBJIGFsc28gdG9vayB0aGUgb3Bwb3J0
dW5pdHkgdG8gZml4IHRoZSBzYW1wbGluZyByZWdpb25zIHByb2ZpbGVyIChpdAorICAgICAgICB3
YXMgbWlzc2luZyBhbiBleHBvcnQgbWFjcm8pIGFuZCB0byBwdXQgaW4gbW9yZSBzYW1wbGluZyBy
ZWdpb25zIGluCisgICAgICAgIHRoZSBERkcgKHdoaWNoIGFyZSBkaXNhYmxlZCBzbyBsb25nIGFz
IEVOQUJMRShTQU1QTElOR19SRUdJT05TKSBpcworICAgICAgICBmYWxzZSkuCisgICAgICAgIAor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFUb0Zp
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1pbmlmaWVkREZHKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKERGR0RhdGEpOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpoYXNP
cGVyYW5kKToKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNp
emUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6YXJndW1lbnRGb3JJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp2YXJpYWJsZUZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRGb3JJbmRleCk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdSZWdpb24pOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgor
ICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bUNGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbklu
Zm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2VuZXJhdGlvbkluZm8p
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRp
b25JbmZvOjppbml0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmluaXREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0U3Rv
cmFnZSk6CisgICAgICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c3BpbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzZXRTcGlsbGVkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9u
SW5mbzo6ZmlsbEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpm
aWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRGaWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kU3BpbGwpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChN
aW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpNaW5pZmll
ZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphdCk6CisgICAgICAg
IChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZEdyYXBoOjpwcmVwYXJlQW5kU2hyaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5p
ZmllZEdyYXBoOjpzZXRPcmlnaW5hbEdyYXBoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWRHcmFwaDo6b3JpZ2luYWxHcmFwaFNpemUpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmll
ZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YmVsb25nc0luTWluaWZp
ZWRHcmFwaCk6CisgICAgICAgIChNaW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok1p
bmlmaWVkTm9kZTo6TWluaWZpZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5v
ZGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29u
c3RhbnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnRO
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAg
ICAgICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRDb21w
aWxlcik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9w
YWdhdGlvbik6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OnVzZSk6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAgICAg
IChERkcpOgorICAgICAgICAoVmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU6OlZhbHVlUmVjb3ZlcnlPdmVycmlkZSk6CisgICAg
ICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHVmFs
dWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsdWVTb3Vy
Y2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxl
KToKKyAgICAgICAgKFZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJj
ZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6
OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkYXRh
Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6dmFsdWVSZWNvdmVyeSk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXBGaWxsSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVt
cFNwaWxsSW5mbyk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFyaWFibGVFdmVudDo6VmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVFdmVudDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZp
bGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6ZGVhdGgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50Ojpub2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OmRhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dGFnR1BSKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpwYXlsb2FkR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50OjpmcHIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnZpcnR1
YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6b3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dmFyaWFibGVSZXByZXNlbnRhdGlv
bik6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9n
RXZlbnQpOgorICAgICAgICAoTWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAg
ICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoVmFyaWFibGVFdmVudFN0cmVhbSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbik6CisKIDIwMTItMDMtMjcgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgT1NSIGV4aXQgc2hvdWxkIG5vdCBnZW5lcmF0
ZSBhbiBleGl0IGZvciB2YXJpYWJsZXMgb2YgaW5saW5lZXMgaWYgdGhlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcg
QEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRml4dXBQaGFzZS5jcHAK
ICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorICAgIGRm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwCiAgICAgZGZnL0RGR09TUkV4aXQuY3BwCkBAIC04Myw2ICs4NCw5IEBA
IFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1RodW5r
cy5jcHAKKyAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCiAgICAgZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2Uu
Y3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2
aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oIFwKQEAgLTIwMyw2ICsyMDYsMTMgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcv
REZHRml4dXBQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9ERkdK
SVRDb21waWxlci5jcHAgXAorICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKICAgICBkZmcv
REZHTm9kZUZsYWdzLmNwcCBcCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwIFwKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwIFwKQEAgLTExMCw2ICsxMTEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBcCiAgICAgZGZnL0RGR1RodW5rcy5jcHAgXAorICAgIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5jcHAgXAorICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBcCisgICAgZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwIFwKICAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAgXAogICAgIGludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niwx
NiBAQAogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMkMxNTFGREU5
MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0NTE1
MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkR3JhcGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCREM0NjE1MjI4MDIwMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMzRTE1
MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDAxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERG
R1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJEQzQxMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNEEx
NTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDIxNTIyODAxNzAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwICovOyB9OworCQkwRjJCREM0QjE1MjI4
MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8q
IERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZp
ZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovOyB9Owor
CQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNEUxNTIyOEJFNzAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKKwkJMEYyQkRDNTExNTIyOEZGRDAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1Zhcmlh
YmxlRXZlbnQuY3BwICovOyB9OwogCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29k
ZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJDNTU3MDE0NzM4RjM1MDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5jcHAgKi87IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0
NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjgsNiArNzM4LDE2IEBACiAJCTBGMkJE
QzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkx
MCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVyYW5kcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWlu
aWZpZWRHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmll
ZEdyYXBoLmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkTm9kZS5oOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlk
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCREM0MDE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVTb3Vy
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuaDsg
cGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50Lmg7IHBhdGggPSBkZmcv
REZHVmFyaWFibGVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0
MjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5p
ZmllZE5vZGUuY3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNv
dXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVNv
dXJjZS5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERG
R0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjAwNiw2ICsyMDI2LDkgQEAKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENv
bXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29t
cGlsZXIuaCAqLywKKwkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oICovLAorCQkJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovLAorCQkJCTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuaCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAog
CQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJ
CTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKQEAgLTIwMzgs
NyArMjA2MSwxNCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1
bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmgg
Ki8sCisJCQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZS5oICovLAorCQkJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJj
ZS5jcHAgKi8sCisJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmggKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oICovLAorCQkJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50LmNwcCAqLywKKwkJCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudC5oICovLAorCQkJCTBGMkJEQzQyMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcCAqLywKKwkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFy
aWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywK
IAkJCSk7CkBAIC0yNTEyLDYgKzI1NDIsMTIgQEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAz
QjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
REM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEw
IC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0OTE1MjI4MDk2
MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRD
NEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzA3MCw2ICszMTA2LDEwIEBACiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVG
IC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMjE1
MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0RDE1MjI4MTg2MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJEQzRG
MTUyMjhCRjMwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3MSw3ICsyNDcxLDE5IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAgICAgICAgIGRhdGFMb2coIiAgIGJj
ID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50
ZXIpOwogICAgIH0KIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BS
T0ZJTEUpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgQ29kZUJsb2NrOjpzaHJpbmtERkdE
YXRhVG9GaXQoKQoreworICAgIGlmICghbV9kZmdEYXRhKQorICAgICAgICByZXR1cm47CisgICAg
bV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKKyAgICBtX2RmZ0RhdGEtPnZhcmlhYmxlRXZlbnRTdHJlYW0uc2hy
aW5rVG9GaXQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogc2l6ZV90IENvZGVC
bG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsOCArMzgsMTAgQEAKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUg
IkRGR01pbmlmaWVkR3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUg
IkRGR09TUkV4aXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCiAjaW5j
bHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNp
bmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0zMTAsMTMgKzMxMiw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQo
V3JpdGVCYXJyaWVyPEpTQ2VsbD4oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIHRh
cmdldCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNocmlua1dlYWtSZWZl
cmVuY2VzVG9GaXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVu
Y2VzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHZvaWQgYXBw
ZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZy
b20sIEpTQ2VsbCogdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5l
Y2Vzc2FyeSgpOwpAQCAtMzI0LDEyICszMTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVj
dXRhYmxlKCksIGNvZGVPcmlnaW4sIGZyb20sIHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRpb25zVG9GaXQoKQorICAgICAg
ICBERkc6Ok1pbmlmaWVkR3JhcGgmIG1pbmlmaWVkREZHKCkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
bV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgY3JlYXRl
REZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5taW5p
ZmllZERGRzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHOjpWYXJpYWJsZUV2ZW50
U3RyZWFtJiB2YXJpYWJsZUV2ZW50U3RyZWFtKCkKKyAgICAgICAgeworICAgICAgICAgICAgY3Jl
YXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT52
YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNo
cmlua0RGR0RhdGFUb0ZpdCgpOwogI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCkBAIC0xMTg2LDYgKzExODgsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zl
cnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgICAgICAgICBWZWN0b3I8V2Vha1JlZmVyZW5j
ZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CisgICAgICAgICAgICBERkc6OlZhcmlhYmxlRXZl
bnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKKyAgICAgICAgICAgIERGRzo6TWluaWZpZWRH
cmFwaCBtaW5pZmllZERGRzsKICAgICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAg
ICAgICAgICBib29sIGlzSmV0dGlzb25lZDsKICAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxMTIzMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDYgKzExMywxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgVCYgb3Bl
cmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQogICAgIAorICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3Qg
VCYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKQEAgLTEyNCw2ICsxMzEsMzkgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbChvcGVyYW5k
LCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBjb25zdCBUJiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKV07CisgICAg
fQorICAgIFQmIGF0KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhd
OworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpXTsK
KyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4KTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVy
biBhdChpbmRleCk7IH0KKworICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKTsgfQorICAgIGJvb2wgaXNWYXJp
YWJsZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQor
ICAgIGludCBhcmd1bWVudEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMu
c2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRUb09wZXJhbmQoaW5kZXgpOworICAgICAgICByZXR1cm4g
aW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNsZWFy
KCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpCkBAIC0xNTMsNiArMTkzLDE2IEBAIHZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRz
PFQsIFRyYWl0cz4mIG8KICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cz4KK3ZvaWQgZHVtcE9wZXJhbmRzKGNvbnN0IE9wZXJhbmRzPFQsIFRyYWl0cz4mIG9w
ZXJhbmRzLCBGSUxFKiBvdXQpCit7CisgICAgLy8gVXNlIGNvbnN0LWNhc3QgYmVjYXVzZToKKyAg
ICAvLyAxKSBJIGRvbid0IGZlZWwgbGlrZSB3cml0aW5nIHRoaXMgY29kZSB0d2ljZSwgYW5kCisg
ICAgLy8gMikgU29tZSBkdW1wKCkgbWV0aG9kcyBtYXkgbm90IGJlIGNvbnN0LCBhbmQgSSBkb24n
dCByZWFsbHkgY2FyZSBpZiB0aGF0J3MKKyAgICAvLyAgICB0aGUgY2FzZS4KKyAgICBkdW1wT3Bl
cmFuZHMoKmNvbnN0X2Nhc3Q8T3BlcmFuZHM8VCwgVHJhaXRzPio+KCZvcGVyYW5kcyksIG91dCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNp
b24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9v
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBzYW1wbGUoKTsKICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyB2b2lkIGR1bXAoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZHVtcCgpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBjaGFyKiBt
X25hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjcsNiArMjc2Nyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIAogYm9vbCBwYXJzZShHcmFwaCYgZ3Jh
cGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQYXJzaW5nIik7
CiAjaWYgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEUKICAgICBVTlVTRURfUEFSQU0oZ3JhcGgpOwog
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIHByaXZh
dGU6CiAKIHZvaWQgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDRkEgUGhhc2UiKTsKICAgICBydW5QaGFzZTxDRkFQaGFz
ZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw2ICs2OTcsNyBAQCBwcml2YXRl
OgogCiB2b2lkIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7CiAgICAgcnVuUGhhc2U8Q1NFUGhhc2U+
KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDcgQEAgcHJp
dmF0ZToKICAgICAKIHZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZpeHVwIFBoYXNlIik7CiAgICAgcnVuUGhh
c2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIkRG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKICNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVk
ZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIApAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKICAgICAgICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25l
KQogICAgICAgICAsIG1fY2FuRmlsbChmYWxzZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFs
c2UpCiAgICAgewogICAgIH0KIApAQCAtNjAsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9
IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jv
cm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAg
ICB2b2lkIGluaXRJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50
LCBHUFJSZWcgZ3ByKQpAQCAtNzAsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxG
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAg
ICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODMsNiAr
ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsK
ICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAg
ICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC05Nyw2ICsxMDMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwog
ICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9T
UiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBA
IC0xMDgsNiArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZv
cm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdw
cjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNv
dW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1
aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTExOCw2ICsxMjYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5G
aWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1Ig
PSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGlu
aXREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBm
cHIpCkBAIC0xMjksNiArMTM4LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0g
RGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZw
ciA9IGZwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVCht
X3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUlu
ZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTEzOSwxOSArMTQ5LDQ0IEBA
IHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAg
ICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9y
bkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAg
ICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUu
CiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAg
CisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIE5v
ZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAg
eworICAgICAgICBpZiAobV9ub2RlSW5kZXggIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIWFsaXZlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJG
b3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9G
aWxsLCBzdHJlYW0pOworICAgICAgICBlbHNlIGlmIChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3Jt
YXROb25lKQorICAgICAgICAgICAgYXBwZW5kU3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZp
cnR1YWxSZWdpc3Rlcik7CisgICAgfQogCiAgICAgLy8gTWFyayB0aGUgdmFsdWUgYXMgaGF2aW5n
IGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1c2VDb3VudCkuCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmFsdWUsIGFuZCBhbnkKICAgICAvLyBh
c3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBiZSBmcmVlZC4KLSAgICBib29sIHVzZSgp
CisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAgICAgICByZXR1cm4gIS0tbV91c2VDb3VudDsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3VzZUNvdW50OworICAgICAgICAKKyAgICAgICAgaWYg
KHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGVJbmRl
eCAhPSBOb05vZGUpOworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpkZWF0aChtX25vZGVJbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY2hlY2sgdGhlIG9wZXJhbmRz
IG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRoZXkgYXJlIG9uCkBAIC0yMjQsNyArMjU5LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIGEgVmlydHVhbFJlZ2lzdGVyIGlz
IGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJlZ2lzdGVyRmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0g
ICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQorICAgIHZvaWQgc3BpbGwoVmFy
aWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQogICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0
IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxpbmcuCiAgICAgICAgIEFTU0VS
VCghbV9jYW5GaWxsKTsKQEAgLTIzNSwxNSArMjcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9y
ZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0g
c3BpbGxGb3JtYXQ7CiAgICAgICAgIG1fY2FuRmlsbCA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kU3BpbGwoU3BpbGwsIHN0cmVh
bSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgb24gdmFsdWVzIHRo
YXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAoY29uc3RhbnRzIGFuZCB2YWx1ZXMgdGhhdCBoYXZlCiAg
ICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxsZWQpLCB0byBtYXJrIHRoZW0gYXMgbm8gbG9uZ2VyIGJl
aW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJzLgotICAgIHZvaWQgc2V0U3BpbGxlZCgpCisgICAgdm9p
ZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBvbiB2YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLCBhbmQgYXJlIGN1cnJlbnRseSBp
biByZWdpc3RlcnMuCiAgICAgICAgIEFTU0VSVChtX2NhbkZpbGwgJiYgbV9yZWdpc3RlckZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9y
bWF0Tm9uZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAg
ICBhcHBlbmRTcGlsbChTcGlsbCwgc3RyZWFtLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGtpbGxTcGlsbGVkKCkKQEAgLTI1NSw0NiArMjk2LDY3IEBAIHB1YmxpYzoK
ICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHZhbHVlIGlzIGZpbGxlZCBpbnRvIG1hY2hpbmUgcmVn
aXN0ZXJzLAogICAgIC8vIHRyYWNraW5nIHdoaWNoIHJlZ2lzdGVycywgYW5kIHdoYXQgZm9ybWF0
IHRoZSB2YWx1ZSBoYXMuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVl
KEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQg
ZmlsbEpTVmFsdWUoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByLCBEYXRh
Rm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gZm9ybWF0Owog
ICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1Ip
CisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVlKEdQUlJlZyB0YWdHUFIsIEdQUlJl
ZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lk
IGZpbGxKU1ZhbHVlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIHRhZ0dQUiwg
R1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIG1fcmVn
aXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHUudi50YWdHUFIgPSB0YWdHUFI7IC8vIEZJ
WE1FOiBmb3IgSlNWYWx1ZXMgd2l0aCBrbm93biB0eXBlIChib29sZWFuLCBpbnRlZ2VyLCBjZWxs
IGV0Yy4pIG5vIHRhZ0dQUiBpcyBuZWVkZWQ/CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5
bG9hZEdQUjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAg
ICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmlsbENlbGwoR1BS
UmVnIGdwcikKKyAgICB2b2lkIGZpbGxDZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwg
R1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0
Q2VsbDsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3Ju
Rm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNl
bmRpZgotICAgIHZvaWQgZmlsbEludGVnZXIoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxJbnRl
Z2VyKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIg
PSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAg
YXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxCb29sZWFuKEdQ
UlJlZyBncHIpCisgICAgdm9pZCBmaWxsQm9vbGVhbihWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJl
YW0sIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZv
cm1hdEJvb2xlYW47CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAg
ICB9Ci0gICAgdm9pZCBmaWxsRG91YmxlKEZQUlJlZyBmcHIpCisgICAgdm9pZCBmaWxsRG91Ymxl
KFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBEYXRhRm9ybWF0RG91YmxlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVh
bSk7CiAgICAgfQotICAgIHZvaWQgZmlsbFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZp
bGxTdG9yYWdlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7
CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAg
dS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAg
ICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUo
KQpAQCAtMzAzLDEyICszNjUsMzMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2
b2lkIGFwcGVuZEZpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdERvdWJsZSkgeworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpmaWxsRlBSKGtpbmQsIG1fbm9kZUluZGV4LCB1LmZwcikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwgbV9ub2RlSW5kZXgsIHUudi50YWdH
UFIsIHUudi5wYXlsb2FkR1BSKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIo
a2luZCwgbV9ub2RlSW5kZXgsIHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kU3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5k
LCBtX25vZGVJbmRleCwgdmlydHVhbFJlZ2lzdGVyLCBtX3NwaWxsRm9ybWF0KSk7CisgICAgfQor
ICAgIAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgc3RvcmVk
IGluIHRoaXMgdmlydHVhbCByZWdpc3Rlci4KICAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiAg
ICAgdWludDMyX3QgbV91c2VDb3VudDsKICAgICBEYXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7
CiAgICAgRGF0YUZvcm1hdCBtX3NwaWxsRm9ybWF0OwogICAgIGJvb2wgbV9jYW5GaWxsOworICAg
IGJvb2wgbV9ib3JuRm9yT1NSOwogICAgIHVuaW9uIHsKICAgICAgICAgR1BSUmVnIGdwcjsKICAg
ICAgICAgRlBSUmVnIGZwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDEyICsxOTEs
MTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBl
eGl0Lm1fY2hlY2suY29ycmVjdExhdGVKdW1wKGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKLSAg
ICBjb2RlQmxvY2soKS0+c2hyaW5rV2Vha1JlZmVyZW5jZXNUb0ZpdCgpOwotICAgIGNvZGVCbG9j
aygpLT5zaHJpbmtXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbnNUb0ZpdCgpOworICAgIGNvZGVCbG9j
aygpLT5taW5pZmllZERGRygpLnNldE9yaWdpbmFsR3JhcGhTaXplKG1fZ3JhcGguc2l6ZSgpKTsK
KyAgICBjb2RlQmxvY2soKS0+c2hyaW5rREZHRGF0YVRvRml0KCk7CiB9CiAKIGJvb2wgSklUQ29t
cGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CisKICAgICBjb21waWxlRW50cnkoKTsKICAgICBT
cGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGlsZUJvZHkoc3BlY3Vs
YXRpdmUpOwpAQCAtMjE2LDYgKzIxOCw4IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklU
Q29kZSYgZW50cnkKIAogYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZGUm
IGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCiB7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CisgICAgCiAg
ICAgY29tcGlsZUVudHJ5KCk7CiAKICAgICAvLyA9PT0gRnVuY3Rpb24gaGVhZGVyIGNvZGUgZ2Vu
ZXJhdGlvbiA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWRHcmFwaC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNaW5pZmllZEdy
YXBoX2gKKyNkZWZpbmUgREZHTWluaWZpZWRHcmFwaF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTWluaWZpZWROb2Rl
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgTWluaWZpZWRHcmFwaCB7CitwdWJsaWM6CisgICAgTWluaWZpZWRHcmFwaCgp
IHsgfQorCisgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2VhcmNoPE1pbmlm
aWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKKyAgICAgICAgICAg
ICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBXVEY6OktleU11
c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5pbmRleCgpICE9IG5v
ZGVJbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZW50cnk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKKyAg
ICB7CisgICAgICAgIG1fbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJlcGFyZUFuZFNocmluaygpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9saXN0LmJlZ2lu
KCksIG1fbGlzdC5lbmQoKSwgTWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOworICAg
ICAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRPcmln
aW5hbEdyYXBoU2l6ZShzaXplX3Qgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgCisgICAg
c2l6ZV90IG9yaWdpbmFsR3JhcGhTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPE1pbmlmaWVkTm9kZT4gbV9saXN0OworICAgIHNpemVfdCBtX3Np
emU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR01pbmlmaWVkR3JhcGhfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZE5v
ZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK01pbmlmaWVkTm9kZSBNaW5pZmllZE5v
ZGU6OmZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCit7CisgICAgQVNT
RVJUKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobm9kZS5vcCgpKSk7CisgICAgTWluaWZpZWROb2Rl
IHJlc3VsdDsKKyAgICByZXN1bHQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICByZXN1bHQubV9v
cCA9IG5vZGUub3AoKTsKKyAgICBpZiAoaGFzQ2hpbGQobm9kZS5vcCgpKSkKKyAgICAgICAgcmVz
dWx0Lm1fY2hpbGRPckluZm8gPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgZWxzZSBpZiAo
aGFzQ29uc3RhbnROdW1iZXIobm9kZS5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPcklu
Zm8gPSBub2RlLmNvbnN0YW50TnVtYmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCho
YXNXZWFrQ29uc3RhbnQobm9kZS5vcCgpKSk7CisgICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZv
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZS53ZWFrQ29uc3RhbnQoKSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R01pbmlmaWVkTm9kZV9oCisjZGVmaW5lIERGR01pbmlmaWVkTm9kZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCisjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgTm9kZTsKKworaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZp
ZWRHcmFwaChOb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
SlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitjbGFzcyBNaW5pZmllZE5vZGUgeworcHVibGljOgorICAgIE1pbmlmaWVk
Tm9kZSgpIHsgfQorICAgIAorICAgIHN0YXRpYyBNaW5pZmllZE5vZGUgZnJvbU5vZGUoTm9kZUlu
ZGV4LCBOb2RlJik7CisgICAgCisgICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQorICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAg
IAorICAgIGJvb2wgaGFzQ2hpbGQxKCkgY29uc3QgeyByZXR1cm4gaGFzQ2hpbGQobV9vcCk7IH0K
KyAgICAKKyAgICBOb2RlSW5kZXggY2hpbGQxKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNDaGlsZChtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0K
KyAgICAKKyAgICBib29sIGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnRO
dW1iZXIoKSB8fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3Rh
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQorICAg
IAorICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJ
bmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIGhhc1dlYWtDb25zdGFudChtX29wKTsgfQorICAgIAorICAgIEpTQ2VsbCogd2Vha0NvbnN0
YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNXZWFrQ29uc3RhbnQobV9vcCkp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fY2hpbGRPckluZm8pOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSog
bm9kZSkgeyByZXR1cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIHN0YXRpYyBib29sIGNvbXBhcmVC
eU5vZGVJbmRleChjb25zdCBNaW5pZmllZE5vZGUmIGEsIGNvbnN0IE1pbmlmaWVkTm9kZSYgYikK
KyAgICB7CisgICAgICAgIHJldHVybiBhLm1faW5kZXggPCBiLm1faW5kZXg7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgor
ICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdGF0aWMgYm9vbCBoYXNDb25z
dGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0g
SlNDb25zdGFudDsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaGFzV2Vha0NvbnN0YW50KE5vZGVU
eXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZSA9PSBXZWFrSlNDb25zdGFudDsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsK
KyAgICB1aW50cHRyX3QgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdy
YXBoIGhhdmUgb25seSBvbmUgY2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZp
ZWROb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CkBAIC01NzMsNyArNTc0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICB9Ci0KKyAgICAKICAgICB2b2lk
IHNldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZU51bVZhcmlhYmxlc0ZvckNvZGVPcmlnaW4oCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnM7Ci0gICAgcmV0dXJuCi0gICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArCi0gICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2Fs
bEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7
Ci19Ci0KLU9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJl
Y292ZXJ5SW5kZXgpCitPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2Zp
bGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNp
Z25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNWYWx1
ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KQogICAgICwgbV9jaGVjayhjaGVjaykKQEAgLTUyLDI0ICs0MiwxMCBAQCBPU1JFeGl0OjpPU1JF
eGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3Zl
cnlJbmRleCkKICAgICAsIG1fa2luZChraW5kKQogICAgICwgbV9jb3VudCgwKQotICAgICwgbV9h
cmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhjb21w
dXRlTnVtVmFyaWFibGVzRm9yQ29kZU9yaWdpbihqaXQtPm1faml0LmdyYXBoKCkubV9wcm9maWxl
ZEJsb2NrLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikpCisgICAgLCBtX3N0cmVhbUluZGV4KHN0
cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQp
CiB7CiAgICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQp
Ci0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFy
aWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAg
ICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6ZHVtcChG
SUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0uZHVtcChvdXQpOwotICAgIGZwcmludGYob3V0LCAiIDogIik7Ci0gICAgZm9y
ICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K3ZhcmlhYmxlKQotICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOwogfQog
CiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMTIzMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCiAj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5j
bHVkZSAiREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKQEAgLTgzLDcgKzg0LDcgQEAgcHJpdmF0ZToKIC8vIFRoaXMgc3RydWN0
dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29p
bmcgaW50byBiYXNlbGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgg
PSAwKTsKKyAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1
bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwogICAgIAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CiAgICAgCkBAIC05OSwzOCArMTAwLDYg
QEAgc3RydWN0IE9TUkV4aXQgewogICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICB1aW50MzJfdCBt
X2NvdW50OwogICAgIAotICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZh
bHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZwotICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2
ZXJzdXMgdmFyaWFibGUuCi0gICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5k
ZXggLSBtX2FyZ3VtZW50cy5zaXplKCldOwotICAgIH0KLSAgICBWYWx1ZVJlY292ZXJ5JiB2YWx1
ZVJlY292ZXJ5Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tv
cGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKV07Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tv
cGVyYW5kXTsKLSAgICB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQotICAgIGJvb2wgaXNWYXJp
YWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAg
IGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbmRleDsKLSAgICB9Ci0gICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwot
ICAgIH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGluZGV4IC0g
bV9hcmd1bWVudHMuc2l6ZSgpOwotICAgIH0KLSAgICAKICAgICBib29sIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2lu
ZElzQ291bnRhYmxlKG1fa2luZCkpCkBAIC0xMzgsMTEgKzEwNywxMCBAQCBzdHJ1Y3QgT1NSRXhp
dCB7CiAgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3co
ZGZnQ29kZUJsb2NrLCBwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZHVtcChGSUxFKiBvdXQpIGNvbnN0OwotICAgIAotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAw
PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7
CisgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsK
KyAgICAKKyAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlP
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEwICsyOSwxMSBAQAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxV
RTMyXzY0KQogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVj
b3ZlcnkqIHJlY292ZXJ5KQordm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywg
U3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ1LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIg
LT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwog
ICAgIH0KICAgICBkYXRhTG9nKCIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgbV9qaXQuZGVidWdP
ZmZzZXQoKSk7Ci0gICAgZXhpdC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgZHVtcE9wZXJh
bmRzKG9wZXJhbmRzLCBXVEY6OmRhdGFGaWxlKCkpOwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShW
RVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJ
bmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwpAQCAtMTEy
LDcgKzExMyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0
aGVyZSBhcmUgYW55IGNvbnN0YW50cywKICAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBh
bnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KICAgICAgICAgICAgIAotICAgIFZl
Y3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXpl
KCkpOworICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMob3BlcmFuZHMu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW2ldID0gZmFsc2U7CiAKQEAgLTEzMSw4ICsxMzIsOCBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7
CiAgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
ICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ4LDggKzE0OSw4IEBAIHZvaWQgT1NSRXhp
dENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0
aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAg
ICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1p
emVkIGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhh
cHBlbi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQp
ZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQu
bV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRz
Lm51bWJlck9mTG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxv
Y2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CkBAIC0yMDcsMTkg
KzIwOCwxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ly8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMgYW5kIGNlbGxzLCBleGNlcHQg
Zm9yIHRob3NlIGluIHJlZ2lzdGVycy4KIAogICAgIGlmIChoYXZlVW5ib3hlZEludDMySW5SZWdp
c3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRC
b29sZWFuSW5SZWdpc3RlckZpbGUpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMy
OgotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZENlbGw6Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMyLDE5ICsyMzMsMTkgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJz
IGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhw
ZWN0IHRoYXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQg
bGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFs
aXplUG9pc29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lz
b25lZChvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9p
c29uSW5kZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5J
bkdQUjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgICAg
IG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBj
dXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNl
c1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7
CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWc7CkBAIC0yNTksMTAgKzI2MCwxMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJblBhaXI6Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkucGF5bG9hZEdQUigpLCByZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAg
ICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNo
SW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29u
SW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkudGFnR1BS
KCksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwpA
QCAtMjg0LDcgKzI4NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
cmVjb3ZlcnkuZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYWRk
RG91YmxlKEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSwgYWRk
cmVzc0dQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMCwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI5NCw3ICsyOTUsNyBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJh
bmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZm
ZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMDgsOCArMzA5LDggQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRy
ZXNzR1BSLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIobXlT
Y3JhdGNoLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAg
bV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1
cnJlbnRQb2lzb25JbmRleDsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGlu
ZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRl
eChpbmRleCldKSB7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVy
YW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAg
ICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTMyMiwxNiArMzIzLDE2IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAvLyA3KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYgdGhlCiAgICAgLy8gICAg
ZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KICAgICBpZiAoaGF2ZUZQ
UnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAm
JiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0p
IHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIHNjcmF0Y2hC
dWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2Ny
YXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29u
SW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52
YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAg
ICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTM0OSw4ICsz
NTAsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAg
ICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRlZWQuCiAgICAgICAgIAogICAgICAgICAg
ICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFs
dWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKQEAgLTM3NCwxNSAr
Mzc1LDE1IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAg
ICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDZWxsRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6
dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDA3LDggKzQwOCw4
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
IC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgogICAgICAgICAKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CkBAIC00MjksMzAg
KzQzMCwzMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ2NiwxMSArNDY3LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFs
IHJlZ2lzdGVycy4KICAgICAKICAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lz
dGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsK
KyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwg
KGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK3ZpcnR1YWxSZWdpc3RlcikgewogICAg
ICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1YWxSZWdp
c3Rlcl07CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzLmxvY2FsKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluR1BSOgogICAgICAgICAgICAgY2Fz
ZSBVbmJveGVkSW50MzJJbkdQUjoKQEAgLTUxMiwxNiArNTEzLDE2IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIEdQUkluZm86OnJl
Z1QxKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
IT0gQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
cmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3Rh
bnQoKS5wYXlsb2FkKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50
KCkudGFnKCkpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2Fk
KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnRhZygp
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMSBA
QAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQogCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQordm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBkYXRhTG9nKCIpICAi
KTsKLSAgICBleGl0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkdW1wT3BlcmFuZHMob3Bl
cmFuZHMsIFdURjo6ZGF0YUZpbGUoKSk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0Vf
U1BFQ1VMQVRJT05fRkFJTFVSRSkKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRl
YnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CkBAIC0xMTAsNyArMTEx
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAg
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFy
ZSBhbnkgY29uc3RhbnRzLAogICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIg
c2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgogICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJv
b2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Cisg
ICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJP
ZkxvY2FscygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
aV0gPSBmYWxzZTsKIApAQCAtMTI4LDggKzEyOSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKICAgICBi
b29sIGhhdmVVSW50MzJzID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ0LDggKzE0NSw4IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlz
IGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAg
ICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVk
IGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBl
bi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhp
dC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92
YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm51
bWJlck9mTG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2Fs
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgpAQCAtMjE4LDggKzIxOSw4IEBAIHZv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA1KSBQZXJmb3Jt
IGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KICAgICAKICAgICBpZiAoaGF2ZVVuYm94ZWRJbnQz
MnMgfHwgaGF2ZVVJbnQzMnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCkBAIC0yMjcsNyArMjI4LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVt
YmVyID4+IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBVSW50MzJJbkdQUjogewpAQCAtMjc4LDE5ICsyNzksMTkgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJz
IGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhw
ZWN0IHRoYXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQg
bGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFs
aXplUG9pc29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lz
b25lZChvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9p
c29uSW5kZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
b3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29u
SW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAg
ICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbklu
ZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpb3BlcmFuZCkpOwpAQCAtMzA1LDggKzMwNiw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICBpZiAoaGF2ZUZQUnMpIHsKICAgICAgICAgLy8gNykg
Qm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBS
cykKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5k
ZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5
LmZwcigpOwpAQCAtMzE3LDE3ICszMTgsMTcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKICAgICAgICAgLy8gICAg
dGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCiAgICAgICAgIAot
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQ
UkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0
Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29u
U2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9p
c29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5k
cy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAg
ICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMzM1LDEzICszMzYsMTMgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDkpIEJveCBhbGwgdW5ib3hl
ZCBkb3VibGVzIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgIGlmIChoYXZlVW5ib3hlZERvdWJs
ZXMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkRG91YmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUklu
Zm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC0zNTcsOCArMzU4LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgogICAg
ICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOwpAQCAtMzg0LDEzICszODUsMTMgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNl
bWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
ICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3Bs
YWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQxNiw4ICs0MTcs
OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KICAgICAgICAgCiAgICAgICAg
ICAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyczsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgpAQCAtNDQ1LDE0ICs0NDYsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAg
IHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00
NjcsMTEgKzQ2OCwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgLy8gMTEpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAgIAog
ICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAgICAgICBmb3Ig
KGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92
YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBmb3IgKGludCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KW9wZXJhbmRzLm51bWJl
ck9mTG9jYWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CiAgICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwodmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgpAQCAtNDk0LDE0ICs0OTUsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKICAgICAgICAgICAgIG1faml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292
ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShyZWNvdmVyeS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsOCBAQCBleHRlcm4gIkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRXhp
dCBDb21waWxhdGlvbiIpOworICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC02MywxOSArNjUs
MjkgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAt
PmppdENvbXBpbGUoKmdsb2JhbERhdGEpOwogICAgIH0KICAgICAKKyAgICAvLyBDb21wdXRlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRz
OworICAgIGNvZGVCbG9jay0+dmFyaWFibGVFdmVudFN0cmVhbSgpLnJlY29uc3RydWN0KGNvZGVC
bG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+bWluaWZpZWRERkcoKSwgZXhpdC5t
X3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CisgICAgCisgICAgLy8gVGhlcmUgbWF5IGJlIGFuIG92
ZXJyaWRlLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCisgICAgaWYgKCEhZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZSkgeworICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAorICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQog
ICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5t
X3JlY292ZXJ5SW5kZXggLSAxKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZvciBj
b2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgY29k
ZUJsb2NrKTsKKyAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoc2VxIyV1LCBi
YyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGV4aXQubV9z
dHJlYW1JbmRleCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgZXhpdC5tX25vZGVJ
bmRleCwgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIGNvZGVCbG9jayk7CiAjZW5kaWYK
IAogICAgIHsKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAgICAgICAg
IAotICAgICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgcmVjb3ZlcnkpOworICAg
ICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsK
ICAgICAgICAgCiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZq
aXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBP
U1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZvaWQgY29tcGlsZUV4aXQoY29u
c3QgT1NSRXhpdCYsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiwgU3BlY3VsYXRpb25S
ZWNvdmVyeSopOwogCiBwcml2YXRlOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODE3LDYgKzgxNyw3IEBAIHByaXZhdGU6CiAgICAgCiB2b2lkIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgUHJlZGljdGlvbiBQcm9wYWdhdGlvbiBQaGFzZSIpOwogICAgIHJ1blBoYXNl
PFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAKIHZvaWQgcGVyZm9ybVJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFJlZHVuZGFudCBQaGkgRWxpbWluYXRpb24gUGhhc2UiKTsKICAgICBydW5Q
aGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgaW5m
by5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTkwLDcgKzkw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICBt
X2dwcnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BS
KTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsK
KyAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxv
YWRHUFI7CiAgICAgfQpAQCAtMTIyLDEzICsxMjIsMTMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRl
eCksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDEsNyAr
MTQxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
ZnByKTsKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQogCkBAIC0xNjEsNyArMTYx
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAg
ICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjA2LDcgKzIwNiw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJs
ZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMu
dW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7
CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8u
a2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNTEsNyArMjUx
LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnBheWxvYWQo
KSksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25z
dGFudChub2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BS
LCBpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFn
ZSk7CkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUo
Tm9kZUluZAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BS
LCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9ybWF0SlMgOiBzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BS
LCBwYXlsb2FkR1BSLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9y
bWF0SlMgOiBzcGlsbEZvcm1hdCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMxOSw3ICszMTksNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2Rl
SW5kCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CisgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxG
b3JtYXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNCw3ICszMzQsNyBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgIG1fZnBy
cy5yZWxlYXNlKG9sZEZQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQ
UiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
LSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0
YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC0x
MDE5LDcgKzEwMTksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwot
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIo
Km1fc3RyZWFtLCBncHIpOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdl
cjsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAg
ICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlcklu
dGVnZXIpOwotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOworICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIC8vIElmICFz
dHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CkBAIC0xMDk4LDEzICsxMDk4
LDEzIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgp
KSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVn
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnBy
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xMTE1LDcgKzExMTUsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnBy
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9
CiAKQEAgLTExMzcsNyArMTEzNyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
IAogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgcmV0dXJu
IGZwcjsKICAgICAgICAgfQogICAgIH0KQEAgLTExNzMsNyArMTE3Myw3IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdH
UFIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICB9CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQ2VsbChn
cHIpOworICAgICAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEyNDAsNyArMTI0MCw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbENlbGwo
Z3ByKTsKKyAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQogCkBAIC0xMjYyLDcgKzEyNjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7
CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMucmV0
YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwotICAgICAg
ICBpbmZvLmZpbGxDZWxsKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0
cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2FkR1BSOwogICAgIH0KIApA
QCAtMTMwMyw3ICsxMzAzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwog
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVmFs
dWUuYXNCb29sZWFuKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIp
OworICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEzMTUsNyArMTMxNSw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbEJvb2xl
YW4oZ3ByKTsKKyAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRh
Z0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dw
cnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4p
OwotICAgICAgICBpbmZvLmZpbGxCb29sZWFuKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZp
bGxCb29sZWFuKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2Fk
R1BSOwogICAgIH0KIApAQCAtMTc1NCw3ICsxNzU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQn
cyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAg
ICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIg
bG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLAogICAgICAgICAgICAgICAgIC8vIGJ1dCB0
aGF0IGl0IGlzIHN0b3JlZCBhcyBhIGRvdWJsZS4KLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUlu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rl
ZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CkBAIC0xNzYy
LDE0ICsxNzYyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VG
b3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNv
dXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5n
cHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2Nh
bCgpLCBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKQEAgLTE3NzksNyArMTc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
bm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVy
RmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTc4OSwx
NCArMTc4OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihjZWxsR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShD
ZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUu
bG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwo
KSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTgwNCw3ICsxODA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
dGFnR1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JP
cGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsK
KyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUlu
UmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3By
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAg
ICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICAgICAgICAgIH0KQEAgLTczLDcgKzczLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAvLyBTaW5jZSB3ZSBzdGF0aWNhbGx5IGtub3cg
dGhhdCB3ZSdyZSBmaWxsaW5nIGFuIGludGVnZXIsIGFuZCB2YWx1ZXMKICAgICAgICAgLy8gaW4g
dGhlIFJlZ2lzdGVyRmlsZSBhcmUgYm94ZWQsIHRoaXMgbXVzdCBiZSBEYXRhRm9ybWF0SlNJbnRl
Z2VyLgogICAgICAgICAvLyBXZSB3aWxsIGNoZWNrIHRoaXMgd2l0aCBhIGppdEFzc2VydCBiZWxv
dy4KLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwor
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRl
Z2VyKTsKICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbElu
dGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwg
Z3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVn
IGZwciA9IGZwckFsbG9jYXRlKCk7CkBAIC0xMzUsNyArMTM1LDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwog
CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7Cisg
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDMsNyArMTQzLDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAg
LTE1Myw3ICsxNTMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUlu
CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZw
cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTE2Miw3ICsxNjIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxE
b3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTE3Myw3ICsxNzMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsK
ICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MjE1LDcgKzIxNSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4K
ICAgICAgICAgbV9ncHJzLnVubG9jayhqc1ZhbHVlR3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9j
ayh0ZW1wR3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAg
ICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICBpbmZvLmtpbGxTcGls
bGVkKCk7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIEZQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnJl
bGVhc2UoZ3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7CiAKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAg
ICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7
CiAgICAgfQogCkBAIC0yNzMsMTggKzI3MywxOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKE5vZGVJCiAKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVn
ZXIpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlNEb3VibGUpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC0z
MDQsNyArMzA0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZ3ByOwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsK
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Cisg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVn
ZXIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMzI5LDcgKzMyOSw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgR1BSUmVnIGdw
ciA9IGJveERvdWJsZShmcHIpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBhbGwgaW5mbwotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAg
ICAgbV9mcHJzLnJlbGVhc2UoZnByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKIApAQCAtMTAxNiw3ICsxMDE2LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJu
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAg
ICAgICB9CkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQg
YXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgogICAgICAgICAgICAg
aWYgKHN0cmljdCkgewogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50
ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTA0
MCwxNCArMTA0MCwxNCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAg
ICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgotICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICBtX2dw
cnMudW5sb2NrKGdwcik7CiAgICAgfQogCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZv
LmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIp
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAg
ICAgIGlmICghc3RyaWN0KSB7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0
SlNJbnRlZ2VyOwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBn
cHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihn
cHIsIHJlc3VsdCk7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAg
ICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlSW5kZXgpKSB7CkBAIC0xMTY4LDcgKzExNjgsNyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAK
ICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
QEAgLTExODEsNyArMTE4MSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBmcHIpOwogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsK
KyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAg
ICByZXR1cm4gZnByOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExOTAsNyArMTE5MCw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxJbnRl
Z2VyKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsK
ICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTEyMDEsNyArMTIwMSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
U3BpbGxlZCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJl
YW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI0Myw3ICsxMjQzLDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2dwcnMudW5sb2NrKGpzVmFs
dWVHcHIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwogICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICB9CkBAIC0xMjc0LDcgKzEyNzQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZnBy
cy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwogCi0gICAg
ICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KIApAQCAtMTMxMiw3ICsxMzEy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAg
ICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0Nl
bGwoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0NlbGwpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzMjIsMTAgKzEzMjIsMTAg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZ3ByKTsKIAotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsK
ICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3By
LCBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBA
IC0xMzQwLDcgKzEzNDAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9j
ayhncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICB9CiAKQEAgLTEzODUsNyArMTM4NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAg
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzOTUsMTMgKzEzOTUsMTMgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
Z3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3Vs
YXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVn
KSk7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQotICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KIApAQCAtMTQxOCw3ICsxNDE4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xODQ2LDcgKzE4NDYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gSW5k
aWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVl
IG9mCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lz
dGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsCiAgICAgICAgICAg
ICAgICAgLy8gYnV0IHRoYXQgaXQgaXMgc3RvcmVkIGFzIGEgZG91YmxlLgotICAgICAgICAgICAg
ICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExv
Y2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODU1LDcg
KzE4NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNv
dXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKQEAgLTE4NjUsNyArMTg2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2Vs
bEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbElu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg3NSwxNCArMTg3NSwxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29y
ZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
aXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xlYW4odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJv
b2xlYW5JblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xODkxLDcgKzE4OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogCi0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3Bl
cmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTIz
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCitTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXIm
IGppdCkKKyAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1faml0KGppdCkKKyAgICAs
IG1fY29tcGlsZUluZGV4KDApCisgICAgLCBtX2luZGV4SW5CbG9jaygwKQorICAgICwgbV9nZW5l
cmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAg
LCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQorICAgICwgbV9hcmd1
bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCisgICAgLCBtX3ZhcmlhYmxl
cyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fc3RhdGUoaml0LmdyYXBoKCkpCisg
ICAgLCBtX3N0cmVhbSgmaml0LmNvZGVCbG9jaygpLT52YXJpYWJsZUV2ZW50U3RyZWFtKCkpCisg
ICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5jb2RlQmxvY2soKS0+bWluaWZpZWRERkcoKSkKK3sK
K30KKwogLy8gT24gV2luZG93cyB3ZSBuZWVkIHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZv
cm1zIHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgogLy8gT24gQVJNdjcgd2UgYXNzZXJ0IHRoYXQg
YWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUgdG8gbG93IGJpdCBzZXQgKHBvaW50IHRvIHRodW1i
IGNvZGUpLgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMIHx8IENQVShBUk1fVEhV
TUIyKQpAQCAtNjQsNyArODAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdl
KE5vZGVJCiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdFN0
b3JhZ2UpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgaW5mby5maWxsU3RvcmFnZShn
cHIpOworICAgICAgICBpbmZvLmZpbGxTdG9yYWdlKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICB9CiAgICAgICAgIApAQCAtNzQzLDMzICs3NTksNiBAQCBGUFJUZW1w
b3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiB9CiAjZW5kaWYKIAotdm9pZCBWYWx1
ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsK
LSAgICBjYXNlIFNvdXJjZU5vdFNldDoKLSAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICBm
cHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludDMy
SW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiQ2VsbCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmls
ZToKLSAgICAgICAgZnByaW50ZihvdXQsICJCb29sIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSGF2ZU5vZGU6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5v
ZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5k
ZXgpOwpAQCAtODgzLDEyICs4NzIsMzAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlQnJhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm90aWNlT1NSQmlydGgoTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZSYgbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUuaGFzVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKyAgICAKKyAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZUlu
ZGV4LCB2aXJ0dWFsUmVnaXN0ZXIpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TW92SGludChOb2RlJiBub2RlKQogewogICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwp
OwogICAgIAotICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7Cisg
ICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChub2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JC
aXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCksIGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQu
b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hp
bGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hpbGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+
YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCArOTA5LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9C
TE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxv
Y2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyNlbmRpZgorICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6cmVzZXQoKSk7CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMu
c2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQo
aSk7CisgICAgICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlOwogICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50SXNDYXB0dXJlZChpKSkKLSAg
ICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3Rl
ckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVl
U291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpm
b3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSk7CisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09w
ZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAgIH0KICAgICAKICAgICBt
X3N0YXRlLnJlc2V0KCk7CkBAIC05MTgsMTIgKzkzNCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBi
bG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOworICAgICAgICBWYWx1
ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwg
bV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVyZWQoaSkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxl
c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFs
dWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxz
ZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKERvdWJs
ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Zhcmlh
Ymxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9
IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3Vy
Y2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CiAgICAgfQogICAgIAogICAgIG1fbGFz
dFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwpAQCAtOTM2LDYg
Kzk1NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAg
ICAgIHZlcmlmaWNhdGlvblN1Y2NlZWRlZC5saW5rKCZtX2ppdCk7CiAgICAgfQogCisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKwogICAg
IGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsg
KyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5k
ZXhJbkJsb2NrXTsKICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKQEAg
LTk0NSw2ICs5NjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JgogICAgICAgICAgICAgZGF0YUxvZygiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQg
KGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRp
ZgogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAg
ICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2NvbXBp
bGVJbmRleCwgbm9kZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBjb21waWxlTW92
SGludChub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk4OCw2ICsxMDE2LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChi
ZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUub3AoKSkpIHsKKyAgICAgICAgICAgICAgICBtX21p
bmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4
LCBub2RlKSk7CisgICAgICAgICAgICAgICAgbm90aWNlT1NSQmlydGgobV9jb21waWxlSW5kZXgs
IG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQogICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKICAgICAgICAg
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV07CkBAIC0xMDA4LDE2ICsxMDQxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCi0jaWYg
REZHX0VOQUJMRShWRVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMpCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihhcmd1bWVudFRvT3BlcmFuZChpKSkuZHVtcChzdGRlcnIpOwotICAg
ICAgICAKLSAgICAgICAgZGF0YUxvZygiIDogIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGlu
dCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJh
bmQpCi0gICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0
ZGVycik7Ci0jZW5kaWYKLQogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKICNlbmRpZgpAQCAtMTI1NCwxMzYgKzEyNzcsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogCiBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0
aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVT
b3VyY2UpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKLSAgICBjYXNlIFZh
bHVlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5
SW5SZWdpc3RlckZpbGUoKTsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxl
OgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkSW50MzIoKTsKLQotICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgotICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgp
OwotCi0gICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7Ci0gICAg
ICAgIAotICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3VibGUoKTsKLQotICAg
IGNhc2UgSGF2ZU5vZGU6IHsKLSAgICAgICAgaWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9k
ZUluZGV4KCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KHZh
bHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgCi0gICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpOwotICAgICAgICBp
ZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3MgbGVn
aXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9y
IG9wZXJhbmQsCi0gICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1h
a2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAg
ICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZv
UHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAg
ICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxk
IGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91
ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEludDMyVG9E
b3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgbm9kZSwgYnV0
Ci0gICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVzZSBpdCBvbmx5IGlm
IGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZwotICAgICAgICAgICAgLy8gICAgbGl2ZSB2ZXJzaW9u
LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogSWYgdGhlIG9u
bHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgICAgIC8v
ICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2Yg
dGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKLSAgICAgICAgICAgIC8vICAgIHRoZW4gdGhl
IG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVk
IG51bWJlcgotICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRp
YXRlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBh
Ym92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAg
ICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQg
dGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKLSAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIg
d291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0gICAg
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKG5v
ZGVQdHItPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAg
ICBub2RlUHRyID0gJmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZt
X2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2Rl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3Rl
ciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChpbmZvLm5vZGVJbmRl
eCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0g
dmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJUb0RvdWJsZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAg
ICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRleDsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleFRvVXNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZp
cnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFs
aXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9
CisgICAgaWYgKHZhbHVlU291cmNlLmlzSW5SZWdpc3RlckZpbGUoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlU291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKICAgICAKLSAgICAgICAgQVNTRVJUKGluZm9Q
dHItPmFsaXZlKCkpOwotCi0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9
IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQot
ICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mb1B0ci0+dGFn
R1BSKCksIGluZm9QdHItPnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJG
b3JtYXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRy
LT52aXJ0dWFsUmVnaXN0ZXIoKSksIGluZm9QdHItPnNwaWxsRm9ybWF0KCkpOworICAgIEFTU0VS
VCh2YWx1ZVNvdXJjZS5raW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIGlmIChpc0NvbnN0YW50KHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CiAgICAg
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeSgpOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQorICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDggQEAKICNpZm5kZWYgREZHU3BlY3VsYXRpdmVKSVRfaAogI2RlZmluZSBERkdTcGVj
dWxhdGl2ZUpJVF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgpAQCAtMzMsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIK
IApAQCAtNDYsODUgKzQ5LDYgQEAgY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZDsKIGNsYXNz
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAK
LQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAgIFNvdXJjZU5vdFNldCwKLSAgICBWYWx1ZUlu
UmVnaXN0ZXJGaWxlLAotICAgIEludDMySW5SZWdpc3RlckZpbGUsCi0gICAgQ2VsbEluUmVnaXN0
ZXJGaWxlLAotICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwKLSAgICBEb3VibGVJblJlZ2lzdGVy
RmlsZSwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xhc3MgVmFsdWVTb3VyY2UgewotcHVibGljOgot
ICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2lu
ZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKLSAgICAgICAgOiBtX25vZGVJ
bmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOwotICAgICAgICBBU1NFUlQoa2luZCgpICE9
IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQot
ICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOwotICAgICAgICBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lz
dGVyRmlsZSk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7Ci0g
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4ga2luZEZy
b21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKLSAgICB9Ci0gICAgCi0g
ICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtp
bmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4
IG5vZGVJbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVO
b2RlKTsKLSAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIE5vZGVJ
bmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJjZUtpbmQga2luZCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOwotICAg
ICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVl
U291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBu
b2RlSW5kZXgpOwotICAgICAgICBpZiAoa2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2
ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIEhhdmVOb2RlOwotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUlu
ZGV4IG1fbm9kZUluZGV4OwotfTsKLQotCiBlbnVtIEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsgR2Vu
ZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duLCBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlciwgR2VuZXJh
dGVkT3BlcmFuZERvdWJsZSwgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWV9OwogCiAvLyA9PT0gU3Bl
Y3VsYXRpdmVKSVQgPT09CkBAIC0zMDgsNyArMjMyLDcgQEAgcHVibGljOgogCiAgICAgICAgIC8v
IHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkK
ICAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVkLgotICAgICAgICBp
ZiAoIWluZm8udXNlKCkpCisgICAgICAgIGlmICghaW5mby51c2UoKm1fc3RyZWFtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBSZWxlYXNlIHRoZSBhc3NvY2lhdGVkIG1hY2hp
bmUgcmVnaXN0ZXJzLgpAQCAtMzY4LDYgKzI5Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZUluZGV4
LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBjb21w
aWxlKEJhc2ljQmxvY2smKTsKIApAQCAtNjU3LDcgKzU4Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIENoZWNrIHRoZSBHZW5lcmF0aW9uSW5mbyB0byBzZWUgaWYgdGhpcyB2YWx1ZSBuZWVkIHdy
aXRpbmcKICAgICAgICAgLy8gdG8gdGhlIFJlZ2lzdGVyRmlsZSAtIGlmIG5vdCwgbWFyayBpdCBh
cyBzcGlsbGVkICYgcmV0dXJuLgogICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0g
ICAgICAgICAgICBpbmZvLnNldFNwaWxsZWQoKTsKKyAgICAgICAgICAgIGluZm8uc2V0U3BpbGxl
ZCgqbV9zdHJlYW0sIHNwaWxsTWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTY2NywyMCArNTkyLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNw
ZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxl
IHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
aW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAg
ICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxs
KCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewogICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRJbnRlZ2VyKTsK
KyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0SW50
ZWdlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgICAg
IGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0RG91YmxlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02OTYsMTMgKzYyMSwx
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFs
dWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9ybS4KICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRh
Rm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCAo
RGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENl
bGw6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwot
ICAgICAgICAgICAgaW5mby5zcGlsbChzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLnNw
aWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTcxMCw3ICs2MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IERhdGFGb3JtYXRKU0RvdWJsZTogewogICAgICAgICAgICAgLy8gT24gSlNWQUxVRTMyXzY0IGJv
eGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUo
aW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAg
ICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAgICAgaW5mby5zcGls
bCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzE5LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoc3BpbGxGb3Jt
YXQpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9y
bWF0KTsKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICB9CkBAIC0xODIwLDcg
KzE3NDUsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7Cisg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNW
YWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsKQogICAgIHsKQEAgLTE4NDMsNyArMTc2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwotICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgp
LCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlv
blJlY292ZXJpZXMoKSkpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhp
dChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0cmVh
bS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJp
ZXMoKSkpOwogICAgIH0KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQog
ICAgIHsKQEAgLTE4NjMsNyArMTc4OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGV4aXQubV9jb2Rl
T3JpZ2luID0gbmV4dE5vZGUuY29kZU9yaWdpbjsKICAgICAgICAgZXhpdC5tX2xhc3RTZXRPcGVy
YW5kID0gc2V0TG9jYWwubG9jYWwoKTsKICAgICAgICAgCi0gICAgICAgIGV4aXQudmFsdWVSZWNv
dmVyeUZvck9wZXJhbmQoc2V0TG9jYWwubG9jYWwoKSkgPSB2YWx1ZVJlY292ZXJ5OworICAgICAg
ICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRvcHRSZWYoCisgICAgICAgICAgICBu
ZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLmxvY2FsKCksIHZhbHVlUmVjb3Zlcnkp
KTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMTkyMSw2ICsxODQ3LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQgb3BlcmFuZCwgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2UpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAg
ICB9CisgICAgCiAgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2Vt
YmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKICAgICAvLyBUaGUg
Y3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTE5NTQsNiArMTg4Niw5IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIAorICAgIFZhcmlhYmxl
RXZlbnRTdHJlYW0qIG1fc3RyZWFtOworICAgIE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRHcmFw
aDsKKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0
IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKGludCBvcGVyYW5kKQpAQCAtMjU3MywyMCArMjUwOCw2IEBAIHByaXZhdGU6CiAgICAgR1BS
UmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAotaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxh
dGl2ZUpJVChKSVRDb21waWxlciYgaml0KQotICAgIDogbV9jb21waWxlT2theSh0cnVlKQotICAg
ICwgbV9qaXQoaml0KQotICAgICwgbV9jb21waWxlSW5kZXgoMCkKLSAgICAsIG1faW5kZXhJbkJs
b2NrKDApCi0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycykKLSAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCkpCi0gICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkKLSAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9s
YXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9z
dGF0ZShtX2ppdC5ncmFwaCgpKQotewotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZV9oCisjZGVmaW5lIERGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFs
dWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGljIFJlZkNvdW50ZWQ8VmFsdWVSZWNvdmVyeU92ZXJy
aWRlPiB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKCkgeyB9CisgICAgCisg
ICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSkKKyAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCisgICAgICAgICwgcmVjb3Zl
cnkocmVjb3ZlcnkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZDsKKyAgICBW
YWx1ZVJlY292ZXJ5IHJlY292ZXJ5OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChG
SUxFKiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJj
ZU5vdFNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIklu
UmVnRmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6
CisgICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDZWxsSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiQ2VsbCIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnBy
aW50ZihvdXQsICJCb29sIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG91YmxlSW5SZWdp
c3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBt
X25vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHVmFsdWVTb3VyY2VfaAorI2RlZmluZSBERkdWYWx1ZVNvdXJjZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIlBy
ZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJj
ZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZp
bGUsCisgICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAorICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwK
KyAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKworc3RhdGljIGlu
bGluZSBWYWx1ZVNvdXJjZUtpbmQgZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERh
dGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICByZXR1cm4gSW50MzJJblJlZ2lzdGVyRmlsZTsKKyAg
ICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVJblJlZ2lzdGVy
RmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gQm9vbGVh
bkluUmVnaXN0ZXJGaWxlOworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJldHVy
biBDZWxsSW5SZWdpc3RlckZpbGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRhdGFG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm4gVmFsdWVJblJlZ2lzdGVyRmls
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgRGF0YUZvcm1hdCB2YWx1ZVNvdXJjZUtpbmRU
b0RhdGFGb3JtYXQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1h
dEpTOworICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRJbnRlZ2VyOworICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1
cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNJblJlZ2lzdGVyRmlsZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKK3sKKyAgICByZXR1cm4g
dmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KGtpbmQpICE9IERhdGFGb3JtYXROb25lOworfQor
CitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAg
ICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFs
dWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZh
bHVlU291cmNlS2luZCkpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5v
dFNldCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6
IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlSW5kZXgg
IT0gTm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxl
KTsKKyAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8IGlzQnl0ZUFy
cmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJj
ZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdp
c3RlckZpbGUpOworICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JEYXRhRm9ybWF0KERh
dGFGb3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShk
YXRhRm9ybWF0VG9WYWx1ZVNvdXJjZUtpbmQoZGF0YUZvcm1hdCkpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJ
bmRleChtX25vZGVJbmRleCkgIT0gU291cmNlTm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1
ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21O
b2RlSW5kZXgobV9ub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3Rl
ckZpbGUoKSBjb25zdCB7IHJldHVybiBKU0M6OkRGRzo6aXNJblJlZ2lzdGVyRmlsZShraW5kKCkp
OyB9CisgICAgCisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQoa2luZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgVmFsdWVSZWNvdmVyeSB2YWx1ZVJlY292ZXJ5KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0luUmVnaXN0ZXJGaWxlKCkpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgICAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgpOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZEJvb2xlYW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZERvdWJsZSgpOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsK
KyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
RklMRSogb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIE5vZGVJbmRleCBu
b2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kID49IFNvdXJjZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOworICAgICAgICBy
ZXR1cm4gTm9Ob2RlIC0ga2luZDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNl
S2luZCBraW5kRnJvbU5vZGVJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5k
ZXgpOworICAgICAgICBpZiAoa2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIEhhdmVOb2RlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1f
bm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYWx1ZVNvdXJjZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Zh
cmlhYmxlRXZlbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRlBS
SW5mby5oIgorI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAor
eworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBSZXNldDoKKyAgICAgICAgZnByaW50
ZihvdXQsICJSZXNldCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJpcnRoVG9GaWxsOgor
ICAgICAgICBkdW1wRmlsbEluZm8oIkJpcnRoVG9GaWxsIiwgb3V0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGR1bXBTcGlsbEluZm8oIkJpcnRoVG9T
cGlsbCIsIG91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsbDoKKyAgICAgICAgZHVt
cEZpbGxJbmZvKCJGaWxsIiwgb3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcGlsbDoK
KyAgICAgICAgZHVtcFNwaWxsSW5mbygiU3BpbGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIERlYXRoOgorICAgICAgICBmcHJpbnRmKG91dCwgIkRlYXRoKEAldSkiLCBub2RlSW5k
ZXgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgZnByaW50
ZihvdXQsICJNb3ZIaW50KEAldSwgciVkKSIsIG5vZGVJbmRleCgpLCBvcGVyYW5kKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNldExvY2FsRXZlbnQ6CisgICAgICAgIGZwcmludGYob3V0
LCAiU2V0TG9jYWwociVkLCAlcykiLCBvcGVyYW5kKCksIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRh
Rm9ybWF0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBWYXJpYWJs
ZUV2ZW50OjpkdW1wRmlsbEluZm8oY29uc3QgY2hhciogbmFtZSwgRklMRSogb3V0KSBjb25zdAor
eworICAgIGZwcmludGYob3V0LCAiJXMoQCV1LCAiLCBuYW1lLCBub2RlSW5kZXgoKSk7CisgICAg
aWYgKGRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICBmcHJpbnRmKG91
dCwgIiVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBlbHNlIGlmIChkYXRhRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCisgICAgICAgIGZw
cmludGYob3V0LCAiJXM6JXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUodGFnR1BSKCkpLCBHUFJJbmZv
OjpkZWJ1Z05hbWUocGF5bG9hZEdQUigpKSk7CisjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIGZw
cmludGYob3V0LCAiJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICBmcHJpbnRm
KG91dCwgIiwgJXMpIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOworfQorCit2
b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXBTcGlsbEluZm8oY29uc3QgY2hhciogbmFtZSwgRklMRSog
b3V0KSBjb25zdAoreworICAgIGZwcmludGYob3V0LCAiJXMoQCV1LCByJWQsICVzKSIsIG5hbWUs
IG5vZGVJbmRleCgpLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFG
b3JtYXQoKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJp
YWJsZUV2ZW50X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIHsKKyAgICAvLyBNYXJrcyB0aGUgYmVnaW5uaW5nIG9m
IGEgY2hlY2twb2ludC4gSWYgeW91IGludGVycHJldCB0aGUgdmFyaWFibGUKKyAgICAvLyBldmVu
dHMgc3RhcnRpbmcgYXQgYSBSZXNldCBwb2ludCB0aGVuIHlvdSdsbCBnZXQgZXZlcnl0aGluZyB5
b3UgbmVlZC4KKyAgICBSZXNldCwKKyAgICAKKyAgICAvLyBOb2RlIGJpcnRocy4gUG9pbnRzIGlu
IHRoZSBjb2RlIHdoZXJlIGEgbm9kZSBiZWNvbWVzIHJlbGV2YW50IGZvciBPU1IuCisgICAgLy8g
SXQgbWF5IGJlIHRoZSBwb2ludCB3aGVyZSBpdCBpcyBhY3R1YWxseSBib3JuIChpLmUuIGFzc2ln
bmVkKSBvciBpdCBtYXkKKyAgICAvLyBiZSBhIGxhdGVyIHBvaW50LCBpZiBpdCdzIG9ubHkgbGF0
ZXIgaW4gdGhlIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucworICAgIC8vIHRoYXQgd2Ugc3RhcnQg
dG8gY2FyZSBhYm91dCB0aGlzIG5vZGUuCisgICAgQmlydGhUb0ZpbGwsCisgICAgQmlydGhUb1Nw
aWxsLAorICAgIAorICAgIC8vIEV2ZW50cyByZWxhdGVkIHRvIGhvdyBhIG5vZGUgaXMgcmVwcmVz
ZW50ZWQuCisgICAgRmlsbCwKKyAgICBTcGlsbCwKKyAgICAKKyAgICAvLyBEZWF0aCBvZiBhIG5v
ZGUgLSBhZnRlciB0aGlzIHdlIG5vIGxvbmdlciBjYXJlIGFib3V0IHRoaXMgbm9kZS4KKyAgICBE
ZWF0aCwKKyAgICAKKyAgICAvLyBBIE1vdkhpbnQgbWVhbnMgdGhhdCBhIG5vZGUgaXMgYmVpbmcg
YXNzb2NpYXRlZCB3aXRoIGEgYnl0ZWNvZGUgb3BlcmFuZCwKKyAgICAvLyBidXQgdGhhdCBpdCBo
YXMgbm90IGJlZW4gc3RvcmVkIGludG8gdGhhdCBvcGVyYW5kLgorICAgIE1vdkhpbnQsCisgICAg
CisgICAgLy8gQSBTZXRMb2NhbEV2ZW50IG1lYW5zIHRoYXQgYSBub2RlJ3MgdmFsdWUgaGFzIGFj
dHVhbGx5IGJlZW4gc3RvcmVkIGludG8gdGhlCisgICAgLy8gYnl0ZWNvZGUgb3BlcmFuZCB0aGF0
IGl0J3MgYXNzb2NpYXRlZCB3aXRoLgorICAgIFNldExvY2FsRXZlbnQsCisgICAgCisgICAgLy8g
VXNlZCB0byBpbmRpY2F0ZSBhbiB1bmluaXRpYWxpemVkIFZhcmlhYmxlRXZlbnQuIERvbid0IHVz
ZSBmb3Igb3RoZXIKKyAgICAvLyBwdXJwb3Nlcy4KKyAgICBJbnZhbGlkRXZlbnRLaW5kCit9Owor
Cit1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBncHI7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdHJ1Y3QgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCB0YWdHUFI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
eWxvYWRHUFI7CisgICAgfSBwYWlyOworI2VuZGlmCisgICAgaW50MzJfdCB2aXJ0dWFsUmVnOwor
fTsKKworY2xhc3MgVmFyaWFibGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgp
CisgICAgICAgIDogbV9raW5kKEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCByZXNldCgpCisgICAgeworICAgICAgICBWYXJpYWJs
ZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2tpbmQgPSBSZXNldDsKKyAgICAgICAgcmV0
dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BS
KFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAg
QVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgQVNTRVJUKCEoZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUykpOworI2Vu
ZGlmCisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXgg
PSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUuZ3ByID0gZ3ByOworICAgICAgICBldmVudC5t
X2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBkYXRhRm9ybWF0Owor
ICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZmlsbFBhaXIoVmFyaWFibGVFdmVudEtpbmQga2lu
ZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFy
aWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAg
ICAgICAgZXZlbnQudS5wYWlyLnRhZ0dQUiA9IHRhZ0dQUjsKKyAgICAgICAgZXZlbnQudS5wYWly
LnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOwor
ICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgIHJldHVy
biBldmVudDsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAKKyAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBmaWxsRlBSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJ
bmRleDsKKyAgICAgICAgZXZlbnQudS5mcHIgPSBmcHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9
IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7Cisg
ICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZl
bnQgc3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwga2luZCA9PSBTcGlsbCk7Cisg
ICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3RlcjsKKyAg
ICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0g
Zm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YXJpYWJsZUV2ZW50IGRlYXRoKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBW
YXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4Owor
ICAgICAgICBldmVudC5tX2tpbmQgPSBEZWF0aDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChpbnQgb3BlcmFuZCwg
RGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50Owor
ICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tp
bmQgPSBTZXRMb2NhbEV2ZW50OworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxl
RXZlbnQgbW92SGludChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2
ZW50Lm1fa2luZCA9IE1vdkhpbnQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAg
CisgICAgVmFyaWFibGVFdmVudEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VmFyaWFibGVFdmVudEtpbmQ+KG1fa2luZCk7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbAorICAgICAgICAgICAgICAgfHwg
bV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAg
IHx8IG1fa2luZCA9PSBEZWF0aCB8fCBtX2tpbmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVy
biBtX2luZGV4OworICAgIH0KKyAgICAKKyAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQg
PT0gRmlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tp
bmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50KTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFGb3JtYXQ+KG1fZGF0YUZvcm1hdCk7Cisg
ICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBG
aWxsKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCk7CisgICAgICAgIEFTU0VSVChtX2Rh
dGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgQVNTRVJUKCEobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIHUuZ3ByOworICAgIH0KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVy
biB1LnBhaXIudGFnR1BSOworICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBw
YXlsb2FkR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhU
b0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuIHUucGFpci5wYXlsb2FkR1BSOworICAgIH0K
KyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpG
UFJlZ2lzdGVySUQgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0g
QmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9y
bWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICByZXR1cm4gdS5mcHI7CisgICAgfQor
ICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxs
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odS52aXJ0dWFs
UmVnKTsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50KTsK
KyAgICAgICAgcmV0dXJuIHUudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiYgdmFyaWFibGVSZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoRklMRSopIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIGR1bXBGaWxsSW5mbyhjb25zdCBjaGFyKiBuYW1lLCBGSUxFKikgY29uc3Q7
CisgICAgdm9pZCBkdW1wU3BpbGxJbmZvKGNvbnN0IGNoYXIqIG5hbWUsIEZJTEUqKSBjb25zdDsK
KyAgICAKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICAKKyAgICAvLyBGb3IgQmlydGhUb0Zp
bGwsIEZpbGw6CisgICAgLy8gICAtIFRoZSBHUFIgb3IgRlBSLCBvciBhIEdQUiBwYWlyLgorICAg
IC8vIEZvciBCaXJ0aFRvU3BpbGwsIFNwaWxsOgorICAgIC8vICAgLSBUaGUgdmlydHVhbCByZWdp
c3Rlci4KKyAgICAvLyBGb3IgTW92SGludCwgU2V0TG9jYWxFdmVudDoKKyAgICAvLyAgIC0gVGhl
IGJ5dGVjb2RlIG9wZXJhbmQuCisgICAgLy8gRm9yIERlYXRoOgorICAgIC8vICAgLSBVbnVzZWQu
CisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiB1OworICAgIAorICAgIGludDhfdCBtX2tpbmQ7
CisgICAgaW50OF90IG1fZGF0YUZvcm1hdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVF
dmVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06Omxv
Z0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQoreworICAgIGRhdGFMb2coInNlcSMl
bHU6Iiwgc2l6ZSgpKTsKKyAgICBldmVudC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgZGF0
YUxvZygiICIpOworfQorCitzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyB7CisgICAgYm9v
bCBmaWxsZWQ7IC8vIHRydWUgLT4gaW4gZ3ByL2Zwci9wYWlyLCBmYWxzZSAtPiBzcGlsbGVkCisg
ICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiB1OworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAg
IAorICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8oKQorICAgICAgICA6IGZvcm1hdChEYXRhRm9y
bWF0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgdXBkYXRlKGNvbnN0IFZhcmlh
YmxlRXZlbnQmIGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsK
KyAgICAgICAgY2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAgICAg
ICAgZmlsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRo
VG9TcGlsbDoKKyAgICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgICAgIGZpbGxlZCA9IGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVhdGg6CisgICAgICAgICAgICBm
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
dSA9IGV2ZW50LnZhcmlhYmxlUmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgZm9ybWF0ID0gZXZl
bnQuZGF0YUZvcm1hdCgpOworICAgIH0KK307CisKK3ZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6
cmVjb25zdHJ1Y3QoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTWluaWZpZWRHcmFwaCYgZ3JhcGgsCisgICAgdW5zaWduZWQgaW5kZXgsIE9wZXJhbmRz
PFZhbHVlUmVjb3Zlcnk+JiB2YWx1ZVJlY292ZXJpZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNv
ZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQ29kZUJsb2Nr
KiBiYXNlbGluZUNvZGVCbG9jayA9IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCk7CisgICAg
CisgICAgdW5zaWduZWQgbnVtVmFyaWFibGVzOworICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgbnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxp
bmVDYWxsRnJhbWUoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5tX251bUNhbGxlZVJlZ2lz
dGVycyArIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICBlbHNl
CisgICAgICAgIG51bVZhcmlhYmxlcyA9IGJhc2VsaW5lQ29kZUJsb2NrLT5tX251bUNhbGxlZVJl
Z2lzdGVyczsKKyAgICAKKyAgICAvLyBDcmF6eSBzcGVjaWFsIGNhc2U6IGlmIHdlJ3JlIGF0IGlu
ZGV4ID09IDAgdGhlbiB0aGlzIG11c3QgYmUgYW4gYXJndW1lbnQgY2hlY2sKKyAgICAvLyBmYWls
dXJlLCBpbiB3aGljaCBjYXNlIGFsbCB2YXJpYWJsZXMgYXJlIGFscmVhZHkgc2V0IHVwLiBUaGUg
cmVjb3ZlcmllcyBzaG91bGQKKyAgICAvLyByZWZsZWN0IHRoaXMuCisgICAgaWYgKCFpbmRleCkg
eworICAgICAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihjb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2
YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDE6IEZpbmQgdGhl
IGxhc3QgY2hlY2twb2ludCwgYW5kIGZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiB2aXJ0dWFsIHJl
Z2lzdGVycyBhcyB3ZSBnby4KKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gaW5kZXggLSAxOwor
ICAgIHdoaWxlIChhdChzdGFydEluZGV4KS5raW5kKCkgIT0gUmVzZXQpCisgICAgICAgIHN0YXJ0
SW5kZXgtLTsKKyAgICAKKyAgICAvLyBTdGVwIDI6IENyZWF0ZSBhIG1vY2stdXAgb2YgdGhlIERG
RydzIHN0YXRlIGFuZCBleGVjdXRlIHRoZSBldmVudHMuCisgICAgT3BlcmFuZHM8VmFsdWVTb3Vy
Y2U+IG9wZXJhbmRTb3VyY2VzKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBudW1WYXJpYWJs
ZXMpOworICAgIFZlY3RvcjxNaW5pZmllZEdlbmVyYXRpb25JbmZvLCAzMj4gZ2VuZXJhdGlvbklu
Zm9zKGdyYXBoLm9yaWdpbmFsR3JhcGhTaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXJ0SW5kZXg7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIGNvbnN0IFZhcmlhYmxlRXZlbnQm
IGV2ZW50ID0gYXQoaSk7CisgICAgICAgIHN3aXRjaCAoZXZlbnQua2luZCgpKSB7CisgICAgICAg
IGNhc2UgUmVzZXQ6CisgICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvLgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQmlydGhUb0ZpbGw6CisgICAgICAgIGNhc2UgQmlydGhUb1Nw
aWxsOgorICAgICAgICBjYXNlIEZpbGw6CisgICAgICAgIGNhc2UgU3BpbGw6CisgICAgICAgIGNh
c2UgRGVhdGg6CisgICAgICAgICAgICBnZW5lcmF0aW9uSW5mb3NbZXZlbnQubm9kZUluZGV4KCld
LnVwZGF0ZShldmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFu
ZCgpKSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9w
ZXJhbmQoKSwgVmFsdWVTb3VyY2UoZXZlbnQubm9kZUluZGV4KCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNldExvY2FsRXZlbnQ6CisgICAgICAgICAgICBpZiAob3BlcmFu
ZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAgICAgICAgICAgICAgIG9w
ZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBWYWx1ZVNvdXJjZTo6Zm9y
RGF0YUZvcm1hdChldmVudC5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDM6IFJlY29y
ZCB0aGUgdGhpbmdzIHRoYXQgYXJlIGxpdmUsIHNvIHdlIGNhbiBnZXQgdG8gdGhlbSBtb3JlIHF1
aWNrbHkuCisgICAgVmVjdG9yPHVuc2lnbmVkLCAxNj4gaW5kaWNlc09mTGl2ZVRoaW5nczsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ2VuZXJhdGlvbkluZm9zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChnZW5lcmF0aW9uSW5mb3NbaV0uZm9ybWF0ICE9IERhdGFGb3JtYXROb25l
KQorICAgICAgICAgICAgaW5kaWNlc09mTGl2ZVRoaW5ncy5hcHBlbmQoaSk7CisgICAgfQorICAg
IAorICAgIC8vIFN0ZXAgNDogQ29tcHV0ZSB2YWx1ZSByZWNvdmVyaWVzIQorICAgIHZhbHVlUmVj
b3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpLCBudW1WYXJpYWJsZXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvcGVyYW5k
U291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVNvdXJjZSYgc291cmNlID0gb3Bl
cmFuZFNvdXJjZXNbaV07CisgICAgICAgIGlmIChzb3VyY2UuaXNJblJlZ2lzdGVyRmlsZSgpKSB7
CisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBzb3VyY2UudmFsdWVSZWNvdmVyeSgp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChzb3VyY2Uua2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgTWluaWZpZWROb2RlKiBu
b2RlID0gZ3JhcGguYXQoc291cmNlLm5vZGVJbmRleCgpKTsKKyAgICAgICAgaWYgKG5vZGUpIHsK
KyAgICAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudE51bWJlcigpKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoCisgICAg
ICAgICAgICAgICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnRO
dW1iZXIoKSkuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1dlYWtDb25zdGFudCgpKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobm9kZS0+
d2Vha0NvbnN0YW50KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvKiBp
bmZvID0gJmdlbmVyYXRpb25JbmZvc1tzb3VyY2Uubm9kZUluZGV4KCldOworICAgICAgICBpZiAo
aW5mby0+Zm9ybWF0ID09IERhdGFGb3JtYXROb25lKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8g
c2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUg
dmFsdWUgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRp
ZXM6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW50MzJUb0RvdWJsZTogV2UgY2Fu
IHVzZSB0aGlzIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBub2RlLCBidXQKKyAgICAgICAgICAg
IC8vICAgIHdlJ2QgcmF0aGVyIG5vdDsgc28gd2UgdXNlIGl0IG9ubHkgaWYgaXQgaXMgdGhlIG9u
bHkgcmVtYWluaW5nCisgICAgICAgICAgICAvLyAgICBsaXZlIHZlcnNpb24uCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBJZiB0aGUgb25seSByZW1haW5pbmcg
bGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAgICAgLy8gICAgVmFsdWVUb0lu
dDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
VUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMg
YSBVSW50MzJUb051bWJlcgorICAgICAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5p
bmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAg
ICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5v
ZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAgICAgLy8gICAg
YWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVhbnMgdGhhdCB0aGUgb25seSByZW1h
aW5pbmcgdXNlcyBvZgorICAgICAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5l
IHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgCisgICAgICAgICAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlICYm
IG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IGdy
YXBoLmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaW5mbyA9ICZnZW5lcmF0aW9uSW5m
b3Nbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby0+Zm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlSW5kZXggaW50MzJUb0RvdWJsZUluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggdWludDMyVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kaWNlc09mTGl2
ZVRoaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gaW5kaWNlc09mTGl2ZVRoaW5nc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IGdyYXBoLmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW5vZGUtPmhhc0NoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBzb3VyY2Uubm9kZUlu
ZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvc1tub2RlSW5kZXhdLmZvcm1hdCAhPSBEYXRhRm9y
bWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMlRvRG91YmxlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAg
ICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IG5vZGVJbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9
IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgICAgIGlm
IChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
dWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nbbm9kZUluZGV4VG9Vc2Vd
OworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5mby0+Zm9ybWF0ICE9IERhdGFGb3JtYXRO
b25lKTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkg
eworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoaW5mby0+Zm9ybWF0
ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpbmZvLT5maWxsZWQp
IHsKKyAgICAgICAgICAgIGlmIChpbmZvLT5mb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgewor
ICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmluRlBS
KGluZm8tPnUuZnByKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgaWYgKGluZm8tPmZvcm1hdCAmIERh
dGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVl
UmVjb3Zlcnk6OmluUGFpcihpbmZvLT51LnBhaXIudGFnR1BSLCBpbmZvLT51LnBhaXIucGF5bG9h
ZEdQUik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGlu
Zm8tPnUuZ3ByLCBpbmZvLT5mb3JtYXQpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9CisgICAgICAgICAgICBW
YWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFs
UmVnaXN0ZXI+KGluZm8tPnUudmlydHVhbFJlZyksIGluZm8tPmZvcm1hdCk7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1Zh
cmlhYmxlRXZlbnRTdHJlYW1faAorI2RlZmluZSBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCisjaW5jbHVk
ZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IFZhcmlhYmxlRXZlbnRTdHJlYW0gOiBwdWJsaWMgVmVjdG9yPFZhcmlhYmxlRXZlbnQ+IHsKK3B1
YmxpYzoKKyAgICB2b2lkIGFwcGVuZEFuZExvZyhjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkK
KyAgICB7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBsb2dFdmVudChl
dmVudCk7CisjZW5kaWYKKyAgICAgICAgYXBwZW5kKGV2ZW50KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCByZWNvbnN0cnVjdCgKKyAgICAgICAgQ29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgTWluaWZp
ZWRHcmFwaCYsCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5
PiYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgbG9nRXZlbnQoY29uc3QgVmFyaWFibGVF
dmVudCYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogCiB2b2lkIHBl
cmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFZpcnR1YWwgUmVnaXN0ZXIgQWxsb2NhdGlv
biBQaGFzZSIpOwogICAgIHJ1blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4o
Z3JhcGgpOwogfQogCg==
</data>
<flag name="commit-queue"
          id="138472"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134256</attachid>
            <date>2012-03-28 03:47:36 -0700</date>
            <delta_ts>2012-07-02 15:23:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>variablestream_patch_11.diff</filename>
            <type>text/plain</type>
            <size>184487</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxMi0wMy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBhaW1zIHRvIHJlZHVjZSBvbmUgYXNwZWN0IG9mIERGRyBjb21waWxlIHRpbWVz
OiB0aGUgZmFjdAorICAgICAgICB0aGF0IHdlIGN1cnJlbnRseSBjb21wdXRlIHRoZSB2YWx1ZSBy
ZWNvdmVyaWVzIGZvciBlYWNoIGxvY2FsIGFuZAorICAgICAgICBhcmd1bWVudCBvbiBldmVyeSBz
cGVjdWxhdGlvbiBjaGVjay4gV2UgY29tcGlsZSBtYW55IHNwZWN1bGF0aW9uIGNoZWNrcywKKyAg
ICAgICAgc28gdGhpcyBjYW4gYWRkIHVwIHF1aWNrLiBUaGUgc3RyYXRlZ3kgdGhhdCB0aGlzIGNo
YW5nZSB0YWtlcyBpcyB0bworICAgICAgICBoYXZlIHRoZSBERkcgc2F2ZSBqdXN0IGVub3VnaCBp
bmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGNvbXBpbGVyIGlzCisgICAgICAgIGNob29zaW5nIHRv
IHJlcHJlc2VudCBzdGF0ZSwgdGhhdCB0aGUgREZHOjpPU1JFeGl0Q29tcGlsZXIgY2FuIHJlaWZ5
CisgICAgICAgIHRoZSB2YWx1ZSByZWNvdmVyaWVzIGxhemlseS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgYXBwZWFycyB0byBiZSBhbiAwLjMlIFN1blNwaWRlciBzcGVlZC11cCBhbmQgaXMgbmV1
dHJhbCBlbHNld2hlcmUuCisgICAgICAgIAorICAgICAgICBJIGFsc28gdG9vayB0aGUgb3Bwb3J0
dW5pdHkgdG8gZml4IHRoZSBzYW1wbGluZyByZWdpb25zIHByb2ZpbGVyIChpdAorICAgICAgICB3
YXMgbWlzc2luZyBhbiBleHBvcnQgbWFjcm8pIGFuZCB0byBwdXQgaW4gbW9yZSBzYW1wbGluZyBy
ZWdpb25zIGluCisgICAgICAgIHRoZSBERkcgKHdoaWNoIGFyZSBkaXNhYmxlZCBzbyBsb25nIGFz
IEVOQUJMRShTQU1QTElOR19SRUdJT05TKSBpcworICAgICAgICBmYWxzZSkuCisgICAgICAgIAor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFUb0Zp
dCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1pbmlmaWVkREZHKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKERGR0RhdGEpOgorICAg
ICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpoYXNP
cGVyYW5kKToKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OnNp
emUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6YXJndW1lbnRGb3JJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp2YXJpYWJsZUZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRGb3JJbmRleCk6CisgICAg
ICAgIChKU0MpOgorICAgICAgICAoSlNDOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGJ5dGVj
b2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdSZWdpb24pOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2UpOgor
ICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9y
bUNGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlvbklu
Zm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2VuZXJhdGlvbkluZm8p
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6REZH
OjpHZW5lcmF0aW9uSW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRp
b25JbmZvOjppbml0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86
OmluaXREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0U3Rv
cmFnZSk6CisgICAgICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c3BpbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzZXRTcGlsbGVkKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6R2Vu
ZXJhdGlvbkluZm86OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9u
SW5mbzo6ZmlsbEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpm
aWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRGaWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kU3BpbGwpOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6
OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAgKiBk
ZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChN
aW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpNaW5pZmll
ZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphdCk6CisgICAgICAg
IChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZEdyYXBoOjpwcmVwYXJlQW5kU2hyaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5p
ZmllZEdyYXBoOjpzZXRPcmlnaW5hbEdyYXBoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWRHcmFwaDo6b3JpZ2luYWxHcmFwaFNpemUpOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmll
ZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6TWlu
aWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YmVsb25nc0luTWluaWZp
ZWRHcmFwaCk6CisgICAgICAgIChNaW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok1p
bmlmaWVkTm9kZTo6TWluaWZpZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5v
ZGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9k
ZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29u
c3RhbnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnRO
dW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OkRG
Rzo6TWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAg
ICAgICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRDb21w
aWxlcik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Qcm9w
YWdhdGlvbik6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlvbik6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OnVzZSk6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVnZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxs
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50
ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
RG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAgICAg
IChERkcpOgorICAgICAgICAoVmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU6OlZhbHVlUmVjb3ZlcnlPdmVycmlkZSk6CisgICAg
ICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHVmFs
dWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmRh
dGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsdWVTb3Vy
Y2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luUmVnaXN0ZXJGaWxl
KToKKyAgICAgICAgKFZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJj
ZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQcmVk
aWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1hdCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6
OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkYXRh
Rm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6dmFsdWVSZWNvdmVyeSk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdW
YXJpYWJsZUV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmR1bXBGaWxsSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6ZHVt
cFNwaWxsSW5mbyk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRG
Rzo6VmFyaWFibGVFdmVudDo6VmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVFdmVudDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZp
bGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVF
dmVudDo6ZGVhdGgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNldExvY2Fs
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50Ojpub2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OmRhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Omdwcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dGFnR1BSKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50OjpwYXlsb2FkR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJp
YWJsZUV2ZW50OjpmcHIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnZpcnR1
YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6b3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dmFyaWFibGVSZXByZXNlbnRhdGlv
bik6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6bG9n
RXZlbnQpOgorICAgICAgICAoTWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAg
ICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoVmFyaWFibGVFdmVudFN0cmVhbSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvbik6CisKIDIwMTItMDMtMjcgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgT1NSIGV4aXQgc2hvdWxkIG5vdCBnZW5lcmF0
ZSBhbiBleGl0IGZvciB2YXJpYWJsZXMgb2YgaW5saW5lZXMgaWYgdGhlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcg
QEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRml4dXBQaGFzZS5jcHAK
ICAgICBkZmcvREZHR3JhcGguY3BwCiAgICAgZGZnL0RGR0pJVENvbXBpbGVyLmNwcAorICAgIGRm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwCiAgICAgZGZnL0RGR09TUkV4aXQuY3BwCkBAIC04Myw2ICs4NCw5IEBA
IFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1RodW5r
cy5jcHAKKyAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZl
bnQuY3BwCisgICAgZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCiAgICAgZGZnL0RGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKIAogICAgIGhlYXAvQ29waWVkU3BhY2Uu
Y3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2
aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbGFncy5oIFwKQEAgLTIwMyw2ICsyMDYsMTMgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGh1bmtzLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudC5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZl
bnRTdHJlYW0uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQu
cHJpCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnBy
aQkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkZmcv
REZHRml4dXBQaGFzZS5jcHAgXAogICAgIGRmZy9ERkdHcmFwaC5jcHAgXAogICAgIGRmZy9ERkdK
SVRDb21waWxlci5jcHAgXAorICAgIGRmZy9ERkdNaW5pZmllZE5vZGUuY3BwIFwKICAgICBkZmcv
REZHTm9kZUZsYWdzLmNwcCBcCiAgICAgZGZnL0RGR09wZXJhdGlvbnMuY3BwIFwKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwIFwKQEAgLTExMCw2ICsxMTEsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgXAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBcCiAgICAgZGZnL0RGR1RodW5rcy5jcHAgXAorICAgIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5jcHAgXAorICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcCBcCisgICAgZGZnL0RGR1Zhcmlh
YmxlRXZlbnRTdHJlYW0uY3BwIFwKICAgICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlv
blBoYXNlLmNwcCBcCiAgICAgaW50ZXJwcmV0ZXIvQWJzdHJhY3RQQy5jcHAgXAogICAgIGludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niwx
NiBAQAogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0
QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMkMxNTFGREU5
MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCREMyQjE1MUZERThCMDBDRDg5MTAgLyogT3BlcmFuZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0NTE1
MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERG
R01pbmlmaWVkR3JhcGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjJCREM0NjE1MjI4MDIwMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMzRTE1
MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMkJEQzQ4MTUyMjgwMjkwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDAxNTIy
ODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERG
R1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJEQzQxMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNEEx
NTIyODA5QTAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDIxNTIyODAxNzAwQ0Q4
OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwICovOyB9OworCQkwRjJCREM0QjE1MjI4
MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8q
IERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZp
ZWROb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwICovOyB9Owor
CQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNEUxNTIyOEJFNzAw
Q0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmNwcCAqLzsgfTsKKwkJMEYyQkRDNTExNTIyOEZGRDAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDNTAxNTIyOEZGQTAwQ0Q4OTEwIC8qIERGR1Zhcmlh
YmxlRXZlbnQuY3BwICovOyB9OwogCQkwRjJDNTU2RjE0NzM4RjMxMDAxMjFFNEYgLyogREZHQ29k
ZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJDNTU3MDE0NzM4RjM1MDAx
MjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nr
cy5jcHAgKi87IH07CiAJCTBGNDI2QTQ4MTQ2MENCQjMwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQyNkE0
NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MjgsNiArNzM4LDE2IEBACiAJCTBGMkJE
QzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzFGMTUxRTgwMzgwMENEODkx
MCAvKiBERkdJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHSW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzJCMTUxRkRFOEIwMENEODkxMCAvKiBPcGVyYW5k
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGVyYW5kcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWlu
aWZpZWRHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdNaW5pZmll
ZEdyYXBoLmg7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkTm9kZS5oOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCREMzRjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlk
ZS5oOyBwYXRoID0gZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCREM0MDE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFsdWVTb3Vy
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVTb3VyY2UuaDsg
cGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50Lmg7IHBhdGggPSBkZmcv
REZHVmFyaWFibGVFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCREM0
MjE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdNaW5p
ZmllZE5vZGUuY3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVkTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNv
dXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYWx1ZVNv
dXJjZS5jcHA7IHBhdGggPSBkZmcvREZHVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjJCREM1MDE1MjI4RkZBMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUV2
ZW50LmNwcDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gREZHQ29kZUJsb2Nrcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0
RiAvKiBERkdDb2RlQmxvY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERG
R0NvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYw
Q0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjAwNiw2ICsyMDI2LDkgQEAKIAkJCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyogREZHSW5z
ZXJ0aW9uU2V0LmggKi8sCiAJCQkJODZFQzlEQkIxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0pJVENv
bXBpbGVyLmNwcCAqLywKIAkJCQk4NkVDOURCQzEzMjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29t
cGlsZXIuaCAqLywKKwkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oICovLAorCQkJCTBGMkJEQzRDMTUyMjgxODMwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuY3BwICovLAorCQkJCTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5v
ZGUuaCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAog
CQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJ
CTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKQEAgLTIwMzgs
NyArMjA2MSwxNCBAQAogCQkJCTg2ODgwRjRDMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1
bmtzLmNwcCAqLywKIAkJCQkwRkMwOTdBMDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmgg
Ki8sCisJCQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZS5oICovLAorCQkJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJj
ZS5jcHAgKi8sCisJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmggKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oICovLAorCQkJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50LmNwcCAqLywKKwkJCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudC5oICovLAorCQkJCTBGMkJEQzQyMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmNwcCAqLywKKwkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFy
aWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRF
RjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywK
IAkJCSk7CkBAIC0yNTEyLDYgKzI1NDIsMTIgQEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5
MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAz
QjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
REM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEw
IC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0OTE1MjI4MDk2
MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRD
NEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpAQCAtMzA3MCw2ICszMTA2LDEwIEBACiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVG
IC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMjE1
MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0QTE1MjI4MDlBMDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCREM0RDE1MjI4MTg2MDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJEQzRG
MTUyMjhCRjMwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjJCREM1MTE1MjI4RkZEMDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3MSw3ICsyNDcxLDE5IEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAgICAgICAgIGRhdGFMb2coIiAgIGJj
ID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50
ZXIpOwogICAgIH0KIH0KLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BS
T0ZJTEUpCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKK3ZvaWQgQ29kZUJsb2NrOjpzaHJpbmtERkdE
YXRhVG9GaXQoKQoreworICAgIGlmICghbV9kZmdEYXRhKQorICAgICAgICByZXR1cm47CisgICAg
bV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5zaHJpbmtUb0ZpdCgpOworICAgIG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnMuc2hyaW5rVG9GaXQoKTsKKyAgICBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKKyAgICBtX2RmZ0RhdGEtPnZhcmlhYmxlRXZlbnRTdHJlYW0uc2hy
aW5rVG9GaXQoKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogc2l6ZV90IENvZGVC
bG9jazo6cHJlZGljdGVkTWFjaGluZUNvZGVTaXplKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsOCArMzgsMTAgQEAKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorI2luY2x1ZGUg
IkRGR01pbmlmaWVkR3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUg
IkRGR09TUkV4aXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCiAjaW5j
bHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNp
bmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0zMTAsMTMgKzMxMiw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgbV9kZmdEYXRhLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQo
V3JpdGVCYXJyaWVyPEpTQ2VsbD4oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIHRh
cmdldCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICB2b2lkIHNocmlua1dlYWtSZWZl
cmVuY2VzVG9GaXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1fZGZnRGF0YSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX2RmZ0RhdGEtPndlYWtSZWZlcmVu
Y2VzLnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHZvaWQgYXBw
ZW5kV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oSlNDZWxsKiBjb2RlT3JpZ2luLCBKU0NlbGwqIGZy
b20sIEpTQ2VsbCogdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIGNyZWF0ZURGR0RhdGFJZk5l
Y2Vzc2FyeSgpOwpAQCAtMzI0LDEyICszMTksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKmdsb2JhbERhdGEoKSwgb3duZXJFeGVj
dXRhYmxlKCksIGNvZGVPcmlnaW4sIGZyb20sIHRvKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIHZvaWQgc2hyaW5rV2Vha1JlZmVyZW5jZVRyYW5zaXRpb25zVG9GaXQoKQorICAgICAg
ICBERkc6Ok1pbmlmaWVkR3JhcGgmIG1pbmlmaWVkREZHKCkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFtX2RmZ0RhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
bV9kZmdEYXRhLT50cmFuc2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgY3JlYXRl
REZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT5taW5p
ZmllZERGRzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHOjpWYXJpYWJsZUV2ZW50
U3RyZWFtJiB2YXJpYWJsZUV2ZW50U3RyZWFtKCkKKyAgICAgICAgeworICAgICAgICAgICAgY3Jl
YXRlREZHRGF0YUlmTmVjZXNzYXJ5KCk7CisgICAgICAgICAgICByZXR1cm4gbV9kZmdEYXRhLT52
YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNo
cmlua0RGR0RhdGFUb0ZpdCgpOwogI2VuZGlmCiAKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCkBAIC0xMTg2LDYgKzExODgsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zl
cnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CiAgICAgICAgICAgICBWZWN0b3I8V2Vha1JlZmVyZW5j
ZVRyYW5zaXRpb24+IHRyYW5zaXRpb25zOwogICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmll
cjxKU0NlbGw+ID4gd2Vha1JlZmVyZW5jZXM7CisgICAgICAgICAgICBERkc6OlZhcmlhYmxlRXZl
bnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKKyAgICAgICAgICAgIERGRzo6TWluaWZpZWRH
cmFwaCBtaW5pZmllZERGRzsKICAgICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAg
ICAgICAgICBib29sIGlzSmV0dGlzb25lZDsKICAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxMTIzMjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDYgKzExMywxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgY29uc3QgVCYgb3Bl
cmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29u
c3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQogICAgIAorICAg
IGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kKSA8IG51bWJlck9mTG9jYWxz
KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3Qg
VCYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkp
IHsKQEAgLTEyNCw2ICsxMzEsMzkgQEAgcHVibGljOgogICAgICAgICBzZXRMb2NhbChvcGVyYW5k
LCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9jYWxzKCk7IH0KKyAgICBjb25zdCBUJiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBudW1iZXJP
ZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAg
ICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVtYmVyT2ZBcmd1bWVudHMoKV07CisgICAg
fQorICAgIFQmIGF0KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhd
OworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpXTsK
KyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4KTsgfQorICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVy
biBhdChpbmRleCk7IH0KKworICAgIGJvb2wgaXNBcmd1bWVudChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVudHMoKTsgfQorICAgIGJvb2wgaXNWYXJp
YWJsZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQor
ICAgIGludCBhcmd1bWVudEZvckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMu
c2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KHNpemVfdCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAg
ICAgICAgICByZXR1cm4gYXJndW1lbnRUb09wZXJhbmQoaW5kZXgpOworICAgICAgICByZXR1cm4g
aW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNsZWFy
KCkKICAgICB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6
ZSgpOyArK2kpCkBAIC0xNTMsNiArMTkzLDE2IEBAIHZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRz
PFQsIFRyYWl0cz4mIG8KICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFRyYWl0cz4KK3ZvaWQgZHVtcE9wZXJhbmRzKGNvbnN0IE9wZXJhbmRzPFQsIFRyYWl0cz4mIG9w
ZXJhbmRzLCBGSUxFKiBvdXQpCit7CisgICAgLy8gVXNlIGNvbnN0LWNhc3QgYmVjYXVzZToKKyAg
ICAvLyAxKSBJIGRvbid0IGZlZWwgbGlrZSB3cml0aW5nIHRoaXMgY29kZSB0d2ljZSwgYW5kCisg
ICAgLy8gMikgU29tZSBkdW1wKCkgbWV0aG9kcyBtYXkgbm90IGJlIGNvbnN0LCBhbmQgSSBkb24n
dCByZWFsbHkgY2FyZSBpZiB0aGF0J3MKKyAgICAvLyAgICB0aGUgY2FzZS4KKyAgICBkdW1wT3Bl
cmFuZHMoKmNvbnN0X2Nhc3Q8T3BlcmFuZHM8VCwgVHJhaXRzPio+KCZvcGVyYW5kcyksIG91dCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9vbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TYW1wbGluZ1Rvb2wuaAkocmV2aXNp
b24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NhbXBsaW5nVG9v
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdm9pZCBzYW1wbGUoKTsKICAgICAgICAgCi0gICAgICAg
IHN0YXRpYyB2b2lkIGR1bXAoKTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZv
aWQgZHVtcCgpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBjb25zdCBjaGFyKiBt
X25hbWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjcsNiArMjc2Nyw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKIAogYm9vbCBwYXJzZShHcmFwaCYgZ3Jh
cGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQYXJzaW5nIik7
CiAjaWYgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEUKICAgICBVTlVTRURfUEFSQU0oZ3JhcGgpOwog
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZB
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIHByaXZh
dGU6CiAKIHZvaWQgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBDRkEgUGhhc2UiKTsKICAgICBydW5QaGFzZTxDRkFQaGFz
ZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBo
YXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Nyw2ICs2OTcsNyBAQCBwcml2YXRl
OgogCiB2b2lkIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQ1NFIFBoYXNlIik7CiAgICAgcnVuUGhhc2U8Q1NFUGhhc2U+
KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDcgQEAgcHJp
dmF0ZToKICAgICAKIHZvaWQgcGVyZm9ybUZpeHVwKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIEZpeHVwIFBoYXNlIik7CiAgICAgcnVuUGhh
c2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0pJ
VENvbXBpbGVyLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIkRG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIKICNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVk
ZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIApAQCAtNTAsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1h
dChEYXRhRm9ybWF0Tm9uZSkKICAgICAgICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25l
KQogICAgICAgICAsIG1fY2FuRmlsbChmYWxzZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFs
c2UpCiAgICAgewogICAgIH0KIApAQCAtNjAsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9
IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jv
cm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAg
ICB2b2lkIGluaXRJbnRlZ2VyKE5vZGVJbmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50
LCBHUFJSZWcgZ3ByKQpAQCAtNzAsNiArNzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxG
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAg
ICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAg
QVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODMsNiAr
ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsK
ICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAg
ICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAg
IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC05Nyw2ICsxMDMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwog
ICAgICAgICB1LnYucGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9T
UiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBA
IC0xMDgsNiArMTE1LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZv
cm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdw
cjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNv
dW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1
aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTExOCw2ICsxMjYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5G
aWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1Ig
PSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGlu
aXREb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBm
cHIpCkBAIC0xMjksNiArMTM4LDcgQEAgcHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0g
RGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZw
ciA9IGZwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVCht
X3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUlu
ZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKQEAgLTEzOSwxOSArMTQ5LDQ0IEBA
IHB1YmxpYzoKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAg
ICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9y
bkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAg
ICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUu
CiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAg
CisgICAgdm9pZCBub3RpY2VPU1JCaXJ0aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIE5v
ZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAg
eworICAgICAgICBpZiAobV9ub2RlSW5kZXggIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIWFsaXZlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJG
b3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9G
aWxsLCBzdHJlYW0pOworICAgICAgICBlbHNlIGlmIChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3Jt
YXROb25lKQorICAgICAgICAgICAgYXBwZW5kU3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZp
cnR1YWxSZWdpc3Rlcik7CisgICAgfQogCiAgICAgLy8gTWFyayB0aGUgdmFsdWUgYXMgaGF2aW5n
IGJlZW4gdXNlZCAoZGVjcmVtZW50IHRoZSB1c2VDb3VudCkuCiAgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmFsdWUsIGFuZCBhbnkKICAgICAvLyBh
c3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0ZXJzIG1heSBiZSBmcmVlZC4KLSAgICBib29sIHVzZSgp
CisgICAgYm9vbCB1c2UoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdXNlQ291bnQpOwotICAgICAgICByZXR1cm4gIS0tbV91c2VDb3VudDsKKyAg
ICAgICAgYm9vbCByZXN1bHQgPSAhLS1tX3VzZUNvdW50OworICAgICAgICAKKyAgICAgICAgaWYg
KHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1IpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGVJbmRl
eCAhPSBOb05vZGUpOworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpkZWF0aChtX25vZGVJbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8vIFVzZWQgdG8gY2hlY2sgdGhlIG9wZXJhbmRz
IG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlmIHRoZXkgYXJlIG9uCkBAIC0yMjQsNyArMjU5LDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIGEgVmlydHVhbFJlZ2lzdGVyIGlz
IGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJlZ2lzdGVyRmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0g
ICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQorICAgIHZvaWQgc3BpbGwoVmFy
aWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
LCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0KQogICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0
IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRvbid0IG5lZWQgc3BpbGxpbmcuCiAgICAgICAgIEFTU0VS
VCghbV9jYW5GaWxsKTsKQEAgLTIzNSwxNSArMjcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9y
ZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0g
c3BpbGxGb3JtYXQ7CiAgICAgICAgIG1fY2FuRmlsbCA9IHRydWU7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kU3BpbGwoU3BpbGwsIHN0cmVh
bSwgdmlydHVhbFJlZ2lzdGVyKTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgb24gdmFsdWVzIHRo
YXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAoY29uc3RhbnRzIGFuZCB2YWx1ZXMgdGhhdCBoYXZlCiAg
ICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxsZWQpLCB0byBtYXJrIHRoZW0gYXMgbm8gbG9uZ2VyIGJl
aW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJzLgotICAgIHZvaWQgc2V0U3BpbGxlZCgpCisgICAgdm9p
ZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcikKICAgICB7CiAgICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBvbiB2YWx1ZXMgdGhhdCBkb24ndCBuZWVkIHNwaWxsaW5nLCBhbmQgYXJlIGN1cnJlbnRseSBp
biByZWdpc3RlcnMuCiAgICAgICAgIEFTU0VSVChtX2NhbkZpbGwgJiYgbV9yZWdpc3RlckZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9y
bWF0Tm9uZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAg
ICBhcHBlbmRTcGlsbChTcGlsbCwgc3RyZWFtLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGtpbGxTcGlsbGVkKCkKQEAgLTI1NSw0NiArMjk2LDY3IEBAIHB1YmxpYzoK
ICAgICAvLyBSZWNvcmQgdGhhdCB0aGlzIHZhbHVlIGlzIGZpbGxlZCBpbnRvIG1hY2hpbmUgcmVn
aXN0ZXJzLAogICAgIC8vIHRyYWNraW5nIHdoaWNoIHJlZ2lzdGVycywgYW5kIHdoYXQgZm9ybWF0
IHRoZSB2YWx1ZSBoYXMuCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVl
KEdQUlJlZyBncHIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQg
ZmlsbEpTVmFsdWUoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByLCBEYXRh
Rm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gZm9ybWF0Owog
ICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1Ip
CisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVlKEdQUlJlZyB0YWdHUFIsIEdQUlJl
ZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lk
IGZpbGxKU1ZhbHVlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIHRhZ0dQUiwg
R1BSUmVnIHBheWxvYWRHUFIsIERhdGFGb3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIG1fcmVn
aXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAgICAgICAgIHUudi50YWdHUFIgPSB0YWdHUFI7IC8vIEZJ
WE1FOiBmb3IgSlNWYWx1ZXMgd2l0aCBrbm93biB0eXBlIChib29sZWFuLCBpbnRlZ2VyLCBjZWxs
IGV0Yy4pIG5vIHRhZ0dQUiBpcyBuZWVkZWQ/CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5
bG9hZEdQUjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAg
ICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmlsbENlbGwoR1BS
UmVnIGdwcikKKyAgICB2b2lkIGZpbGxDZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwg
R1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0
Q2VsbDsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3Ju
Rm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNl
bmRpZgotICAgIHZvaWQgZmlsbEludGVnZXIoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxJbnRl
Z2VyKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIg
PSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAg
YXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KLSAgICB2b2lkIGZpbGxCb29sZWFuKEdQ
UlJlZyBncHIpCisgICAgdm9pZCBmaWxsQm9vbGVhbihWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJl
YW0sIEdQUlJlZyBncHIpCiAgICAgewogICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZv
cm1hdEJvb2xlYW47CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fYm9ybkZvck9TUikKKyAgICAgICAgICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAg
ICB9Ci0gICAgdm9pZCBmaWxsRG91YmxlKEZQUlJlZyBmcHIpCisgICAgdm9pZCBmaWxsRG91Ymxl
KFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAg
IEFTU0VSVChmcHIgIT0gSW52YWxpZEZQUlJlZyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQg
PSBEYXRhRm9ybWF0RG91YmxlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVh
bSk7CiAgICAgfQotICAgIHZvaWQgZmlsbFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZp
bGxTdG9yYWdlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7
CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAg
dS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAg
ICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUo
KQpAQCAtMzAzLDEyICszNjUsMzMgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2
b2lkIGFwcGVuZEZpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVh
bSYgc3RyZWFtKQorICAgIHsKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdERvdWJsZSkgeworICAgICAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2
ZW50OjpmaWxsRlBSKGtpbmQsIG1fbm9kZUluZGV4LCB1LmZwcikpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVn
aXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6ZmlsbFBhaXIoa2luZCwgbV9ub2RlSW5kZXgsIHUudi50YWdH
UFIsIHUudi5wYXlsb2FkR1BSKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICBzdHJlYW0uYXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIo
a2luZCwgbV9ub2RlSW5kZXgsIHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kU3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAg
IHsKKyAgICAgICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5k
LCBtX25vZGVJbmRleCwgdmlydHVhbFJlZ2lzdGVyLCBtX3NwaWxsRm9ybWF0KSk7CisgICAgfQor
ICAgIAogICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgc3RvcmVk
IGluIHRoaXMgdmlydHVhbCByZWdpc3Rlci4KICAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiAg
ICAgdWludDMyX3QgbV91c2VDb3VudDsKICAgICBEYXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7
CiAgICAgRGF0YUZvcm1hdCBtX3NwaWxsRm9ybWF0OwogICAgIGJvb2wgbV9jYW5GaWxsOworICAg
IGJvb2wgbV9ib3JuRm9yT1NSOwogICAgIHVuaW9uIHsKICAgICAgICAgR1BSUmVnIGdwcjsKICAg
ICAgICAgRlBSUmVnIGZwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDEyICsxOTEs
MTQgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBl
eGl0Lm1fY2hlY2suY29ycmVjdExhdGVKdW1wKGxpbmtCdWZmZXIpOwogICAgIH0KICAgICAKLSAg
ICBjb2RlQmxvY2soKS0+c2hyaW5rV2Vha1JlZmVyZW5jZXNUb0ZpdCgpOwotICAgIGNvZGVCbG9j
aygpLT5zaHJpbmtXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbnNUb0ZpdCgpOworICAgIGNvZGVCbG9j
aygpLT5taW5pZmllZERGRygpLnNldE9yaWdpbmFsR3JhcGhTaXplKG1fZ3JhcGguc2l6ZSgpKTsK
KyAgICBjb2RlQmxvY2soKS0+c2hyaW5rREZHRGF0YVRvRml0KCk7CiB9CiAKIGJvb2wgSklUQ29t
cGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CisKICAgICBjb21waWxlRW50cnkoKTsKICAgICBT
cGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgY29tcGlsZUJvZHkoc3BlY3Vs
YXRpdmUpOwpAQCAtMjE2LDYgKzIxOCw4IEBAIGJvb2wgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklU
Q29kZSYgZW50cnkKIAogYm9vbCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZGUm
IGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGVudHJ5V2l0aEFyaXR5Q2hlY2spCiB7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBCYWNrZW5kIik7CisgICAgCiAg
ICAgY29tcGlsZUVudHJ5KCk7CiAKICAgICAvLyA9PT0gRnVuY3Rpb24gaGVhZGVyIGNvZGUgZ2Vu
ZXJhdGlvbiA9PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWRHcmFwaC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZEdyYXBoLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdNaW5pZmllZEdy
YXBoX2gKKyNkZWZpbmUgREZHTWluaWZpZWRHcmFwaF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTWluaWZpZWROb2Rl
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgTWluaWZpZWRHcmFwaCB7CitwdWJsaWM6CisgICAgTWluaWZpZWRHcmFwaCgp
IHsgfQorCisgICAgTWluaWZpZWROb2RlKiBhdChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2xpc3Quc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIE1pbmlmaWVkTm9kZSogZW50cnkgPQorICAgICAgICAgICAgYmluYXJ5U2VhcmNoPE1pbmlm
aWVkTm9kZSwgTm9kZUluZGV4LCBNaW5pZmllZE5vZGU6OmdldEluZGV4PigKKyAgICAgICAgICAg
ICAgICBtX2xpc3QuYmVnaW4oKSwgbV9saXN0LnNpemUoKSwgbm9kZUluZGV4LCBXVEY6OktleU11
c3ROb3RCZVByZXNlbnRJbkFycmF5KTsKKyAgICAgICAgaWYgKGVudHJ5LT5pbmRleCgpICE9IG5v
ZGVJbmRleCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZW50cnk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kKGNvbnN0IE1pbmlmaWVkTm9kZSYgbm9kZSkKKyAg
ICB7CisgICAgICAgIG1fbGlzdC5hcHBlbmQobm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
cHJlcGFyZUFuZFNocmluaygpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9saXN0LmJlZ2lu
KCksIG1fbGlzdC5lbmQoKSwgTWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOworICAg
ICAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRPcmln
aW5hbEdyYXBoU2l6ZShzaXplX3Qgc2l6ZSkgeyBtX3NpemUgPSBzaXplOyB9CisgICAgCisgICAg
c2l6ZV90IG9yaWdpbmFsR3JhcGhTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPE1pbmlmaWVkTm9kZT4gbV9saXN0OworICAgIHNpemVfdCBtX3Np
emU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR01pbmlmaWVkR3JhcGhfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZE5v
ZGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK01pbmlmaWVkTm9kZSBNaW5pZmllZE5v
ZGU6OmZyb21Ob2RlKE5vZGVJbmRleCBub2RlSW5kZXgsIE5vZGUmIG5vZGUpCit7CisgICAgQVNT
RVJUKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobm9kZS5vcCgpKSk7CisgICAgTWluaWZpZWROb2Rl
IHJlc3VsdDsKKyAgICByZXN1bHQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICByZXN1bHQubV9v
cCA9IG5vZGUub3AoKTsKKyAgICBpZiAoaGFzQ2hpbGQobm9kZS5vcCgpKSkKKyAgICAgICAgcmVz
dWx0Lm1fY2hpbGRPckluZm8gPSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CisgICAgZWxzZSBpZiAo
aGFzQ29uc3RhbnROdW1iZXIobm9kZS5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1fY2hpbGRPcklu
Zm8gPSBub2RlLmNvbnN0YW50TnVtYmVyKCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVCho
YXNXZWFrQ29uc3RhbnQobm9kZS5vcCgpKSk7CisgICAgICAgIHJlc3VsdC5tX2NoaWxkT3JJbmZv
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZS53ZWFrQ29uc3RhbnQoKSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R01pbmlmaWVkTm9kZV9oCisjZGVmaW5lIERGR01pbmlmaWVkTm9kZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCisjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgTm9kZTsKKworaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZp
ZWRHcmFwaChOb2RlVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
SlNDb25zdGFudDoKKyAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitjbGFzcyBNaW5pZmllZE5vZGUgeworcHVibGljOgorICAgIE1pbmlmaWVk
Tm9kZSgpIHsgfQorICAgIAorICAgIHN0YXRpYyBNaW5pZmllZE5vZGUgZnJvbU5vZGUoTm9kZUlu
ZGV4LCBOb2RlJik7CisgICAgCisgICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQorICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9vcDsgfQorICAg
IAorICAgIGJvb2wgaGFzQ2hpbGQxKCkgY29uc3QgeyByZXR1cm4gaGFzQ2hpbGQobV9vcCk7IH0K
KyAgICAKKyAgICBOb2RlSW5kZXggY2hpbGQxKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChoYXNDaGlsZChtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJbmZvOworICAgIH0K
KyAgICAKKyAgICBib29sIGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnRO
dW1iZXIoKSB8fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3Rh
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQorICAg
IAorICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7CisgICAgICAgIHJldHVybiBtX2NoaWxkT3JJ
bmZvOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0
dXJuIGhhc1dlYWtDb25zdGFudChtX29wKTsgfQorICAgIAorICAgIEpTQ2VsbCogd2Vha0NvbnN0
YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNXZWFrQ29uc3RhbnQobV9vcCkp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+KG1fY2hpbGRPckluZm8pOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZUluZGV4IGdldEluZGV4KE1pbmlmaWVkTm9kZSog
bm9kZSkgeyByZXR1cm4gbm9kZS0+aW5kZXgoKTsgfQorICAgIHN0YXRpYyBib29sIGNvbXBhcmVC
eU5vZGVJbmRleChjb25zdCBNaW5pZmllZE5vZGUmIGEsIGNvbnN0IE1pbmlmaWVkTm9kZSYgYikK
KyAgICB7CisgICAgICAgIHJldHVybiBhLm1faW5kZXggPCBiLm1faW5kZXg7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBzdGF0aWMgYm9vbCBoYXNDaGlsZChOb2RlVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgor
ICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzdGF0aWMgYm9vbCBoYXNDb25z
dGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0g
SlNDb25zdGFudDsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgaGFzV2Vha0NvbnN0YW50KE5vZGVU
eXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZSA9PSBXZWFrSlNDb25zdGFudDsK
KyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1faW5kZXg7CisgICAgTm9kZVR5cGUgbV9vcDsK
KyAgICB1aW50cHRyX3QgbV9jaGlsZE9ySW5mbzsgLy8gTm9kZXMgaW4gdGhlIG1pbmlmaWVkIGdy
YXBoIGhhdmUgb25seSBvbmUgY2hpbGQgZWFjaC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHTWluaWZp
ZWROb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9u
IDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVj
dHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CkBAIC01NzMsNyArNTc0LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICB9Ci0KKyAgICAKICAgICB2b2lk
IHNldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMz
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1zdGF0aWMgdW5zaWdu
ZWQgY29tcHV0ZU51bVZhcmlhYmxlc0ZvckNvZGVPcmlnaW4oCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCi17Ci0gICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnM7Ci0gICAgcmV0dXJuCi0gICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArCi0gICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2Fs
bEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7
Ci19Ci0KLU9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJl
Y292ZXJ5SW5kZXgpCitPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3Vy
Y2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2Zp
bGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNp
Z25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNWYWx1
ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxl
KQogICAgICwgbV9jaGVjayhjaGVjaykKQEAgLTUyLDI0ICs0MiwxMCBAQCBPU1JFeGl0OjpPU1JF
eGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3Zl
cnlJbmRleCkKICAgICAsIG1fa2luZChraW5kKQogICAgICwgbV9jb3VudCgwKQotICAgICwgbV9h
cmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgLCBtX3ZhcmlhYmxlcyhjb21w
dXRlTnVtVmFyaWFibGVzRm9yQ29kZU9yaWdpbihqaXQtPm1faml0LmdyYXBoKCkubV9wcm9maWxl
ZEJsb2NrLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikpCisgICAgLCBtX3N0cmVhbUluZGV4KHN0
cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQp
CiB7CiAgICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQp
Ci0gICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwotICAgIGZvciAodW5zaWduZWQgdmFy
aWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKLSAg
ICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6ZHVtcChG
SUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQotICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0uZHVtcChvdXQpOwotICAgIGZwcmludGYob3V0LCAiIDogIik7Ci0gICAgZm9y
ICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K3ZhcmlhYmxlKQotICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOwogfQog
CiBib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMTIzMjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCiAj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5j
bHVkZSAiREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXIuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKQEAgLTgzLDcgKzg0LDcgQEAgcHJpdmF0ZToKIC8vIFRoaXMgc3RydWN0
dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29p
bmcgaW50byBiYXNlbGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoRXhp
dEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgg
PSAwKTsKKyAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1
bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwogICAgIAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CiAgICAgCkBAIC05OSwzOCArMTAwLDYg
QEAgc3RydWN0IE9TUkV4aXQgewogICAgIEV4aXRLaW5kIG1fa2luZDsKICAgICB1aW50MzJfdCBt
X2NvdW50OwogICAgIAotICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZh
bHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZwotICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2
ZXJzdXMgdmFyaWFibGUuCi0gICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0
dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQotICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5k
ZXggLSBtX2FyZ3VtZW50cy5zaXplKCldOwotICAgIH0KLSAgICBWYWx1ZVJlY292ZXJ5JiB2YWx1
ZVJlY292ZXJ5Rm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkKLSAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tv
cGVyYW5kVG9Bcmd1bWVudChvcGVyYW5kKV07Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tv
cGVyYW5kXTsKLSAgICB9Ci0gICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQotICAgIGJvb2wgaXNWYXJp
YWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQotICAg
IGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpbmRleDsKLSAgICB9Ci0gICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4KSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwot
ICAgIH0KLSAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50KGluZGV4KTsKLSAgICAgICAgcmV0dXJuIGluZGV4IC0g
bV9hcmd1bWVudHMuc2l6ZSgpOwotICAgIH0KLSAgICAKICAgICBib29sIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2lu
ZElzQ291bnRhYmxlKG1fa2luZCkpCkBAIC0xMzgsMTEgKzEwNywxMCBAQCBzdHJ1Y3QgT1NSRXhp
dCB7CiAgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3co
ZGZnQ29kZUJsb2NrLCBwcm9maWxlZENvZGVCbG9jayk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
ZHVtcChGSUxFKiBvdXQpIGNvbnN0OwotICAgIAotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAw
PiBtX2FyZ3VtZW50czsKLSAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7
CisgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsK
KyAgICAKKyAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlP
dmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDEwICsyOSwxMSBAQAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxV
RTMyXzY0KQogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVj
b3ZlcnkqIHJlY292ZXJ5KQordm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0
IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywg
U3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ1LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIg
LT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwog
ICAgIH0KICAgICBkYXRhTG9nKCIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgbV9qaXQuZGVidWdP
ZmZzZXQoKSk7Ci0gICAgZXhpdC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgZHVtcE9wZXJh
bmRzKG9wZXJhbmRzLCBXVEY6OmRhdGFGaWxlKCkpOwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShW
RVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCiAgICAgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJ
bmZvKiBkZWJ1Z0luZm8gPSBuZXcgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvOwpAQCAtMTEy
LDcgKzExMyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0
aGVyZSBhcmUgYW55IGNvbnN0YW50cywKICAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBh
bnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KICAgICAgICAgICAgIAotICAgIFZl
Y3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXpl
KCkpOworICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMob3BlcmFuZHMu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsraSkKICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW2ldID0gZmFsc2U7CiAKQEAgLTEzMSw4ICsxMzIsOCBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7
CiAgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsK
ICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgY2FzZSBJbnQz
MkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ4LDggKzE0OSw4IEBAIHZvaWQgT1NSRXhp
dENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0
aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAg
ICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1p
emVkIGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhh
cHBlbi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQp
ZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQu
bV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRz
Lm51bWJlck9mTG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxv
Y2FsKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CkBAIC0yMDcsMTkg
KzIwOCwxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ly8gNSkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMgYW5kIGNlbGxzLCBleGNlcHQg
Zm9yIHRob3NlIGluIHJlZ2lzdGVycy4KIAogICAgIGlmIChoYXZlVW5ib3hlZEludDMySW5SZWdp
c3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRDZWxsSW5SZWdpc3RlckZpbGUgfHwgaGF2ZVVuYm94ZWRC
b29sZWFuSW5SZWdpc3RlckZpbGUpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsg
KytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBv
cGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMy
OgotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZENlbGw6Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJz
Ojp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIEFs
cmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVy
PihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFn
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMjMyLDE5ICsyMzMsMTkgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJz
IGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhw
ZWN0IHRoYXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQg
bGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFs
aXplUG9pc29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lz
b25lZChvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9p
c29uSW5kZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5J
bkdQUjoKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAg
ICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJl
Z2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LmdwcigpLCByZWludGVycHJldF9jYXN0PGNoYXIq
PihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihF
bmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAgICAg
IG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBj
dXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNl
c1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7
CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFsdWVU
YWc7CkBAIC0yNTksMTAgKzI2MCwxMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJblBhaXI6Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAg
ICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkucGF5bG9hZEdQUigpLCByZWludGVycHJldF9jYXN0
PGNoYXIqPihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAg
ICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNo
SW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29u
SW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkudGFnR1BS
KCksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOwpA
QCAtMjg0LDcgKzI4NSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
cmVjb3ZlcnkuZ3ByKCksIEZQUkluZm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYWRk
RG91YmxlKEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBGUFJJbmZvOjpmcFJlZ1QwKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSwgYWRk
cmVzc0dQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6ZnBS
ZWdUMCwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTI5NCw3ICsyOTUsNyBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAgICAgICBpZiAob3Bl
cmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJh
bmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZm
ZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMDgsOCArMzA5LDggQEAgdm9pZCBPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRy
ZXNzR1BSLCBGUFJJbmZvOjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIobXlT
Y3JhdGNoLCBhZGRyZXNzR1BSKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7Ci0gICAgICAgICAgICAgICAg
bV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1
cnJlbnRQb2lzb25JbmRleDsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGlu
ZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRl
eChpbmRleCldKSB7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVy
YW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAg
ICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTMyMiwxNiArMzIzLDE2IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAvLyA3KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYgdGhlCiAgICAgLy8gICAg
ZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KICAgICBpZiAoaGF2ZUZQ
UnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAm
JiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0p
IHsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIHNjcmF0Y2hC
dWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2Ny
YXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29u
SW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52
YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAg
ICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNvdmVyeS5mcHIoKSwgQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTM0OSw4ICsz
NTAsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAg
ICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRlZWQuCiAgICAgICAgIAogICAgICAgICAg
ICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwotICAgICAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFs
dWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQz
MihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
LCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKQEAgLTM3NCwxNSAr
Mzc1LDE1IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2lu
ZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAg
ICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDZWxsRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5k
ZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6
dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVu
dEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDA3LDggKzQwOCw4
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
IC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgogICAgICAgICAKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CkBAIC00MjksMzAg
KzQzMCwzMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgpICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6
cmVnVDApOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZyksIEdQUkluZm86OnJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVn
VDEsIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BS
SW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hJbmRleCsrOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3Jh
dGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKykgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6
dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5
SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRh
Z0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hCdWZmZXIg
KyBzY3JhdGNoSW5kZXgrKykgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnBheWxvYWQpLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJh
bmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTQ2NiwxMSArNDY3LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFs
IHJlZ2lzdGVycy4KICAgICAKICAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMpIHsKLSAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lz
dGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsK
KyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwg
KGludClvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK3ZpcnR1YWxSZWdpc3RlcikgewogICAg
ICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1YWxSZWdp
c3Rlcl07CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzLmxvY2FsKHZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluR1BSOgogICAgICAgICAgICAgY2Fz
ZSBVbmJveGVkSW50MzJJbkdQUjoKQEAgLTUxMiwxNiArNTEzLDE2IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoanNVbmRlZmluZWQoKS50YWcoKSksIEdQUkluZm86OnJl
Z1QxKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
IT0gQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAo
cmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdG
b3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6
OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3Rh
bnQoKS5wYXlsb2FkKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50
KCkudGFnKCkpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS5wYXlsb2Fk
KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5k
cy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnRhZygp
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVy
YW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSwxMSBA
QAogI2lmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0KQogCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNv
bnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQordm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiBvcGVyYW5kcywgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKQEAgLTQ0LDcgKzQ1LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICBkYXRhTG9nKCIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgIH0KICAgICBkYXRhTG9nKCIpICAi
KTsKLSAgICBleGl0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkdW1wT3BlcmFuZHMob3Bl
cmFuZHMsIFdURjo6ZGF0YUZpbGUoKSk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0Vf
U1BFQ1VMQVRJT05fRkFJTFVSRSkKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRl
YnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CkBAIC0xMTAsNyArMTEx
LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAg
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRoZXJlIGFy
ZSBhbnkgY29uc3RhbnRzLAogICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIg
c2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgogICAgICAgICAgICAgCi0gICAgVmVjdG9yPGJv
b2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7Cisg
ICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5udW1iZXJP
ZkxvY2FscygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
aV0gPSBmYWxzZTsKIApAQCAtMTI4LDggKzEyOSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKICAgICBi
b29sIGhhdmVVSW50MzJzID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tp
bmRleF07CiAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICBjYXNlIERvdWJsZURp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlOgpAQCAtMTQ0LDggKzE0NSw4IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGlz
IGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCiAgICAg
ICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1pemVk
IGZvciB0aGUgY2FzZXMgaW4KICAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhhcHBl
bi4KLSAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpZXhp
dC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQubV92
YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KW9wZXJhbmRzLm51
bWJlck9mTG9jYWxzKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRzLmxvY2Fs
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
ICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMkluR1BSOgpAQCAtMjE4LDggKzIxOSw4IEBAIHZv
aWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyA1KSBQZXJmb3Jt
IGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KICAgICAKICAgICBpZiAoaGF2ZVVuYm94ZWRJbnQz
MnMgfHwgaGF2ZVVJbnQzMnMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8
IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCkBAIC0yMjcsNyArMjI4LDcgQEAgdm9p
ZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3Rl
ckZpbGVBc1VuYm94ZWRJbnQzMjoKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90PihUYWdUeXBlTnVt
YmVyID4+IDMyKSksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIpKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5k
ZXgpKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgY2FzZSBVSW50MzJJbkdQUjogewpAQCAtMjc4LDE5ICsyNzksMTkgQEAgdm9pZCBPU1JF
eGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vICAgIE5vdGUgdGhhdCBHUFJz
IGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhw
ZWN0IHRoYXQKICAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQg
bGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KICAgICAKLSAgICBpbml0aWFs
aXplUG9pc29uZWQoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGluaXRpYWxpemVQb2lz
b25lZChvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpKTsKICAgICB1bnNpZ25lZCBjdXJyZW50UG9p
c29uSW5kZXggPSAwOwogICAgIAotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKLSAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKKyAgICAgICAg
aW50IG9wZXJhbmQgPSBvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgIGNhc2UgVUludDMySW5HUFI6Ci0g
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
b3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29u
SW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAg
ICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbklu
ZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZWNvdmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpb3BlcmFuZCkpOwpAQCAtMzA1LDggKzMwNiw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICBpZiAoaGF2ZUZQUnMpIHsKICAgICAgICAgLy8gNykg
Qm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBS
cykKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51
bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5k
ZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5
LmZwcigpOwpAQCAtMzE3LDE3ICszMTgsMTcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJl
Z2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKICAgICAgICAgLy8gICAg
dGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCiAgICAgICAgIAot
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQ
UkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUo
aW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0
Y2hCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fcG9pc29u
U2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9p
c29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5k
cy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAg
ICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMzM1LDEzICszMzYsMTMgQEAgdm9pZCBPU1JFeGl0Q29t
cGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAgIC8vIDkpIEJveCBhbGwgdW5ib3hl
ZCBkb3VibGVzIGluIHRoZSByZWdpc3RlciBmaWxlLgogICAgIGlmIChoYXZlVW5ib3hlZERvdWJs
ZXMpIHsKLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkRG91YmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZvOjpmcFJlZ1QwKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSksIEZQUklu
Zm86OmZwUmVnVDApOwogICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVn
VDAsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86
OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC0zNTcsOCArMzU4LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgogICAg
ICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKLSAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhd
OwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgr
KykpOwpAQCAtMzg0LDEzICszODUsMTMgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAgIGRpc3BsYWNl
bWVudEluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
ICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3Bs
YWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3Bl
cmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTQxNiw4ICs0MTcs
OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KICAgICAgICAgCiAgICAgICAg
ICAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyczsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3Bl
cmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOgpAQCAtNDQ1LDE0ICs0NDYsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgICAg
IHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAg
ICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00
NjcsMTEgKzQ2OCwxMSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgLy8gMTEpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgogICAgIAog
ICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAgICAgICBmb3Ig
KGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92
YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBmb3IgKGludCB2
aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KW9wZXJhbmRzLm51bWJl
ck9mTG9jYWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CiAgICAgICAgICAgICBpZiAoIXBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwodmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAg
ICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgpAQCAtNDk0LDE0ICs0OTUsMTQgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKICAgICAgICAgICAgIG1faml0Lm1v
dmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0g
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292
ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShyZWNvdmVyeS5jb25zdGFudCgpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgs
NiArMzgsOCBAQCBleHRlcm4gIkMiIHsKIAogdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUq
IGV4ZWMpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBPU1IgRXhp
dCBDb21waWxhdGlvbiIpOworICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CkBAIC02MywxOSArNjUs
MjkgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAt
PmppdENvbXBpbGUoKmdsb2JhbERhdGEpOwogICAgIH0KICAgICAKKyAgICAvLyBDb21wdXRlIHRo
ZSB2YWx1ZSByZWNvdmVyaWVzLgorICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9wZXJhbmRz
OworICAgIGNvZGVCbG9jay0+dmFyaWFibGVFdmVudFN0cmVhbSgpLnJlY29uc3RydWN0KGNvZGVC
bG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGNvZGVCbG9jay0+bWluaWZpZWRERkcoKSwgZXhpdC5t
X3N0cmVhbUluZGV4LCBvcGVyYW5kcyk7CisgICAgCisgICAgLy8gVGhlcmUgbWF5IGJlIGFuIG92
ZXJyaWRlLCBmb3IgZm9yd2FyZCBzcGVjdWxhdGlvbnMuCisgICAgaWYgKCEhZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZSkgeworICAgICAgICBvcGVyYW5kcy5zZXRPcGVyYW5kKAorICAgICAg
ICAgICAgZXhpdC5tX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZS0+b3BlcmFuZCwgZXhpdC5tX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS0+cmVjb3ZlcnkpOworICAgIH0KKyAgICAKICAgICBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSA9IDA7CiAgICAgaWYgKGV4aXQubV9yZWNvdmVyeUluZGV4KQog
ICAgICAgICByZWNvdmVyeSA9ICZjb2RlQmxvY2stPnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5t
X3JlY292ZXJ5SW5kZXggLSAxKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZvciBj
b2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgY29k
ZUJsb2NrKTsKKyAgICBkYXRhTG9nKCJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoc2VxIyV1LCBi
YyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGV4aXQubV9z
dHJlYW1JbmRleCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgZXhpdC5tX25vZGVJ
bmRleCwgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIGNvZGVCbG9jayk7CiAjZW5kaWYK
IAogICAgIHsKICAgICAgICAgQXNzZW1ibHlIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOwogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAgICAgICAg
IAotICAgICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgcmVjb3ZlcnkpOworICAg
ICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgb3BlcmFuZHMsIHJlY292ZXJ5KTsK
ICAgICAgICAgCiAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZq
aXQsIGNvZGVCbG9jayk7CiAgICAgICAgIGV4aXQubV9jb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmgJKHJldmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
cHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlRXhpdChjb25zdCBP
U1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAgIHZvaWQgY29tcGlsZUV4aXQoY29u
c3QgT1NSRXhpdCYsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JiwgU3BlY3VsYXRpb25S
ZWNvdmVyeSopOwogCiBwcml2YXRlOgogI2lmICFBU1NFUlRfRElTQUJMRUQKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODE3LDYgKzgxNyw3IEBAIHByaXZhdGU6CiAgICAgCiB2b2lkIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgUHJlZGljdGlvbiBQcm9wYWdhdGlvbiBQaGFzZSIpOwogICAgIHJ1blBoYXNl
PFByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVkdW5kYW50UGhpRWxpbWluYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAKIHZvaWQgcGVyZm9ybVJlZHVuZGFudFBo
aUVsaW1pbmF0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFJlZHVuZGFudCBQaGkgRWxpbWluYXRpb24gUGhhc2UiKTsKICAgICBydW5Q
aGFzZTxSZWR1bmRhbnRQaGlFbGltaW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTEyMzI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgaW5m
by5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTkwLDcgKzkw
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICBt
X2dwcnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BS
KTsKICAgICAgICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJJbnRlZ2VyKTsKLSAgICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsK
KyAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxv
YWRHUFI7CiAgICAgfQpAQCAtMTIyLDEzICsxMjIsMTMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0
ZSgpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkp
IHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRl
eCksIGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91Ymxl
KGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDEsNyAr
MTQxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
ZnByKTsKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVy
LCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQogCkBAIC0xNjEsNyArMTYx
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAg
ICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJs
ZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjA2LDcgKzIwNiw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJs
ZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMu
dW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7
CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8u
a2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNTEsNyArMjUx
LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnBheWxvYWQo
KSksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRh
aW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25z
dGFudChub2RlSW5kZXgpID8gRGF0YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BS
LCBpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGls
bEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFn
ZSk7CkBAIC0yNzcsNyArMjc3LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUo
Tm9kZUluZAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KHZpcnR1YWxSZWdpc3RlciksIHBheWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BS
LCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9ybWF0SlMgOiBzcGls
bEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BS
LCBwYXlsb2FkR1BSLCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9y
bWF0SlMgOiBzcGlsbEZvcm1hdCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMxOSw3ICszMTksNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2Rl
SW5kCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
dGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CisgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxG
b3JtYXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNCw3ICszMzQsNyBA
QCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgIG1fZnBy
cy5yZWxlYXNlKG9sZEZQUik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQ
UiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xMDA0LDcgKzEwMDQsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsK
LSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0
YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC0x
MDE5LDcgKzEwMTksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAg
bV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwot
ICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIo
Km1fc3RyZWFtLCBncHIpOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdl
cjsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xMDM3LDcgKzEwMzcsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIG1fZ3Bycy5yZWxl
YXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAg
ICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlcklu
dGVnZXIpOwotICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOworICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIC8vIElmICFz
dHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CkBAIC0xMDk4LDEzICsxMDk4
LDEzIEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgp
KSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVn
ZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChub2RlSW5kZXgpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnBy
OwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC0xMTE1LDcgKzExMTUsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnBy
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBp
bmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9
CiAKQEAgLTExMzcsNyArMTEzNyw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
IAogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgcmV0dXJu
IGZwcjsKICAgICAgICAgfQogICAgIH0KQEAgLTExNzMsNyArMTE3Myw3IEBAIEZQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdH
UFIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICB9CkBAIC0xMjMwLDcgKzEyMzAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25z
dGFudCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGpzVmFsdWUuYXNDZWxsKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQ2VsbChn
cHIpOworICAgICAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEyNDAsNyArMTI0MCw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbENlbGwo
Z3ByKTsKKyAgICAgICAgaW5mby5maWxsQ2VsbCgqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQogCkBAIC0xMjYyLDcgKzEyNjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7
CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMucmV0
YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNlbGwpOwotICAgICAg
ICBpbmZvLmZpbGxDZWxsKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0
cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2FkR1BSOwogICAgIH0KIApA
QCAtMTMwMyw3ICsxMzAzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwog
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKGpzVmFs
dWUuYXNCb29sZWFuKCkpLCBncHIpOwotICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIp
OworICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAKQEAgLTEzMTUsNyArMTMxNSw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9
IGFsbG9jYXRlKCk7CiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgIGluZm8uZmlsbEJvb2xl
YW4oZ3ByKTsKKyAgICAgICAgaW5mby5maWxsQm9vbGVhbigqbV9zdHJlYW0sIGdwcik7CiAgICAg
ICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRh
Z0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dw
cnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckJvb2xlYW4p
OwotICAgICAgICBpbmZvLmZpbGxCb29sZWFuKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZp
bGxCb29sZWFuKCptX3N0cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIHJldHVybiBwYXlsb2Fk
R1BSOwogICAgIH0KIApAQCAtMTc1NCw3ICsxNzU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQn
cyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgogICAgICAgICAg
ICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIg
bG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLAogICAgICAgICAgICAgICAgIC8vIGJ1dCB0
aGF0IGl0IGlzIHN0b3JlZCBhcyBhIGRvdWJsZS4KLSAgICAgICAgICAgICAgICB2YWx1ZVNvdXJj
ZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKERvdWJsZUlu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rl
ZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CkBAIC0xNzYy
LDE0ICsxNzYyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgICAgICBEb3VibGVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHZhbHVlLmZwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VG
b3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNv
dXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5n
cHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2Nh
bCgpLCBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKQEAgLTE3NzksNyArMTc3OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZKU0FycmF5OjpzX2luZm8pKSk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
bm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxv
Y2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAg
ICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVy
RmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTc4OSwx
NCArMTc4OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIs
IEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihjZWxsR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShD
ZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUu
bG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5P
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwo
KSkpOwogICAgICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
ICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3Jk
U2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTgwNCw3ICsxODA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnBheWxvYWRHUFIoKSwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUu
dGFnR1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JP
cGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsK
KyAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShWYWx1ZUlu
UmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxMTIzMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEludGVnZXIoTm9kZUkKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3By
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGdwcik7CisgICAgICAgICAgICAg
ICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICAgICAgICAgIH0KQEAgLTczLDcgKzczLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICAvLyBTaW5jZSB3ZSBzdGF0aWNhbGx5IGtub3cg
dGhhdCB3ZSdyZSBmaWxsaW5nIGFuIGludGVnZXIsIGFuZCB2YWx1ZXMKICAgICAgICAgLy8gaW4g
dGhlIFJlZ2lzdGVyRmlsZSBhcmUgYm94ZWQsIHRoaXMgbXVzdCBiZSBEYXRhRm9ybWF0SlNJbnRl
Z2VyLgogICAgICAgICAvLyBXZSB3aWxsIGNoZWNrIHRoaXMgd2l0aCBhIGppdEFzc2VydCBiZWxv
dy4KLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwor
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRl
Z2VyKTsKICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgfQogCkBAIC0xMjYsNyArMTI2LDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbElu
dGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwg
Z3ByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXNOdW1iZXJDb25zdGFudChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVn
IGZwciA9IGZwckFsbG9jYXRlKCk7CkBAIC0xMzUsNyArMTM1LDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwog
CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7Cisg
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDMsNyArMTQzLDcgQEAg
RlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
ICAgICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAg
LTE1Myw3ICsxNTMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUlu
CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZw
cik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTE2Miw3ICsxNjIsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxE
b3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICB1bmxvY2soZ3ByKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTE3Myw3ICsxNzMsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9k
ZUluCiAgICAgICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsK
ICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
MjE1LDcgKzIxNSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4K
ICAgICAgICAgbV9ncHJzLnVubG9jayhqc1ZhbHVlR3ByKTsKICAgICAgICAgbV9ncHJzLnVubG9j
ayh0ZW1wR3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAg
ICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICBpbmZvLmtpbGxTcGls
bGVkKCk7CiAgICAgICAgIHJldHVybiBmcHI7CiAgICAgfQpAQCAtMjQ2LDcgKzI0Niw3IEBAIEZQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgbV9ncHJzLnJl
bGVhc2UoZ3ByKTsKICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckRvdWJsZSk7CiAKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAg
ICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIHJldHVybiBmcHI7
CiAgICAgfQogCkBAIC0yNzMsMTggKzI3MywxOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxKU1ZhbHVlKE5vZGVJCiAKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3RhbnQoKSkgewogICAg
ICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVn
ZXIpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGpzTnVtYmVyKHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlNEb3VibGUpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZShKU1ZhbHVlOjpFbmNv
ZGVBc0RvdWJsZSwgdmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNKU0NvbnN0YW50KG5vZGVJbmRleCkpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fZ3By
cy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC0z
MDQsNyArMzA0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gZ3ByOwogICAgIH0KQEAgLTMyMCw3ICszMjAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAgIH0KICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsK
ICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBncHIp
OwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7Cisg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVn
ZXIpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMzI5LDcgKzMyOSw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUkKICAgICAgICAgR1BSUmVnIGdw
ciA9IGJveERvdWJsZShmcHIpOwogCiAgICAgICAgIC8vIFVwZGF0ZSBhbGwgaW5mbwotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKKyAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAg
ICAgbV9mcHJzLnJlbGVhc2UoZnByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKIApAQCAtMTAxNiw3ICsxMDE2LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgbV9ncHJzLnJl
dGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAg
ICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5k
ZXgpKSwgZ3ByKTsKLSAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJu
Rm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAg
ICAgICB9CkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNwaWxsZWQg
YXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgogICAgICAgICAgICAg
aWYgKHN0cmljdCkgewogICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAgICAgICAgICAgICAgIGluZm8u
ZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50
ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQpAQCAtMTA0
MCwxNCArMTA0MCwxNCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBncHIpOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwotICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOworICAg
ICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SlNJbnRlZ2VyOwog
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKICAgICAg
ICAgLy8gRmlsbCBhcyBKU1ZhbHVlLCBhbmQgZmFsbCB0aHJvdWdoLgotICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICBtX2dw
cnMudW5sb2NrKGdwcik7CiAgICAgfQogCkBAIC0xMDU2LDcgKzEwNTYsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZv
LmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIp
OworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJ
bnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAg
ICAgIGlmICghc3RyaWN0KSB7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0
SlNJbnRlZ2VyOwpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBn
cHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihn
cHIsIHJlc3VsdCk7CkBAIC0xMTU4LDcgKzExNTgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAg
ICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNOdW1iZXJDb25z
dGFudChub2RlSW5kZXgpKSB7CkBAIC0xMTY4LDcgKzExNjgsNyBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAK
ICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAg
ICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
QEAgLTExODEsNyArMTE4MSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBmcHIpOwogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsK
KyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgICAg
ICByZXR1cm4gZnByOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTExOTAsNyArMTE5MCw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxP
cmRlclNwaWxsZWQpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxJbnRl
Z2VyKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsK
ICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTEyMDEsNyArMTIwMSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZURvdWIKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CiAg
ICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
U3BpbGxlZCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJl
YW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI0Myw3ICsxMjQzLDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2dwcnMudW5sb2NrKGpzVmFs
dWVHcHIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwogICAgICAgICBtX2ZwcnMu
cmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAg
aW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0s
IGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICB9CkBAIC0xMjc0LDcgKzEyNzQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZnBy
cy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwogCi0gICAg
ICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KIApAQCAtMTMxMiw3ICsxMzEy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAg
ICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5hc0Nl
bGwoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0NlbGwpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFt
LCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzMjIsMTAgKzEzMjIsMTAg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSwgZ3ByKTsKIAotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsK
ICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3By
LCBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBA
IC0xMzQwLDcgKzEzNDAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9j
ayhncHIpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCpt
X3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICB9CiAKQEAgLTEzODUsNyArMTM4NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAg
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzOTUsMTMgKzEzOTUsMTMgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAotICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxs
SlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
Z3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3Vs
YXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVn
KSk7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQotICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KIApAQCAtMTQxOCw3ICsxNDE4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0xODQ2LDcgKzE4NDYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gSW5k
aWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVl
IG9mCiAgICAgICAgICAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lz
dGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsCiAgICAgICAgICAg
ICAgICAgLy8gYnV0IHRoYXQgaXQgaXMgc3RvcmVkIGFzIGEgZG91YmxlLgotICAgICAgICAgICAg
ICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVT
b3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExv
Y2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgCkBAIC0xODU1LDcg
KzE4NTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZS5ncHIoKSwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgpLCBWYWx1ZVNv
dXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKQEAgLTE4NjUsNyArMTg2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiwg
SlNDZWxsOjpjbGFzc0luZm9PZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KCZKU0FycmF5OjpzX2luZm8pKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2Vs
bEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQ2VsbElu
UmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg3NSwxNCArMTg3NSwxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6Y2xhc3NJbmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmSlNCeXRlQXJyYXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29y
ZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
aXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIGJvb2xlYW4odGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoYm9vbGVhbi5ncHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKTsKKyAg
ICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEJv
b2xlYW5JblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xODkxLDcgKzE4OTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogCi0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3Bl
cmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMTIz
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMjIgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCitTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXIm
IGppdCkKKyAgICA6IG1fY29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1faml0KGppdCkKKyAgICAs
IG1fY29tcGlsZUluZGV4KDApCisgICAgLCBtX2luZGV4SW5CbG9jaygwKQorICAgICwgbV9nZW5l
cmF0aW9uSW5mbyhtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCisgICAg
LCBtX2Jsb2NrSGVhZHMoaml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpKQorICAgICwgbV9hcmd1
bWVudHMoaml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpCisgICAgLCBtX3ZhcmlhYmxl
cyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fc3RhdGUoaml0LmdyYXBoKCkpCisg
ICAgLCBtX3N0cmVhbSgmaml0LmNvZGVCbG9jaygpLT52YXJpYWJsZUV2ZW50U3RyZWFtKCkpCisg
ICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5jb2RlQmxvY2soKS0+bWluaWZpZWRERkcoKSkKK3sK
K30KKwogLy8gT24gV2luZG93cyB3ZSBuZWVkIHRvIHdyYXAgZm1vZDsgb24gb3RoZXIgcGxhdGZv
cm1zIHdlIGNhbiBjYWxsIGl0IGRpcmVjdGx5LgogLy8gT24gQVJNdjcgd2UgYXNzZXJ0IHRoYXQg
YWxsIGZ1bmN0aW9uIHBvaW50ZXJzIGhhdmUgdG8gbG93IGJpdCBzZXQgKHBvaW50IHRvIHRodW1i
IGNvZGUpLgogI2lmIENBTExJTkdfQ09OVkVOVElPTl9JU19TVERDQUxMIHx8IENQVShBUk1fVEhV
TUIyKQpAQCAtNjQsNyArODAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdl
KE5vZGVJCiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdFN0
b3JhZ2UpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGls
bE9yZGVyU3BpbGxlZCk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKLSAgICAgICAgaW5mby5maWxsU3RvcmFnZShn
cHIpOworICAgICAgICBpbmZvLmZpbGxTdG9yYWdlKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICB9CiAgICAgICAgIApAQCAtNzQzLDMzICs3NTksNiBAQCBGUFJUZW1w
b3Jhcnk6OkZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJCiB9CiAjZW5kaWYKIAotdm9pZCBWYWx1
ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChraW5kKCkpIHsK
LSAgICBjYXNlIFNvdXJjZU5vdFNldDoKLSAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgotICAgICAgICBm
cHJpbnRmKG91dCwgIkluUmVnRmlsZSIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludDMy
SW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiQ2VsbCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmls
ZToKLSAgICAgICAgZnByaW50ZihvdXQsICJCb29sIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSGF2ZU5vZGU6Ci0gICAgICAgIGZwcmludGYob3V0
LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5v
ZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5k
ZXgpOwpAQCAtODgzLDEyICs4NzIsMzAgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlQnJhbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
bm90aWNlT1NSQmlydGgoTm9kZUluZGV4IG5vZGVJbmRleCwgTm9kZSYgbm9kZSkKK3sKKyAgICBp
ZiAoIW5vZGUuaGFzVmlydHVhbFJlZ2lzdGVyKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIo
KTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJl
Z2lzdGVyXTsKKyAgICAKKyAgICBpbmZvLm5vdGljZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZUlu
ZGV4LCB2aXJ0dWFsUmVnaXN0ZXIpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TW92SGludChOb2RlJiBub2RlKQogewogICAgIEFTU0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwp
OwogICAgIAotICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7Cisg
ICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChub2RlLmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JC
aXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCksIGNoaWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQu
b3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAgICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hp
bGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hpbGQxKCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+
YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1vdkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgp
LCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJiBibG9jaykKQEAgLTkwMiwxNCArOTA5LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdfRU5BQkxFKEpJVF9CUkVBS19PTl9FVkVSWV9C
TE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKKyAgICAKKyNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxv
Y2sgIyV1OiAiLCBtX2Jsb2NrKTsKKyNlbmRpZgorICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmRB
bmRMb2coVmFyaWFibGVFdmVudDo6cmVzZXQoKSk7CiAKICAgICBBU1NFUlQobV9hcmd1bWVudHMu
c2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQo
aSk7CisgICAgICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlOwogICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSB8fCBtX2ppdC5ncmFwaCgpLmFyZ3VtZW50SXNDYXB0dXJlZChpKSkKLSAg
ICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3Rl
ckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVl
U291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlOjpm
b3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSk7CisgICAgICAgIG1fYXJndW1lbnRzW2ldID0gdmFsdWVTb3VyY2U7CisgICAgICAgIG1f
c3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9jYWwoYXJndW1lbnRUb09w
ZXJhbmQoaSksIHZhbHVlU291cmNlLmRhdGFGb3JtYXQoKSkpOwogICAgIH0KICAgICAKICAgICBt
X3N0YXRlLnJlc2V0KCk7CkBAIC05MTgsMTIgKzkzNCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBi
bG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOworICAgICAgICBWYWx1
ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUgfHwg
bV9qaXQuZ3JhcGgoKS5sb2NhbElzQ2FwdHVyZWQoaSkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxl
c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgdmFs
dWVTb3VyY2UgPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxz
ZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKERvdWJs
ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Zhcmlh
Ymxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9
IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKSk7CisgICAgICAgIG1fdmFyaWFibGVzW2ldID0gdmFsdWVTb3Vy
Y2U7CisgICAgICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6c2V0TG9j
YWwoaSwgdmFsdWVTb3VyY2UuZGF0YUZvcm1hdCgpKSk7CiAgICAgfQogICAgIAogICAgIG1fbGFz
dFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwpAQCAtOTM2LDYg
Kzk1NSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAg
ICAgIHZlcmlmaWNhdGlvblN1Y2NlZWRlZC5saW5rKCZtX2ppdCk7CiAgICAgfQogCisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIGRhdGFMb2coIlxuIik7CisjZW5kaWYKKwogICAg
IGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLnNpemUoKTsg
KyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrW21faW5k
ZXhJbkJsb2NrXTsKICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsKQEAg
LTk0NSw2ICs5NjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JgogICAgICAgICAgICAgZGF0YUxvZygiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQg
KGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRp
ZgogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAg
ICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZpZWROb2RlOjpmcm9tTm9kZShtX2NvbXBp
bGVJbmRleCwgbm9kZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICBjb21waWxlTW92
SGludChub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk4OCw2ICsxMDE2LDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChi
ZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUub3AoKSkpIHsKKyAgICAgICAgICAgICAgICBtX21p
bmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY29tcGlsZUluZGV4
LCBub2RlKSk7CisgICAgICAgICAgICAgICAgbm90aWNlT1NSQmlydGgobV9jb21waWxlSW5kZXgs
IG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQogICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKICAgICAgICAg
ICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV07CkBAIC0xMDA4LDE2ICsxMDQxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCi0jaWYg
REZHX0VOQUJMRShWRVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMpCi0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihhcmd1bWVudFRvT3BlcmFuZChpKSkuZHVtcChzdGRlcnIpOwotICAg
ICAgICAKLSAgICAgICAgZGF0YUxvZygiIDogIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGlu
dCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJh
bmQpCi0gICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0
ZGVycik7Ci0jZW5kaWYKLQogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAg
ZGF0YUxvZygiXG4iKTsKICNlbmRpZgpAQCAtMTI1NCwxMzYgKzEyNzcsMTQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6bGlua09TUkVudHJpZXMoTGluawogCiBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0
aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVT
b3VyY2UpCiB7Ci0gICAgc3dpdGNoICh2YWx1ZVNvdXJjZS5raW5kKCkpIHsKLSAgICBjYXNlIFZh
bHVlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5
SW5SZWdpc3RlckZpbGUoKTsKLSAgICAgICAgCi0gICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxl
OgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNV
bmJveGVkSW50MzIoKTsKLQotICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgotICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgp
OwotCi0gICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7Ci0gICAg
ICAgIAotICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3VibGUoKTsKLQotICAg
IGNhc2UgSGF2ZU5vZGU6IHsKLSAgICAgICAgaWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9k
ZUluZGV4KCkpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KHZh
bHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgCi0gICAgICAg
IE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpOwotICAgICAgICBp
ZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgIC8vIEl0J3MgbGVn
aXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9y
IG9wZXJhbmQsCi0gICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1h
a2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1IuCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAg
ICAgR2VuZXJhdGlvbkluZm8qIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKV07Ci0gICAgICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZv
UHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewotICAgICAgICAg
ICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxk
IGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCi0gICAgICAgICAgICAvLyBUaGVyZSBhcmUgZm91
ciBwb3NzaWJpbGl0aWVzOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEludDMyVG9E
b3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgbm9kZSwgYnV0
Ci0gICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVzZSBpdCBvbmx5IGlm
IGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZwotICAgICAgICAgICAgLy8gICAgbGl2ZSB2ZXJzaW9u
LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogSWYgdGhlIG9u
bHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgICAgIC8v
ICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2Yg
dGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKLSAgICAgICAgICAgIC8vICAgIHRoZW4gdGhl
IG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVybHkgZm9ybWVk
IG51bWJlcgotICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRp
YXRlLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBh
Ym92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKLSAgICAg
ICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQg
dGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKLSAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIg
d291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KLSAgICAgICAgCi0gICAg
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKG5v
ZGVQdHItPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsKLSAgICAgICAgICAgICAg
ICBub2RlUHRyID0gJmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZt
X2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2Rl
SW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9k
ZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUlu
ZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3Rl
ciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgewotICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGluZm8ubm9kZUluZGV4KCkgPT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChpbmZvLm5vZGVJbmRl
eCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0g
dmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW50
MzJUb0RvdWJsZUluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IFVJbnQzMlRvTnVtYmVyOgotICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOwotICAgICAgICAg
ICAgICAgIGlmIChpbnQzMlRvRG91YmxlSW5kZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXhUb1VzZSA9IGludDMyVG9Eb3VibGVJbmRleDsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAodWludDMyVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gTm9Ob2RlOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkg
ewotICAgICAgICAgICAgICAgICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleFRvVXNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZp
cnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFs
aXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOwotICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmICghZm91bmQpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9
CisgICAgaWYgKHZhbHVlU291cmNlLmlzSW5SZWdpc3RlckZpbGUoKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlU291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKICAgICAKLSAgICAgICAgQVNTRVJUKGluZm9Q
dHItPmFsaXZlKCkpOwotCi0gICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICE9
IERhdGFGb3JtYXROb25lKSB7Ci0gICAgICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQotICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKQot
ICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mb1B0ci0+dGFn
R1BSKCksIGluZm9QdHItPnBheWxvYWRHUFIoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJG
b3JtYXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdE5vbmUpCi0gICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRy
LT52aXJ0dWFsUmVnaXN0ZXIoKSksIGluZm9QdHItPnNwaWxsRm9ybWF0KCkpOworICAgIEFTU0VS
VCh2YWx1ZVNvdXJjZS5raW5kKCkgPT0gSGF2ZU5vZGUpOworICAgIGlmIChpc0NvbnN0YW50KHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CiAgICAg
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeSgpOwotICAgIH0KLSAgICAgICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQorICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRDaGFyQ29kZUF0KE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTIzMjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYgKzI2LDggQEAKICNpZm5kZWYgREZHU3BlY3VsYXRpdmVKSVRfaAogI2RlZmluZSBERkdTcGVj
dWxhdGl2ZUpJVF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgpAQCAtMzMsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgog
I2luY2x1ZGUgIk1hcmtlZEFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIK
IApAQCAtNDYsODUgKzQ5LDYgQEAgY2xhc3MgU3BlY3VsYXRlRG91YmxlT3BlcmFuZDsKIGNsYXNz
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kOwogY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAK
LQotZW51bSBWYWx1ZVNvdXJjZUtpbmQgewotICAgIFNvdXJjZU5vdFNldCwKLSAgICBWYWx1ZUlu
UmVnaXN0ZXJGaWxlLAotICAgIEludDMySW5SZWdpc3RlckZpbGUsCi0gICAgQ2VsbEluUmVnaXN0
ZXJGaWxlLAotICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwKLSAgICBEb3VibGVJblJlZ2lzdGVy
RmlsZSwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xhc3MgVmFsdWVTb3VyY2UgewotcHVibGljOgot
ICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2lu
ZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291cmNlS2luZCkKLSAgICAgICAgOiBtX25vZGVJ
bmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNvdXJjZUtpbmQpKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQpOwotICAgICAgICBBU1NFUlQoa2luZCgpICE9
IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFZhbHVlU291cmNlIGZvclByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQot
ICAgIHsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOwotICAgICAgICBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikgfHwgaXNCeXRlQXJyYXlQcmVkaWN0aW9u
KHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lz
dGVyRmlsZSk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQot
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JblJlZ2lzdGVyRmlsZSk7Ci0g
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc1NldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4ga2luZEZy
b21Ob2RlSW5kZXgobV9ub2RlSW5kZXgpICE9IFNvdXJjZU5vdFNldDsKLSAgICB9Ci0gICAgCi0g
ICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtp
bmRGcm9tTm9kZUluZGV4KG1fbm9kZUluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUluZGV4
IG5vZGVJbmRleCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVO
b2RlKTsKLSAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGR1bXAoRklMRSogb3V0KSBjb25zdDsKLSAgICAKLXByaXZhdGU6Ci0gICAgc3RhdGljIE5vZGVJ
bmRleCBub2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJjZUtpbmQga2luZCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChraW5kID49IFNvdXJjZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOwotICAg
ICAgICByZXR1cm4gTm9Ob2RlIC0ga2luZDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVl
U291cmNlS2luZCBraW5kRnJvbU5vZGVJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBu
b2RlSW5kZXgpOwotICAgICAgICBpZiAoa2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2
ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIEhhdmVOb2RlOwotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZUlu
ZGV4IG1fbm9kZUluZGV4OwotfTsKLQotCiBlbnVtIEdlbmVyYXRlZE9wZXJhbmRUeXBlIHsgR2Vu
ZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duLCBHZW5lcmF0ZWRPcGVyYW5kSW50ZWdlciwgR2VuZXJh
dGVkT3BlcmFuZERvdWJsZSwgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWV9OwogCiAvLyA9PT0gU3Bl
Y3VsYXRpdmVKSVQgPT09CkBAIC0zMDgsNyArMjMyLDcgQEAgcHVibGljOgogCiAgICAgICAgIC8v
IHVzZSgpIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZSBiZWNvbWVzIGRlYWQsIGFuZCBhbnkK
ICAgICAgICAgLy8gYXNzb2NpYXRlZCByZXNvdXJjZXMgbWF5IGJlIGZyZWVkLgotICAgICAgICBp
ZiAoIWluZm8udXNlKCkpCisgICAgICAgIGlmICghaW5mby51c2UoKm1fc3RyZWFtKSkKICAgICAg
ICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBSZWxlYXNlIHRoZSBhc3NvY2lhdGVkIG1hY2hp
bmUgcmVnaXN0ZXJzLgpAQCAtMzY4LDYgKzI5Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgbm90aWNlT1NSQmlydGgoTm9kZUluZGV4
LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBjb21w
aWxlKEJhc2ljQmxvY2smKTsKIApAQCAtNjU3LDcgKzU4Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIENoZWNrIHRoZSBHZW5lcmF0aW9uSW5mbyB0byBzZWUgaWYgdGhpcyB2YWx1ZSBuZWVkIHdy
aXRpbmcKICAgICAgICAgLy8gdG8gdGhlIFJlZ2lzdGVyRmlsZSAtIGlmIG5vdCwgbWFyayBpdCBh
cyBzcGlsbGVkICYgcmV0dXJuLgogICAgICAgICBpZiAoIWluZm8ubmVlZHNTcGlsbCgpKSB7Ci0g
ICAgICAgICAgICBpbmZvLnNldFNwaWxsZWQoKTsKKyAgICAgICAgICAgIGluZm8uc2V0U3BpbGxl
ZCgqbV9zdHJlYW0sIHNwaWxsTWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
QEAgLTY2NywyMCArNTkyLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNw
ZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxl
IHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
aW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAg
ICAgaW5mby5zcGlsbChEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxs
KCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewogICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihpbmZvLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRJbnRlZ2VyKTsK
KyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0SW50
ZWdlcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAgbV9qaXQu
c3RvcmVEb3VibGUoaW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgICAg
IGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0RG91YmxlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02OTYsMTMgKzYyMSwx
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFs
dWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9ybS4KICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRh
Rm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCAo
RGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENl
bGw6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwot
ICAgICAgICAgICAgaW5mby5zcGlsbChzcGlsbEZvcm1hdCk7CisgICAgICAgICAgICBpbmZvLnNw
aWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKQEAgLTcxMCw3ICs2MzUsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IERhdGFGb3JtYXRKU0RvdWJsZTogewogICAgICAgICAgICAgLy8gT24gSlNWQUxVRTMyXzY0IGJv
eGluZyBhIGRvdWJsZSBpcyBhIG5vLW9wLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUo
aW5mby5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAg
ICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAgICAgaW5mby5zcGls
bCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRKU0RvdWJsZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzE5LDcgKzY0NCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihpbmZvLnRhZ0dQUigpLCBKSVRDb21waWxlcjo6dGFnRm9yKHNwaWxsTWUpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoc3BpbGxGb3Jt
YXQpOworICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9y
bWF0KTsKICAgICAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgICAgICB9CkBAIC0xODIwLDcg
KzE3NDUsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7Cisg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNW
YWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAgICB9
CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsKQogICAgIHsKQEAgLTE4NDMsNyArMTc2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwotICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2Us
IG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgp
LCBqdW1wVG9GYWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlv
blJlY292ZXJpZXMoKSkpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhp
dChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzLCBtX3N0cmVh
bS0+c2l6ZSgpLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJp
ZXMoKSkpOwogICAgIH0KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwg
SlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQog
ICAgIHsKQEAgLTE4NjMsNyArMTc4OCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGV4aXQubV9jb2Rl
T3JpZ2luID0gbmV4dE5vZGUuY29kZU9yaWdpbjsKICAgICAgICAgZXhpdC5tX2xhc3RTZXRPcGVy
YW5kID0gc2V0TG9jYWwubG9jYWwoKTsKICAgICAgICAgCi0gICAgICAgIGV4aXQudmFsdWVSZWNv
dmVyeUZvck9wZXJhbmQoc2V0TG9jYWwubG9jYWwoKSkgPSB2YWx1ZVJlY292ZXJ5OworICAgICAg
ICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRvcHRSZWYoCisgICAgICAgICAgICBu
ZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLmxvY2FsKCksIHZhbHVlUmVjb3Zlcnkp
KTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMTkyMSw2ICsxODQ3LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQgb3BlcmFuZCwgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2UpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJpYWJs
ZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKKyAg
ICB9CisgICAgCiAgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRlcyBNYWNyb0Fzc2Vt
YmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsKICAgICAvLyBUaGUg
Y3VycmVudCBub2RlIGJlaW5nIGdlbmVyYXRlZC4KQEAgLTE5NTQsNiArMTg4Niw5IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIAorICAgIFZhcmlhYmxl
RXZlbnRTdHJlYW0qIG1fc3RyZWFtOworICAgIE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRHcmFw
aDsKKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0
IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKGludCBvcGVyYW5kKQpAQCAtMjU3MywyMCArMjUwOCw2IEBAIHByaXZhdGU6CiAgICAgR1BS
UmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAotaW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxh
dGl2ZUpJVChKSVRDb21waWxlciYgaml0KQotICAgIDogbV9jb21waWxlT2theSh0cnVlKQotICAg
ICwgbV9qaXQoaml0KQotICAgICwgbV9jb21waWxlSW5kZXgoMCkKLSAgICAsIG1faW5kZXhJbkJs
b2NrKDApCi0gICAgLCBtX2dlbmVyYXRpb25JbmZvKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycykKLSAgICAsIG1fYmxvY2tIZWFkcyhqaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCkpCi0gICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMo
KSkKLSAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQotICAgICwgbV9s
YXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9z
dGF0ZShtX2ppdC5ncmFwaCgpKQotewotfQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZV9oCisjZGVmaW5lIERGR1ZhbHVlUmVjb3Zl
cnlPdmVycmlkZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFs
dWVSZWNvdmVyeU92ZXJyaWRlIDogcHVibGljIFJlZkNvdW50ZWQ8VmFsdWVSZWNvdmVyeU92ZXJy
aWRlPiB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKCkgeyB9CisgICAgCisg
ICAgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKGludCBvcGVyYW5kLCBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSkKKyAgICAgICAgOiBvcGVyYW5kKG9wZXJhbmQpCisgICAgICAgICwgcmVjb3Zl
cnkocmVjb3ZlcnkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZDsKKyAgICBW
YWx1ZVJlY292ZXJ5IHJlY292ZXJ5OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYWx1ZVJlY292ZXJ5
T3ZlcnJpZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChG
SUxFKiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJj
ZU5vdFNldDoKKyAgICAgICAgZnByaW50ZihvdXQsICJOb3RTZXQiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIklu
UmVnRmlsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6
CisgICAgICAgIGZwcmludGYob3V0LCAiSW50MzIiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDZWxsSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiQ2VsbCIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnBy
aW50ZihvdXQsICJCb29sIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG91YmxlSW5SZWdp
c3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBt
X25vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHVmFsdWVTb3VyY2VfaAorI2RlZmluZSBERkdWYWx1ZVNvdXJjZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIlBy
ZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJj
ZU5vdFNldCwKKyAgICBWYWx1ZUluUmVnaXN0ZXJGaWxlLAorICAgIEludDMySW5SZWdpc3RlckZp
bGUsCisgICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAorICAgIEJvb2xlYW5JblJlZ2lzdGVyRmlsZSwK
KyAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKKyAgICBIYXZlTm9kZQorfTsKKworc3RhdGljIGlu
bGluZSBWYWx1ZVNvdXJjZUtpbmQgZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERh
dGFGb3JtYXRJbnRlZ2VyOgorICAgICAgICByZXR1cm4gSW50MzJJblJlZ2lzdGVyRmlsZTsKKyAg
ICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVJblJlZ2lzdGVy
RmlsZTsKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gQm9vbGVh
bkluUmVnaXN0ZXJGaWxlOworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJldHVy
biBDZWxsSW5SZWdpc3RlckZpbGU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRhdGFG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm4gVmFsdWVJblJlZ2lzdGVyRmls
ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgRGF0YUZvcm1hdCB2YWx1ZVNvdXJjZUtpbmRU
b0RhdGFGb3JtYXQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1h
dEpTOworICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRJbnRlZ2VyOworICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1
cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAg
ICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNJblJlZ2lzdGVyRmlsZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKK3sKKyAgICByZXR1cm4g
dmFsdWVTb3VyY2VLaW5kVG9EYXRhRm9ybWF0KGtpbmQpICE9IERhdGFGb3JtYXROb25lOworfQor
CitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAg
ICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKFNvdXJjZU5vdFNldCkpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQgdmFs
dWVTb3VyY2VLaW5kKQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleEZyb21LaW5kKHZh
bHVlU291cmNlS2luZCkpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpICE9IFNvdXJjZU5v
dFNldCk7CisgICAgICAgIEFTU0VSVChraW5kKCkgIT0gSGF2ZU5vZGUpOworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6
IG1fbm9kZUluZGV4KG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlSW5kZXgg
IT0gTm9Ob2RlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxl
KTsKKyAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pIHx8IGlzQnl0ZUFy
cmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJj
ZShDZWxsSW5SZWdpc3RlckZpbGUpOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdp
c3RlckZpbGUpOworICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JEYXRhRm9ybWF0KERh
dGFGb3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShk
YXRhRm9ybWF0VG9WYWx1ZVNvdXJjZUtpbmQoZGF0YUZvcm1hdCkpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJ
bmRleChtX25vZGVJbmRleCkgIT0gU291cmNlTm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1
ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21O
b2RlSW5kZXgobV9ub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3Rl
ckZpbGUoKSBjb25zdCB7IHJldHVybiBKU0M6OkRGRzo6aXNJblJlZ2lzdGVyRmlsZShraW5kKCkp
OyB9CisgICAgCisgICAgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZVNvdXJjZUtpbmRUb0RhdGFGb3JtYXQoa2luZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgVmFsdWVSZWNvdmVyeSB2YWx1ZVJlY292ZXJ5KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0luUmVnaXN0ZXJGaWxlKCkpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgICAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBJbnQzMkluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEludDMyKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQ2VsbCgpOwor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZEJvb2xlYW4oKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJG
aWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVy
RmlsZUFzVW5ib3hlZERvdWJsZSgpOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsK
KyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
RklMRSogb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIE5vZGVJbmRleCBu
b2RlSW5kZXhGcm9tS2luZChWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kID49IFNvdXJjZU5vdFNldCAmJiBraW5kIDwgSGF2ZU5vZGUpOworICAgICAgICBy
ZXR1cm4gTm9Ob2RlIC0ga2luZDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNl
S2luZCBraW5kRnJvbU5vZGVJbmRleChOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQga2luZCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihOb05vZGUgLSBub2RlSW5k
ZXgpOworICAgICAgICBpZiAoa2luZCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSGF2ZU5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIEhhdmVOb2RlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VmFsdWVTb3VyY2VLaW5kPihraW5kKTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IG1f
bm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYWx1ZVNvdXJjZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1Zh
cmlhYmxlRXZlbnQuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRlBS
SW5mby5oIgorI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAor
eworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBSZXNldDoKKyAgICAgICAgZnByaW50
ZihvdXQsICJSZXNldCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJpcnRoVG9GaWxsOgor
ICAgICAgICBkdW1wRmlsbEluZm8oIkJpcnRoVG9GaWxsIiwgb3V0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGR1bXBTcGlsbEluZm8oIkJpcnRoVG9T
cGlsbCIsIG91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsbDoKKyAgICAgICAgZHVt
cEZpbGxJbmZvKCJGaWxsIiwgb3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcGlsbDoK
KyAgICAgICAgZHVtcFNwaWxsSW5mbygiU3BpbGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIERlYXRoOgorICAgICAgICBmcHJpbnRmKG91dCwgIkRlYXRoKEAldSkiLCBub2RlSW5k
ZXgoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgZnByaW50
ZihvdXQsICJNb3ZIaW50KEAldSwgciVkKSIsIG5vZGVJbmRleCgpLCBvcGVyYW5kKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNldExvY2FsRXZlbnQ6CisgICAgICAgIGZwcmludGYob3V0
LCAiU2V0TG9jYWwociVkLCAlcykiLCBvcGVyYW5kKCksIGRhdGFGb3JtYXRUb1N0cmluZyhkYXRh
Rm9ybWF0KCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBWYXJpYWJs
ZUV2ZW50OjpkdW1wRmlsbEluZm8oY29uc3QgY2hhciogbmFtZSwgRklMRSogb3V0KSBjb25zdAor
eworICAgIGZwcmludGYob3V0LCAiJXMoQCV1LCAiLCBuYW1lLCBub2RlSW5kZXgoKSk7CisgICAg
aWYgKGRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICBmcHJpbnRmKG91
dCwgIiVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBlbHNlIGlmIChkYXRhRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCisgICAgICAgIGZw
cmludGYob3V0LCAiJXM6JXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUodGFnR1BSKCkpLCBHUFJJbmZv
OjpkZWJ1Z05hbWUocGF5bG9hZEdQUigpKSk7CisjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIGZw
cmludGYob3V0LCAiJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICBmcHJpbnRm
KG91dCwgIiwgJXMpIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFGb3JtYXQoKSkpOworfQorCit2
b2lkIFZhcmlhYmxlRXZlbnQ6OmR1bXBTcGlsbEluZm8oY29uc3QgY2hhciogbmFtZSwgRklMRSog
b3V0KSBjb25zdAoreworICAgIGZwcmludGYob3V0LCAiJXMoQCV1LCByJWQsICVzKSIsIG5hbWUs
IG5vZGVJbmRleCgpLCB2aXJ0dWFsUmVnaXN0ZXIoKSwgZGF0YUZvcm1hdFRvU3RyaW5nKGRhdGFG
b3JtYXQoKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJp
YWJsZUV2ZW50X2gKKyNkZWZpbmUgREZHVmFyaWFibGVFdmVudF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitlbnVtIFZhcmlhYmxlRXZlbnRLaW5kIHsKKyAgICAvLyBNYXJrcyB0aGUgYmVnaW5uaW5nIG9m
IGEgY2hlY2twb2ludC4gSWYgeW91IGludGVycHJldCB0aGUgdmFyaWFibGUKKyAgICAvLyBldmVu
dHMgc3RhcnRpbmcgYXQgYSBSZXNldCBwb2ludCB0aGVuIHlvdSdsbCBnZXQgZXZlcnl0aGluZyB5
b3UgbmVlZC4KKyAgICBSZXNldCwKKyAgICAKKyAgICAvLyBOb2RlIGJpcnRocy4gUG9pbnRzIGlu
IHRoZSBjb2RlIHdoZXJlIGEgbm9kZSBiZWNvbWVzIHJlbGV2YW50IGZvciBPU1IuCisgICAgLy8g
SXQgbWF5IGJlIHRoZSBwb2ludCB3aGVyZSBpdCBpcyBhY3R1YWxseSBib3JuIChpLmUuIGFzc2ln
bmVkKSBvciBpdCBtYXkKKyAgICAvLyBiZSBhIGxhdGVyIHBvaW50LCBpZiBpdCdzIG9ubHkgbGF0
ZXIgaW4gdGhlIHNlcXVlbmNlIG9mIGluc3RydWN0aW9ucworICAgIC8vIHRoYXQgd2Ugc3RhcnQg
dG8gY2FyZSBhYm91dCB0aGlzIG5vZGUuCisgICAgQmlydGhUb0ZpbGwsCisgICAgQmlydGhUb1Nw
aWxsLAorICAgIAorICAgIC8vIEV2ZW50cyByZWxhdGVkIHRvIGhvdyBhIG5vZGUgaXMgcmVwcmVz
ZW50ZWQuCisgICAgRmlsbCwKKyAgICBTcGlsbCwKKyAgICAKKyAgICAvLyBEZWF0aCBvZiBhIG5v
ZGUgLSBhZnRlciB0aGlzIHdlIG5vIGxvbmdlciBjYXJlIGFib3V0IHRoaXMgbm9kZS4KKyAgICBE
ZWF0aCwKKyAgICAKKyAgICAvLyBBIE1vdkhpbnQgbWVhbnMgdGhhdCBhIG5vZGUgaXMgYmVpbmcg
YXNzb2NpYXRlZCB3aXRoIGEgYnl0ZWNvZGUgb3BlcmFuZCwKKyAgICAvLyBidXQgdGhhdCBpdCBo
YXMgbm90IGJlZW4gc3RvcmVkIGludG8gdGhhdCBvcGVyYW5kLgorICAgIE1vdkhpbnQsCisgICAg
CisgICAgLy8gQSBTZXRMb2NhbEV2ZW50IG1lYW5zIHRoYXQgYSBub2RlJ3MgdmFsdWUgaGFzIGFj
dHVhbGx5IGJlZW4gc3RvcmVkIGludG8gdGhlCisgICAgLy8gYnl0ZWNvZGUgb3BlcmFuZCB0aGF0
IGl0J3MgYXNzb2NpYXRlZCB3aXRoLgorICAgIFNldExvY2FsRXZlbnQsCisgICAgCisgICAgLy8g
VXNlZCB0byBpbmRpY2F0ZSBhbiB1bmluaXRpYWxpemVkIFZhcmlhYmxlRXZlbnQuIERvbid0IHVz
ZSBmb3Igb3RoZXIKKyAgICAvLyBwdXJwb3Nlcy4KKyAgICBJbnZhbGlkRXZlbnRLaW5kCit9Owor
Cit1bmlvbiBWYXJpYWJsZVJlcHJlc2VudGF0aW9uIHsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRCBncHI7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkZQUmVnaXN0ZXJJRCBmcHI7CisjaWYg
VVNFKEpTVkFMVUUzMl82NCkKKyAgICBzdHJ1Y3QgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCB0YWdHUFI7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
eWxvYWRHUFI7CisgICAgfSBwYWlyOworI2VuZGlmCisgICAgaW50MzJfdCB2aXJ0dWFsUmVnOwor
fTsKKworY2xhc3MgVmFyaWFibGVFdmVudCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVFdmVudCgp
CisgICAgICAgIDogbV9raW5kKEludmFsaWRFdmVudEtpbmQpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCByZXNldCgpCisgICAgeworICAgICAgICBWYXJpYWJs
ZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2tpbmQgPSBSZXNldDsKKyAgICAgICAgcmV0
dXJuIGV2ZW50OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBmaWxsR1BS
KFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAg
QVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgQVNTRVJUKCEoZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUykpOworI2Vu
ZGlmCisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXgg
PSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUuZ3ByID0gZ3ByOworICAgICAgICBldmVudC5t
X2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBkYXRhRm9ybWF0Owor
ICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZmlsbFBhaXIoVmFyaWFibGVFdmVudEtpbmQga2lu
ZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAgICAgICAgVmFy
aWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAg
ICAgICAgZXZlbnQudS5wYWlyLnRhZ0dQUiA9IHRhZ0dQUjsKKyAgICAgICAgZXZlbnQudS5wYWly
LnBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOwor
ICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7CisgICAgICAgIHJldHVy
biBldmVudDsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAgICAKKyAgICBz
dGF0aWMgVmFyaWFibGVFdmVudCBmaWxsRlBSKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb0ZpbGwgfHwga2luZCA9PSBGaWxsKTsKKyAg
ICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9pbmRleCA9IG5vZGVJ
bmRleDsKKyAgICAgICAgZXZlbnQudS5mcHIgPSBmcHI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9
IGtpbmQ7CisgICAgICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7Cisg
ICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZl
bnQgc3BpbGwoVmFyaWFibGVFdmVudEtpbmQga2luZCwgTm9kZUluZGV4IG5vZGVJbmRleCwgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciwgRGF0YUZvcm1hdCBmb3JtYXQpCisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwga2luZCA9PSBTcGlsbCk7Cisg
ICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IHZpcnR1YWxSZWdpc3RlcjsKKyAg
ICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0g
Zm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YXJpYWJsZUV2ZW50IGRlYXRoKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBW
YXJpYWJsZUV2ZW50IGV2ZW50OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4Owor
ICAgICAgICBldmVudC5tX2tpbmQgPSBEZWF0aDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBzZXRMb2NhbChpbnQgb3BlcmFuZCwg
RGF0YUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50Owor
ICAgICAgICBldmVudC51LnZpcnR1YWxSZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tp
bmQgPSBTZXRMb2NhbEV2ZW50OworICAgICAgICBldmVudC5tX2RhdGFGb3JtYXQgPSBmb3JtYXQ7
CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxl
RXZlbnQgbW92SGludChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50Lm1faW5kZXggPSBub2Rl
SW5kZXg7CisgICAgICAgIGV2ZW50LnUudmlydHVhbFJlZyA9IG9wZXJhbmQ7CisgICAgICAgIGV2
ZW50Lm1fa2luZCA9IE1vdkhpbnQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAg
CisgICAgVmFyaWFibGVFdmVudEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VmFyaWFibGVFdmVudEtpbmQ+KG1fa2luZCk7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
a2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbAorICAgICAgICAgICAgICAgfHwg
bV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tpbmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAg
IHx8IG1fa2luZCA9PSBEZWF0aCB8fCBtX2tpbmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVy
biBtX2luZGV4OworICAgIH0KKyAgICAKKyAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmlsbCB8fCBtX2tpbmQg
PT0gRmlsbAorICAgICAgICAgICAgICAgfHwgbV9raW5kID09IEJpcnRoVG9TcGlsbCB8fCBtX2tp
bmQgPT0gU3BpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50KTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGFGb3JtYXQ+KG1fZGF0YUZvcm1hdCk7Cisg
ICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBG
aWxsKTsKKyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCk7CisgICAgICAgIEFTU0VSVChtX2Rh
dGFGb3JtYXQgIT0gRGF0YUZvcm1hdERvdWJsZSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgQVNTRVJUKCEobV9kYXRhRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIHUuZ3ByOworICAgIH0KKyAgICAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAg
ICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVy
biB1LnBhaXIudGFnR1BSOworICAgIH0KKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBw
YXlsb2FkR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhU
b0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICYg
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgcmV0dXJuIHUucGFpci5wYXlsb2FkR1BSOworICAgIH0K
KyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpG
UFJlZ2lzdGVySUQgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0g
QmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9y
bWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICByZXR1cm4gdS5mcHI7CisgICAgfQor
ICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxs
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4odS52aXJ0dWFs
UmVnKTsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJhbmQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBTZXRMb2NhbEV2ZW50IHx8IG1fa2luZCA9PSBNb3ZIaW50KTsK
KyAgICAgICAgcmV0dXJuIHUudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFy
aWFibGVSZXByZXNlbnRhdGlvbiYgdmFyaWFibGVSZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHU7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoRklMRSopIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIGR1bXBGaWxsSW5mbyhjb25zdCBjaGFyKiBuYW1lLCBGSUxFKikgY29uc3Q7
CisgICAgdm9pZCBkdW1wU3BpbGxJbmZvKGNvbnN0IGNoYXIqIG5hbWUsIEZJTEUqKSBjb25zdDsK
KyAgICAKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICAKKyAgICAvLyBGb3IgQmlydGhUb0Zp
bGwsIEZpbGw6CisgICAgLy8gICAtIFRoZSBHUFIgb3IgRlBSLCBvciBhIEdQUiBwYWlyLgorICAg
IC8vIEZvciBCaXJ0aFRvU3BpbGwsIFNwaWxsOgorICAgIC8vICAgLSBUaGUgdmlydHVhbCByZWdp
c3Rlci4KKyAgICAvLyBGb3IgTW92SGludCwgU2V0TG9jYWxFdmVudDoKKyAgICAvLyAgIC0gVGhl
IGJ5dGVjb2RlIG9wZXJhbmQuCisgICAgLy8gRm9yIERlYXRoOgorICAgIC8vICAgLSBVbnVzZWQu
CisgICAgVmFyaWFibGVSZXByZXNlbnRhdGlvbiB1OworICAgIAorICAgIGludDhfdCBtX2tpbmQ7
CisgICAgaW50OF90IG1fZGF0YUZvcm1hdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVF
dmVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkRGR1ZhbHVlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06Omxv
Z0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQoreworICAgIGRhdGFMb2coInNlcSMl
dToiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSgpKSk7CisgICAgZXZlbnQuZHVtcChXVEY6
OmRhdGFGaWxlKCkpOworICAgIGRhdGFMb2coIiAiKTsKK30KKworc3RydWN0IE1pbmlmaWVkR2Vu
ZXJhdGlvbkluZm8geworICAgIGJvb2wgZmlsbGVkOyAvLyB0cnVlIC0+IGluIGdwci9mcHIvcGFp
ciwgZmFsc2UgLT4gc3BpbGxlZAorICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gdTsKKyAgICBE
YXRhRm9ybWF0IGZvcm1hdDsKKyAgICAKKyAgICBNaW5pZmllZEdlbmVyYXRpb25JbmZvKCkKKyAg
ICAgICAgOiBmb3JtYXQoRGF0YUZvcm1hdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIHVwZGF0ZShjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoZXZlbnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgQmlydGhUb0ZpbGw6CisgICAgICAg
IGNhc2UgRmlsbDoKKyAgICAgICAgICAgIGZpbGxlZCA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAgICAgIGNhc2UgU3BpbGw6CisgICAg
ICAgICAgICBmaWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERlYXRoOgorICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHUgPSBldmVudC52YXJpYWJsZVJlcHJlc2VudGF0aW9uKCk7
CisgICAgICAgIGZvcm1hdCA9IGV2ZW50LmRhdGFGb3JtYXQoKTsKKyAgICB9Cit9OworCit2b2lk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAorICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1pbmlmaWVkR3JhcGgmIGdyYXBoLAorICAgIHVu
c2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYgdmFsdWVSZWNvdmVyaWVzKSBj
b25zdAoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpE
RkdKSVQpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpOworICAgIAorICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlczsKKyAgICBp
ZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIG51bVZhcmlhYmxlcyA9IGJh
c2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQ7CisgICAgZWxzZQorICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNv
ZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgCisgICAgLy8gQ3Jhenkgc3BlY2lh
bCBjYXNlOiBpZiB3ZSdyZSBhdCBpbmRleCA9PSAwIHRoZW4gdGhpcyBtdXN0IGJlIGFuIGFyZ3Vt
ZW50IGNoZWNrCisgICAgLy8gZmFpbHVyZSwgaW4gd2hpY2ggY2FzZSBhbGwgdmFyaWFibGVzIGFy
ZSBhbHJlYWR5IHNldCB1cC4gVGhlIHJlY292ZXJpZXMgc2hvdWxkCisgICAgLy8gcmVmbGVjdCB0
aGlzLgorICAgIGlmICghaW5kZXgpIHsKKyAgICAgICAgdmFsdWVSZWNvdmVyaWVzID0gT3BlcmFu
ZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxl
cyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVSZWNvdmVyaWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6
YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gU3RlcCAxOiBGaW5kIHRoZSBsYXN0IGNoZWNrcG9pbnQsIGFuZCBmaWd1cmUgb3V0IHRo
ZSBudW1iZXIgb2YgdmlydHVhbCByZWdpc3RlcnMgYXMgd2UgZ28uCisgICAgdW5zaWduZWQgc3Rh
cnRJbmRleCA9IGluZGV4IC0gMTsKKyAgICB3aGlsZSAoYXQoc3RhcnRJbmRleCkua2luZCgpICE9
IFJlc2V0KQorICAgICAgICBzdGFydEluZGV4LS07CisgICAgCisgICAgLy8gU3RlcCAyOiBDcmVh
dGUgYSBtb2NrLXVwIG9mIHRoZSBERkcncyBzdGF0ZSBhbmQgZXhlY3V0ZSB0aGUgZXZlbnRzLgor
ICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBvcGVyYW5kU291cmNlcyhjb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBWZWN0b3I8TWluaWZpZWRHZW5lcmF0aW9u
SW5mbywgMzI+IGdlbmVyYXRpb25JbmZvcyhncmFwaC5vcmlnaW5hbEdyYXBoU2l6ZSgpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzdGFydEluZGV4OyBpIDwgaW5kZXg7ICsraSkgeworICAgICAg
ICBjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVudCA9IGF0KGkpOworICAgICAgICBzd2l0Y2ggKGV2
ZW50LmtpbmQoKSkgeworICAgICAgICBjYXNlIFJlc2V0OgorICAgICAgICAgICAgLy8gbm90aGlu
ZyB0byBkby4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpcnRoVG9GaWxsOgor
ICAgICAgICBjYXNlIEJpcnRoVG9TcGlsbDoKKyAgICAgICAgY2FzZSBGaWxsOgorICAgICAgICBj
YXNlIFNwaWxsOgorICAgICAgICBjYXNlIERlYXRoOgorICAgICAgICAgICAgZ2VuZXJhdGlvbklu
Zm9zW2V2ZW50Lm5vZGVJbmRleCgpXS51cGRhdGUoZXZlbnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5o
YXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJj
ZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlKGV2ZW50Lm5vZGVJbmRl
eCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRMb2NhbEV2ZW50Ogor
ICAgICAgICAgICAgaWYgKG9wZXJhbmRTb3VyY2VzLmhhc09wZXJhbmQoZXZlbnQub3BlcmFuZCgp
KSkKKyAgICAgICAgICAgICAgICBvcGVyYW5kU291cmNlcy5zZXRPcGVyYW5kKGV2ZW50Lm9wZXJh
bmQoKSwgVmFsdWVTb3VyY2U6OmZvckRhdGFGb3JtYXQoZXZlbnQuZGF0YUZvcm1hdCgpKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgLy8gU3RlcCAzOiBSZWNvcmQgdGhlIHRoaW5ncyB0aGF0IGFyZSBsaXZlLCBzbyB3ZSBj
YW4gZ2V0IHRvIHRoZW0gbW9yZSBxdWlja2x5LgorICAgIFZlY3Rvcjx1bnNpZ25lZCwgMTY+IGlu
ZGljZXNPZkxpdmVUaGluZ3M7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdlbmVyYXRp
b25JbmZvcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZ2VuZXJhdGlvbkluZm9zW2ldLmZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgIGluZGljZXNPZkxpdmVUaGluZ3Mu
YXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBTdGVwIDQ6IENvbXB1dGUgdmFsdWUgcmVj
b3ZlcmllcyEKKyAgICB2YWx1ZVJlY292ZXJpZXMgPSBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5Pihj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgbnVtVmFyaWFibGVzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgb3BlcmFuZFNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFs
dWVTb3VyY2UmIHNvdXJjZSA9IG9wZXJhbmRTb3VyY2VzW2ldOworICAgICAgICBpZiAoc291cmNl
LmlzSW5SZWdpc3RlckZpbGUoKSkgeworICAgICAgICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0g
c291cmNlLnZhbHVlUmVjb3ZlcnkoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc291cmNlLmtpbmQoKSA9PSBIYXZlTm9kZSk7Cisg
ICAgICAgIE1pbmlmaWVkTm9kZSogbm9kZSA9IGdyYXBoLmF0KHNvdXJjZS5ub2RlSW5kZXgoKSk7
CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnRO
dW1iZXIoKSkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2stPmNvbnN0YW50
UmVnaXN0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpLmdldCgpKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNXZWFrQ29u
c3RhbnQoKSkgeworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTWlu
aWZpZWRHZW5lcmF0aW9uSW5mbyogaW5mbyA9ICZnZW5lcmF0aW9uSW5mb3Nbc291cmNlLm5vZGVJ
bmRleCgpXTsKKyAgICAgICAgaWYgKGluZm8tPmZvcm1hdCA9PSBEYXRhRm9ybWF0Tm9uZSkgewor
ICAgICAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0
aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgICAgICAvLyBUaGVy
ZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IEludDMyVG9Eb3VibGU6IFdlIGNhbiB1c2UgdGhpcyBpbiBwbGFjZSBvZiB0aGUgb3JpZ2luYWwg
bm9kZSwgYnV0CisgICAgICAgICAgICAvLyAgICB3ZSdkIHJhdGhlciBub3Q7IHNvIHdlIHVzZSBp
dCBvbmx5IGlmIGl0IGlzIHRoZSBvbmx5IHJlbWFpbmluZworICAgICAgICAgICAgLy8gICAgbGl2
ZSB2ZXJzaW9uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFZhbHVlVG9JbnQzMjog
SWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAgICAg
ICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LgorICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZl
cnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgICAgIC8vICAg
IHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVy
bHkgZm9ybWVkIG51bWJlcgorICAgICAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIg
aW50ZXJtZWRpYXRlLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZSByZXZlcnNl
IG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBp
dHMKKyAgICAgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgICAgIC8vICAgIHRo
ZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGUtPmNoaWxkMSgpOworICAg
ICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IGluZm8gPSAmZ2VuZXJhdGlvbkluZm9zW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYg
KGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
IWZvdW5kKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBO
b05vZGU7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBO
b05vZGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGljZXNPZkxpdmVUaGluZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGluZGljZXNPZkxpdmVUaGluZ3NbaV07Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSBncmFwaC5hdChub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5oYXNDaGlsZDEoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hp
bGQxKCkgIT0gc291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mb3Nbbm9kZUlu
ZGV4XS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91Ymxl
OgorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJUb0RvdWJsZUluZGV4ID0gbm9kZUluZGV4
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMySW5k
ZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMlRvTnVtYmVySW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1Vz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW50MzJUb0RvdWJsZUluZGV4ICE9IE5vTm9kZSkKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBpbnQzMlRvRG91YmxlSW5kZXg7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHZhbHVlVG9JbnQzMkluZGV4OworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9
IE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4
VG9Vc2UgIT0gTm9Ob2RlKSB7CisgICAgICAgICAgICAgICAgICAgIGluZm8gPSAmZ2VuZXJhdGlv
bkluZm9zW25vZGVJbmRleFRvVXNlXTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGluZm8t
PmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNb
aV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKGluZm8tPmZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoaW5mby0+ZmlsbGVkKSB7CisgICAgICAgICAgICBpZiAoaW5mby0+Zm9ybWF0ID09
IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0g
PSBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvLT51LmZwcik7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAg
IGlmIChpbmZvLT5mb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICB2YWx1
ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoaW5mby0+dS5wYWlyLnRhZ0dQ
UiwgaW5mby0+dS5wYWlyLnBheWxvYWRHUFIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBW
YWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvLT51LmdwciwgaW5mby0+Zm9ybWF0KTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2YWx1ZVJlY292ZXJp
ZXNbaV0gPQorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihpbmZvLT51LnZpcnR1YWxSZWcpLCBpbmZv
LT5mb3JtYXQpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtX2gKKyNkZWZpbmUgREZHVmFy
aWFibGVFdmVudFN0cmVhbV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHTWlu
aWZpZWRHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnQuaCIKKyNpbmNsdWRlICJP
cGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBWYXJpYWJsZUV2ZW50U3RyZWFtIDogcHVibGljIFZlY3Rv
cjxWYXJpYWJsZUV2ZW50PiB7CitwdWJsaWM6CisgICAgdm9pZCBhcHBlbmRBbmRMb2coY29uc3Qg
VmFyaWFibGVFdmVudCYgZXZlbnQpCisgICAgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKKyAgICAgICAgbG9nRXZlbnQoZXZlbnQpOworI2VuZGlmCisgICAgICAgIGFwcGVuZChldmVu
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVjb25zdHJ1Y3QoCisgICAgICAgIENvZGVCbG9j
ayosIENvZGVPcmlnaW4sIE1pbmlmaWVkR3JhcGgmLAorICAgICAgICB1bnNpZ25lZCBpbmRleCwg
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGxv
Z0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFi
bGVFdmVudFN0cmVhbV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmly
dHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDExMjMyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw3
IEBAIHB1YmxpYzoKIAogdm9pZCBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihHcmFw
aCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBWaXJ0
dWFsIFJlZ2lzdGVyIEFsbG9jYXRpb24gUGhhc2UiKTsKICAgICBydW5QaGFzZTxWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAo=
</data>
<flag name="review"
          id="138474"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150482</attachid>
            <date>2012-07-02 15:23:07 -0700</date>
            <delta_ts>2012-07-02 15:23:07 -0700</delta_ts>
            <desc>start of rebasing</desc>
            <filename>variablestream_patch_91.diff</filename>
            <type>text/plain</type>
            <size>186727</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzMSBA
QAorMjAxMi0wMy0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIHNob3VsZCBiZSBjb21wdXRlZCBsYXppbHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCisgICAgICAgIAorICAgICAg
ICBUaGlzIGNoYW5nZSBhaW1zIHRvIHJlZHVjZSBvbmUgYXNwZWN0IG9mIERGRyBjb21waWxlIHRp
bWVzOiB0aGUgZmFjdAorICAgICAgICB0aGF0IHdlIGN1cnJlbnRseSBjb21wdXRlIHRoZSB2YWx1
ZSByZWNvdmVyaWVzIGZvciBlYWNoIGxvY2FsIGFuZAorICAgICAgICBhcmd1bWVudCBvbiBldmVy
eSBzcGVjdWxhdGlvbiBjaGVjay4gV2UgY29tcGlsZSBtYW55IHNwZWN1bGF0aW9uIGNoZWNrcywK
KyAgICAgICAgc28gdGhpcyBjYW4gYWRkIHVwIHF1aWNrLiBUaGUgc3RyYXRlZ3kgdGhhdCB0aGlz
IGNoYW5nZSB0YWtlcyBpcyB0bworICAgICAgICBoYXZlIHRoZSBERkcgc2F2ZSBqdXN0IGVub3Vn
aCBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGNvbXBpbGVyIGlzCisgICAgICAgIGNob29zaW5n
IHRvIHJlcHJlc2VudCBzdGF0ZSwgdGhhdCB0aGUgREZHOjpPU1JFeGl0Q29tcGlsZXIgY2FuIHJl
aWZ5CisgICAgICAgIHRoZSB2YWx1ZSByZWNvdmVyaWVzIGxhemlseS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgYXBwZWFycyB0byBiZSBhbiAwLjMlIFN1blNwaWRlciBzcGVlZC11cCBhbmQgaXMg
bmV1dHJhbCBlbHNld2hlcmUuCisgICAgICAgIAorICAgICAgICBJIGFsc28gdG9vayB0aGUgb3Bw
b3J0dW5pdHkgdG8gZml4IHRoZSBzYW1wbGluZyByZWdpb25zIHByb2ZpbGVyIChpdAorICAgICAg
ICB3YXMgbWlzc2luZyBhbiBleHBvcnQgbWFjcm8pIGFuZCB0byBwdXQgaW4gbW9yZSBzYW1wbGlu
ZyByZWdpb25zIGluCisgICAgICAgIHRoZSBERkcgKHdoaWNoIGFyZSBkaXNhYmxlZCBzbyBsb25n
IGFzIEVOQUJMRShTQU1QTElOR19SRUdJT05TKSBpcworICAgICAgICBmYWxzZSkuCisgICAgICAg
IAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6
CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNocmlua0RGR0RhdGFU
b0ZpdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om1pbmlmaWVkREZHKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YXJpYWJsZUV2ZW50U3RyZWFtKToKKyAgICAgICAgKERGR0RhdGEpOgor
ICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpo
YXNPcGVyYW5kKToKKyAgICAgICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6
OnNpemUpOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6YXQpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjppc0FyZ3VtZW50KToK
KyAgICAgICAgKEpTQzo6T3BlcmFuZHM6OmlzVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpPcGVy
YW5kczo6YXJndW1lbnRGb3JJbmRleCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjp2YXJpYWJs
ZUZvckluZGV4KToKKyAgICAgICAgKEpTQzo6T3BlcmFuZHM6Om9wZXJhbmRGb3JJbmRleCk6Cisg
ICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGJ5
dGVjb2RlL1NhbXBsaW5nVG9vbC5oOgorICAgICAgICAoU2FtcGxpbmdSZWdpb24pOgorICAgICAg
ICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVy
Zm9ybUNGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpwZXJmb3JtQ1NFKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybUZpeHVwKToKKyAgICAgICAgKiBkZmcvREZHR2VuZXJhdGlv
bkluZm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6R2VuZXJhdGlvbklu
Zm8pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0Q29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0SW50ZWdlcik6CisgICAgICAg
IChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OmluaXRKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6
REZHOjpHZW5lcmF0aW9uSW5mbzo6aW5pdENlbGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVy
YXRpb25JbmZvOjppbml0Qm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OmluaXREb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjppbml0
U3RvcmFnZSk6CisgICAgICAgIChHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJhdGlvbkluZm86Om5vdGljZU9TUkJpcnRoKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5l
cmF0aW9uSW5mbzo6dXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6c3Bp
bGwpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpzZXRTcGlsbGVkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAo
SlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjpmaWxsQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJhdGlvbkluZm86OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0
aW9uSW5mbzo6ZmlsbEJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZv
OjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZvOjphcHBlbmRGaWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YXBwZW5kU3BpbGwpOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmxpbmspOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHTWluaWZpZWRHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAg
IChNaW5pZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjpNaW5p
ZmllZEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZEdyYXBoOjphdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpNaW5pZmllZEdyYXBoOjpwcmVwYXJlQW5kU2hyaW5rKToKKyAgICAgICAgKEpTQzo6REZHOjpN
aW5pZmllZEdyYXBoOjpzZXRPcmlnaW5hbEdyYXBoU2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
TWluaWZpZWRHcmFwaDo6b3JpZ2luYWxHcmFwaFNpemUpOgorICAgICAgICAqIGRmZy9ERkdNaW5p
ZmllZE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
TWluaWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5o
OiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6YmVsb25nc0luTWlu
aWZpZWRHcmFwaCk6CisgICAgICAgIChNaW5pZmllZE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok1pbmlmaWVkTm9kZTo6TWluaWZpZWROb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmll
ZE5vZGU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Om9wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6Omhhc0NoaWxkMSk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWROb2RlOjpjaGlsZDEpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVk
Tm9kZTo6aGFzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFz
Q29uc3RhbnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3Rh
bnROdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6TWluaWZpZWROb2RlOjpjb21wYXJlQnlOb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChOb2RlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoK
KyAgICAgICAgKE9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3Bw
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaDoKKyAgICAgICAgKE9TUkV4aXRD
b21waWxlcik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVByZWRpY3Rpb25Q
cm9wYWdhdGlvbik6CisgICAgICAgICogZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1SZWR1bmRhbnRQaGlFbGltaW5hdGlv
bik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpub3RpY2VPU1JCaXJ0aCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnVzZSk6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmZvcndhcmRTcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6cmVjb3JkU2V0TG9jYWwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEludGVnZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUp
OgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAg
ICAgIChERkcpOgorICAgICAgICAoVmFsdWVSZWNvdmVyeU92ZXJyaWRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU6OlZhbHVlUmVjb3ZlcnlPdmVycmlkZSk6Cisg
ICAgICAgICogZGZnL0RGR1ZhbHVlU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZH
VmFsdWVTb3VyY2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6
OmRhdGFGb3JtYXRUb1ZhbHVlU291cmNlS2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6dmFsdWVT
b3VyY2VLaW5kVG9EYXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjppc0luUmVnaXN0ZXJG
aWxlKToKKyAgICAgICAgKFZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNv
dXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRGF0YUZvcm1h
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3Vy
Y2U6OmlzSW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpk
YXRhRm9ybWF0KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6dmFsdWVSZWNvdmVy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleEZyb21LaW5kKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYWx1ZVNvdXJjZTo6a2luZEZyb21Ob2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlND
OjpERkc6OlZhcmlhYmxlRXZlbnQ6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxl
RXZlbnQ6OmR1bXBGaWxsSW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6
ZHVtcFNwaWxsSW5mbyk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnQuaDogQWRkZWQu
CisgICAgICAgIChERkcpOgorICAgICAgICAoVmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFyaWFibGVFdmVudDo6VmFyaWFibGVFdmVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFyaWFibGVFdmVudDo6cmVzZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6
OmZpbGxHUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OmZpbGxQYWlyKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUV2ZW50OjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVFdmVudDo6ZGVhdGgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnNldExv
Y2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50Ojptb3ZIaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50OjpraW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUV2ZW50Ojpub2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZl
bnQ6OmRhdGFGb3JtYXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6Omdwcik6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dGFnR1BSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUV2ZW50OjpwYXlsb2FkR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpW
YXJpYWJsZUV2ZW50OjpmcHIpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlRXZlbnQ6OnZp
cnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6b3BlcmFu
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudDo6dmFyaWFibGVSZXByZXNlbnRh
dGlvbik6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOiBBZGRlZC4K
KyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6
bG9nRXZlbnQpOgorICAgICAgICAoTWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6CisgICAgICAgIChK
U0M6OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbyk6
CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRHZW5lcmF0aW9uSW5mbzo6dXBkYXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAg
ICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoVmFyaWFibGVFdmVudFN0cmVhbSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFy
aWFibGVFdmVudFN0cmVhbTo6YXBwZW5kQW5kTG9nKToKKyAgICAgICAgKiBkZmcvREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3Jt
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbik6CisKIDIwMTItMDctMDIgIEdhdmluIEJhcnJhY2xv
dWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS5w
b3Agc2hvdWxkIHRocm93IGlmIHByb3BlcnR5IGlzIG5vdCBjb25maWd1cmFibGUKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiAr
NzgsNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcAogICAgIGRmZy9ERkdHcmFwaC5jcHAKICAgICBkZmcvREZHSklUQ29tcGlsZXIuY3BwCisg
ICAgZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAKICAgICBkZmcvREZHTm9kZUZsYWdzLmNwcAogICAg
IGRmZy9ERkdPU1JFbnRyeS5jcHAKICAgICBkZmcvREZHT1NSRXhpdC5jcHAKQEAgLTkzLDYgKzk0
LDkgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKICAgICBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKICAgICBkZmcvREZH
VGh1bmtzLmNwcAorICAgIGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKKyAgICBkZmcvREZHVmFyaWFi
bGVFdmVudC5jcHAKKyAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAgICBkZmcv
REZHVmFsaWRhdGUuY3BwCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiArMTg4LDkgQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNaW5pZmllZE5vZGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsYWdzLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxhZ3MuaCBcCkBAIC0yMjIsNiArMjI1LDEzIEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaHVu
a3MuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RodW5rcy5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmNwcCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUV2ZW50U3RyZWFtLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIFwKICAgICBkZmcvREZHR3JhcGgu
Y3BwIFwKICAgICBkZmcvREZHSklUQ29tcGlsZXIuY3BwIFwKKyAgICBkZmcvREZHTWluaWZpZWRO
b2RlLmNwcCBcCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAgXAogICAgIGRmZy9ERkdPcGVyYXRp
b25zLmNwcCBcCiAgICAgZGZnL0RGR09TUkVudHJ5LmNwcCBcCkBAIC0xMjQsNiArMTI1LDkgQEAg
U09VUkNFUyArPSBcCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIFwKICAgICBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgXAogICAgIGRmZy9ERkdUaHVua3MuY3BwIFwKKyAg
ICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwIFwKKyAgICBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAg
XAorICAgIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBcCiAgICAgZGZnL0RGR1ZhbGlk
YXRlLmNwcCBcCiAgICAgZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAg
XAogICAgIGludGVycHJldGVyL0Fic3RyYWN0UEMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtOTIsNiArOTIsMTYgQEAKIAkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVw
UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4
OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNl
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9w
ZXJhbmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyQkRDNDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkR3JhcGguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzNEMTUyMjgwMTcw
MENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyQkRDM0UxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ3MTUyMjgw
MjUwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAv
KiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFs
dWVTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMkJEQzQwMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJEQzQ5MTUyMjgwOTYw
MENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMkJEQzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQy
MTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCAqLzsgfTsKKwkJ
MEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzQzMTUyMjgw
MTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEw
IC8qIERGR01pbmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2Rl
LmNwcCAqLzsgfTsKKwkJMEYyQkRDNEYxNTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJE
QzRFMTUyMjhCRTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi87IH07CisJCTBGMkJE
QzUxMTUyMjhGRkQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzUwMTUyMjhGRkEwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCAqLzsgfTsKIAkJMEYyQzU1NkYxNDczOEYzMTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkM1NTZFMTQ3MzhGMkUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQzU1
NzAxNDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQzU1NkQxNDczOEYyRTAwMTIxRTRGIC8q
IERGR0NvZGVCbG9ja3MuY3BwICovOyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyog
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcCAqLzsgfTsKQEAgLTgxNCw2ICs4MjQsMTYgQEAKIAkJMEYyQkRDMTMx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8q
IERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJ
bnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMkIxNTFGREU4QjAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wZXJhbmRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmll
ZEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR01pbmlmaWVkR3Jh
cGguaDsgcGF0aCA9IGRmZy9ERkdNaW5pZmllZEdyYXBoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkJEQzNFMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTWluaWZpZWROb2RlLmg7IHBhdGgg
PSBkZmcvREZHTWluaWZpZWROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmg7
IHBhdGggPSBkZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkJEQzQwMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYWx1ZVNvdXJjZS5oOyBwYXRo
ID0gZGZnL0RGR1ZhbHVlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MkJEQzQxMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJEQzQyMTUy
MjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOyBwYXRo
ID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWRO
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVk
Tm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWROb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQkRDNEUxNTIyOEJFNzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhbHVlU291cmNl
LmNwcDsgcGF0aCA9IGRmZy9ERkdWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlRXZlbnQu
Y3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjJDNTU2RDE0NzM4RjJFMDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdDb2RlQmxvY2tzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQzU1NkUxNDczOEYyRTAwMTIxRTRGIC8q
IERGR0NvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gREZHQ29k
ZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0ExNzE1M0U2OEVG
MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIyMjcsNiArMjI0Nyw5IEBACiAJCQkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8q
IERGR0luc2VydGlvblNldC5oICovLAogCQkJCTg2RUM5REJCMTMyOERGODIwMDJCMkFENyAvKiBE
RkdKSVRDb21waWxlci5jcHAgKi8sCiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0pJVENvbXBpbGVyLmggKi8sCisJCQkJMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkR3JhcGguaCAqLywKKwkJCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWlu
aWZpZWROb2RlLmNwcCAqLywKKwkJCQkwRjJCREMzRTE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWlu
aWZpZWROb2RlLmggKi8sCiAJCQkJODZFQ0EzRTkxMzJERUYxQzAwMkIyQUQ3IC8qIERGR05vZGUu
aCAqLywKIAkJCQkwRkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAq
LywKIAkJCQkwRkE1ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCkBA
IC0yMjYxLDkgKzIyODQsMTYgQEAKIAkJCQk4Njg4MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAgKi8sCiAJCQkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8q
IERGR1RodW5rcy5jcHAgKi8sCiAJCQkJMEZDMDk3QTAxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1Ro
dW5rcy5oICovLAorCQkJCTBGMkJEQzNGMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGUuaCAqLywKKwkJCQkwRjJCREM0RTE1MjI4QkU3MDBDRDg5MTAgLyogREZHVmFs
dWVTb3VyY2UuY3BwICovLAorCQkJCTBGMkJEQzQwMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYWx1
ZVNvdXJjZS5oICovLAogCQkJCTBGM0IzQTI5MTU0NzRGRjQwMDNFRDBGRiAvKiBERkdWYWxpZGF0
ZS5jcHAgKi8sCiAJCQkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmgg
Ki8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oICovLAorCQkJCTBGMkJEQzUwMTUyMjhGRkEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
LmNwcCAqLywKKwkJCQkwRjJCREM0MTE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVu
dC5oICovLAorCQkJCTBGMkJEQzQyMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmNwcCAqLywKKwkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkw
OTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKIAkJ
CSk7CkBAIC0yNzQ3LDYgKzI3NzcsMTIgQEAKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAg
LyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMjExNTFFODAzQjAw
Q0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMx
NTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0
NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyQkRDNDcxNTIyODAyNTAwQ0Q4OTEwIC8qIERGR1ZhbHVlUmVjb3ZlcnlP
dmVycmlkZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8q
IERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCREM0OTE1MjI4MDk2MDBD
RDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkRDNEIx
NTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYxRTNBNDYxNTM0Q0JBRjAwMEY5NDU2IC8qIERGR0FyZ3VtZW50UG9zaXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzM2LDYgKzMzNzIsMTAg
QEAKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBN
YXRjaGVzQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1
RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJE
QzRBMTUyMjgwOUEwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyQkRDNEYxNTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1Zh
bHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJEQzUxMTUyMjhGRkQwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODE2RTFCMTU0
Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVCRjJGRjE1NjBGMDZBMDA4RTkyMjIgLyogTmFtZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg2RUJGMzAxMTU2MEYwNkEwMDhFOTIyMiAvKiBOYW1lSW5zdGFuY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NzgsNiArMjQ3OCw4IEBA
IHZvaWQgQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHMKICAgICAgICAgbV9kZmdE
YXRhLT5zcGVjdWxhdGlvblJlY292ZXJ5LnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fZGZnRGF0
YS0+d2Vha1JlZmVyZW5jZXMuc2hyaW5rVG9GaXQoKTsKICAgICAgICAgbV9kZmdEYXRhLT50cmFu
c2l0aW9ucy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHLnBy
ZXBhcmVBbmRTaHJpbmsoKTsKKyAgICAgICAgbV9kZmdEYXRhLT52YXJpYWJsZUV2ZW50U3RyZWFt
LnNocmlua1RvRml0KCk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yODQ1LDcgKzI4NDcsNyBAQCB2
b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgICAgICBkYXRhTG9nKCIgICBi
YyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+bV9jb3Vu
dGVyKTsKICAgICB9CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoVkVSQk9TRV9WQUxVRV9Q
Uk9GSUxFKQogCiBzaXplX3QgQ29kZUJsb2NrOjpwcmVkaWN0ZWRNYWNoaW5lQ29kZVNpemUoKQog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2
aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCwxMCBAQAogI2luY2x1ZGUgIkRGR0NvZGVC
bG9ja3MuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlv
bkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0zODIsNiAr
Mzg0LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9kZmdEYXRhLT50cmFuc2l0
aW9ucy5hcHBlbmQoCiAgICAgICAgICAgICAgICAgV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oKmds
b2JhbERhdGEoKSwgb3duZXJFeGVjdXRhYmxlKCksIGNvZGVPcmlnaW4sIGZyb20sIHRvKSk7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGRzo6TWluaWZpZWRHcmFwaCYgbWluaWZpZWRE
RkcoKQorICAgICAgICB7CisgICAgICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3NhcnkoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPm1pbmlmaWVkREZHOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0mIHZhcmlhYmxlRXZlbnRT
dHJlYW0oKQorICAgICAgICB7CisgICAgICAgICAgICBjcmVhdGVERkdEYXRhSWZOZWNlc3Nhcnko
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2RmZ0RhdGEtPnZhcmlhYmxlRXZlbnRTdHJlYW07Cisg
ICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3Ry
dWN0aW9uKiByZXR1cm5BZGRyZXNzKQpAQCAtMTI4MCw2ICsxMjk0LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBTZWdtZW50ZWRWZWN0b3I8V2F0Y2hwb2ludCwgMSwgMD4gd2F0Y2hw
b2ludHM7CiAgICAgICAgICAgICBWZWN0b3I8V2Vha1JlZmVyZW5jZVRyYW5zaXRpb24+IHRyYW5z
aXRpb25zOwogICAgICAgICAgICAgVmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+ID4gd2Vha1Jl
ZmVyZW5jZXM7CisgICAgICAgICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVF
dmVudFN0cmVhbTsKKyAgICAgICAgICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsK
ICAgICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0
dGlzb25lZDsKICAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0
aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsMTQgQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9ybWF0SlNJbnRlZ2VyID0g
RGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEludGVnZXIsCiAgICAgRGF0YUZvcm1hdEpTRG91Ymxl
ID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERvdWJsZSwKICAgICBEYXRhRm9ybWF0SlNDZWxs
ID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCi0gICAgRGF0YUZvcm1hdEpTQm9vbGVh
biA9IERhdGFGb3JtYXRKUyB8IERhdGFGb3JtYXRCb29sZWFuCisgICAgRGF0YUZvcm1hdEpTQm9v
bGVhbiA9IERhdGFGb3JtYXRKUyB8IERhdGFGb3JtYXRCb29sZWFuLAorICAgIAorICAgIC8vIE1h
cmtlciBkZWxpbWluYXRpbmcgb3JkaW5hcnkgZGF0YSBmb3JtYXRzIGFuZCBPU1Itb25seSBkYXRh
IGZvcm1hdHMuCisgICAgRGF0YUZvcm1hdE9TUk1hcmtlciA9IDMyLCAKKyAgICAKKyAgICAvLyBT
cGVjaWFsIGRhdGEgZm9ybWF0cyB1c2VkIG9ubHkgZm9yIE9TUi4KKyAgICBEYXRhRm9ybWF0RGVh
ZCA9IDMzLCAvLyBJbXBsaWVzIGpzVW5kZWZpbmVkKCkuCisgICAgRGF0YUZvcm1hdEFyZ3VtZW50
cyA9IDM0IC8vIEltcGxpZXMgdGhhdCB0aGUgYXJndW1lbnRzIG9iamVjdCBtdXN0IGJlIHJlaWZp
ZWQuCiB9OwogCiBpbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5k
KG9wZXJhbmQpKTsgfQogICAgIAorICAgIGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90Pihv
cGVyYW5kKSA8IG51bWJlck9mTG9jYWxzKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0T3Bl
cmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICBpZiAob3Bl
cmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKQEAgLTEyNiw2ICsxMzMsMzkgQEAgcHVibGljOgog
ICAgICAgICBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG51bWJlck9mTG9j
YWxzKCk7IH0KKyAgICBjb25zdCBUJiBhdChzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaW5kZXggPCBudW1iZXJPZkFyZ3VtZW50cygpKQorICAgICAgICAgICAgcmV0dXJu
IG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2luZGV4IC0gbnVt
YmVyT2ZBcmd1bWVudHMoKV07CisgICAgfQorICAgIFQmIGF0KHNpemVfdCBpbmRleCkKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA8IG51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICBy
ZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaW5kZXgg
LSBudW1iZXJPZkFyZ3VtZW50cygpXTsKKyAgICB9CisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIFQmIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGJvb2wgaXNBcmd1
bWVudChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgbnVtYmVyT2ZBcmd1bWVu
dHMoKTsgfQorICAgIGJvb2wgaXNWYXJpYWJsZShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
ICFpc0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBhcmd1bWVudEZvckluZGV4KHNpemVfdCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50
IHZhcmlhYmxlRm9ySW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZv
ckluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG51
bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRUb09wZXJhbmQo
aW5kZXgpOworICAgICAgICByZXR1cm4gaW5kZXggLSBudW1iZXJPZkFyZ3VtZW50cygpOworICAg
IH0KKyAgICAKICAgICB2b2lkIHNldE9wZXJhbmRGaXJzdFRpbWUoaW50IG9wZXJhbmQsIGNvbnN0
IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQp
KSB7CkBAIC0xNjUsNiArMjA1LDE2IEBAIHZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRzPFQsIFRy
YWl0cz4mIG8KICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0
cz4KK3ZvaWQgZHVtcE9wZXJhbmRzKGNvbnN0IE9wZXJhbmRzPFQsIFRyYWl0cz4mIG9wZXJhbmRz
LCBGSUxFKiBvdXQpCit7CisgICAgLy8gVXNlIGNvbnN0LWNhc3QgYmVjYXVzZToKKyAgICAvLyAx
KSBJIGRvbid0IGZlZWwgbGlrZSB3cml0aW5nIHRoaXMgY29kZSB0d2ljZSwgYW5kCisgICAgLy8g
MikgU29tZSBkdW1wKCkgbWV0aG9kcyBtYXkgbm90IGJlIGNvbnN0LCBhbmQgSSBkb24ndCByZWFs
bHkgY2FyZSBpZiB0aGF0J3MKKyAgICAvLyAgICB0aGUgY2FzZS4KKyAgICBkdW1wT3BlcmFuZHMo
KmNvbnN0X2Nhc3Q8T3BlcmFuZHM8VCwgVHJhaXRzPio+KCZvcGVyYW5kcyksIG91dCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MTUsNiArODE1LDcgQEAgcHJpdmF0ZToKIAogYm9vbCBwZXJmb3JtQXJndW1lbnRz
U2ltcGxpZmljYXRpb24oR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgQXJndW1lbnRzIFNpbXBsaWZpY2F0aW9uIFBoYXNlIik7CiAgICAgcmV0
dXJuIHJ1blBoYXNlPEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQxLDYgKzMzNDEsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAKIGJvb2wgcGFyc2UoRXhlY1N0YXRlKiBleGVjLCBH
cmFwaCYgZ3JhcGgpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQ
YXJzaW5nIik7CiAjaWYgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEUKICAgICBVTlVTRURfUEFSQU0o
ZXhlYyk7CiAgICAgVU5VU0VEX1BBUkFNKGdyYXBoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYg
KzEzMiw3IEBAIHByaXZhdGU6CiAKIGJvb2wgcGVyZm9ybUNGQShHcmFwaCYgZ3JhcGgpCiB7Cisg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDRkEgUGhhc2UiKTsKICAgICBy
ZXR1cm4gcnVuUGhhc2U8Q0ZBUGhhc2U+KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDcgQEAg
cHJpdmF0ZToKIAogYm9vbCBwZXJmb3JtQ0ZHU2ltcGxpZmljYXRpb24oR3JhcGgmIGdyYXBoKQog
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ0ZHIFNpbXBsaWZpY2F0
aW9uIFBoYXNlIik7CiAgICAgcmV0dXJuIHJ1blBoYXNlPENGR1NpbXBsaWZpY2F0aW9uUGhhc2U+
KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcyLDYgKzExNzIsNyBAQCBwcml2YXRl
OgogCiBib29sIHBlcmZvcm1DU0UoR3JhcGgmIGdyYXBoLCBPcHRpbWl6YXRpb25GaXhwb2ludFN0
YXRlIGZpeHBvaW50U3RhdGUpCiB7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDU0UgUGhhc2UiKTsKICAgICByZXR1cm4gcnVuUGhhc2U8Q1NFUGhhc2U+KGdyYXBoLCBm
aXhwb2ludFN0YXRlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDEyMTcwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDcgQEAgcHVibGljOgogCiBib29sIHBlcmZvcm1D
b25zdGFudEZvbGRpbmcoR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgQ29uc3RhbnQgRm9sZGluZyBQaGFzZSIpOwogICAgIHJldHVybiBydW5Q
aGFzZTxDb25zdGFudEZvbGRpbmdQaGFzZT4oZ3JhcGgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDEyMTcwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwMiw2ICs0MDIsNyBAQCBwcml2YXRlOgogICAgIAogYm9vbCBwZXJmb3JtRml4dXAo
R3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
Rml4dXAgUGhhc2UiKTsKICAgICByZXR1cm4gcnVuUGhhc2U8Rml4dXBQaGFzZT4oZ3JhcGgpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5m
by5oCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dl
bmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDEwIEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCisjaW5jbHVkZSAi
REZHVmFyaWFibGVFdmVudC5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIK
ICNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNTEsNiArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9yZWdpc3RlckZvcm1hdChEYXRhRm9ybWF0Tm9uZSkKICAgICAg
ICAgLCBtX3NwaWxsRm9ybWF0KERhdGFGb3JtYXROb25lKQogICAgICAgICAsIG1fY2FuRmlsbChm
YWxzZSkKKyAgICAgICAgLCBtX2Jvcm5Gb3JPU1IoZmFsc2UpCiAgICAgewogICAgIH0KIApAQCAt
NjEsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9y
bWF0Tm9uZTsKICAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAg
ICBtX2NhbkZpbGwgPSB0cnVlOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAg
ICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXRJbnRlZ2VyKE5vZGVJ
bmRleCBub2RlSW5kZXgsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQpAQCAtNzEsNiAr
NzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsK
ICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAg
ICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAg
IH0KICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODQsNiArODksNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFs
c2U7CiAgICAgICAgIHUuZ3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsK
ICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwogICAgIH0KICNlbGlmIFVTRShKU1ZBTFVFMzJf
NjQpCkBAIC05OCw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNl
OwogICAgICAgICB1LnYudGFnR1BSID0gdGFnR1BSOwogICAgICAgICB1LnYucGF5bG9hZEdQUiA9
IHBheWxvYWRHUFI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAgICBBU1NF
UlQobV91c2VDb3VudCk7CiAgICAgfQogI2VuZGlmCkBAIC0xMDksNiArMTE2LDcgQEAgcHVibGlj
OgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAgIG1fY2Fu
RmlsbCA9IGZhbHNlOwogICAgICAgICB1LmdwciA9IGdwcjsKKyAgICAgICAgbV9ib3JuRm9yT1NS
ID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAgdm9pZCBp
bml0Qm9vbGVhbihOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVn
IGdwcikKQEAgLTExOSw2ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3BpbGxGb3JtYXQg
PSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CiAgICAgICAgIHUu
Z3ByID0gZ3ByOworICAgICAgICBtX2Jvcm5Gb3JPU1IgPSBmYWxzZTsKICAgICAgICAgQVNTRVJU
KG1fdXNlQ291bnQpOwogICAgIH0KICAgICB2b2lkIGluaXREb3VibGUoTm9kZUluZGV4IG5vZGVJ
bmRleCwgdWludDMyX3QgdXNlQ291bnQsIEZQUlJlZyBmcHIpCkBAIC0xMzAsNiArMTM5LDcgQEAg
cHVibGljOgogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gRGF0YUZvcm1hdE5vbmU7CiAgICAgICAg
IG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgbV9ib3Ju
Rm9yT1NSID0gZmFsc2U7CiAgICAgICAgIEFTU0VSVChtX3VzZUNvdW50KTsKICAgICB9CiAgICAg
dm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1c2VDb3VudCwg
R1BSUmVnIGdwcikKQEAgLTE0MCwxOSArMTUwLDQ0IEBAIHB1YmxpYzoKICAgICAgICAgbV9zcGls
bEZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAg
ICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIG1fYm9ybkZvck9TUiA9IGZhbHNlOwogICAgICAg
ICBBU1NFUlQobV91c2VDb3VudCk7CiAgICAgfQogCiAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0
aGUgbm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCgpIHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CisgICAgCisgICAgdm9pZCBub3RpY2VPU1JCaXJ0
aChWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIE5vZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIpCisgICAgeworICAgICAgICBpZiAobV9ub2RlSW5k
ZXggIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWFsaXZl
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2Jvcm5Gb3JPU1IgPSB0cnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUp
CisgICAgICAgICAgICBhcHBlbmRGaWxsKEJpcnRoVG9GaWxsLCBzdHJlYW0pOworICAgICAgICBl
bHNlIGlmIChtX3NwaWxsRm9ybWF0ICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICAgICAgYXBw
ZW5kU3BpbGwoQmlydGhUb1NwaWxsLCBzdHJlYW0sIHZpcnR1YWxSZWdpc3Rlcik7CisgICAgfQog
CiAgICAgLy8gTWFyayB0aGUgdmFsdWUgYXMgaGF2aW5nIGJlZW4gdXNlZCAoZGVjcmVtZW50IHRo
ZSB1c2VDb3VudCkuCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgd2FzIHRoZSBsYXN0IHVz
ZSBvZiB0aGUgdmFsdWUsIGFuZCBhbnkKICAgICAvLyBhc3NvY2lhdGVkIG1hY2hpbmUgcmVnaXN0
ZXJzIG1heSBiZSBmcmVlZC4KLSAgICBib29sIHVzZSgpCisgICAgYm9vbCB1c2UoVmFyaWFibGVF
dmVudFN0cmVhbSYgc3RyZWFtKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdXNlQ291bnQpOwot
ICAgICAgICByZXR1cm4gIS0tbV91c2VDb3VudDsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhLS1t
X3VzZUNvdW50OworICAgICAgICAKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBtX2Jvcm5Gb3JPU1Ip
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICAg
ICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpkZWF0aChtX25vZGVJbmRleCkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAog
ICAgIC8vIFVzZWQgdG8gY2hlY2sgdGhlIG9wZXJhbmRzIG9mIG9wZXJhdGlvbnMgdG8gc2VlIGlm
IHRoZXkgYXJlIG9uCkBAIC0yMjUsNyArMjYwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8v
IENhbGxlZCB3aGVuIGEgVmlydHVhbFJlZ2lzdGVyIGlzIGJlaW5nIHNwaWxsZWQgdG8gdGhlIFJl
Z2lzdGVyRmlsZSBmb3IgdGhlIGZpcnN0IHRpbWUuCi0gICAgdm9pZCBzcGlsbChEYXRhRm9ybWF0
IHNwaWxsRm9ybWF0KQorICAgIHZvaWQgc3BpbGwoVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFt
LCBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyLCBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0
KQogICAgIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGJlIHNwaWxsIHZhbHVlcyB0aGF0IGRv
bid0IG5lZWQgc3BpbGxpbmcuCiAgICAgICAgIEFTU0VSVCghbV9jYW5GaWxsKTsKQEAgLTIzNiwx
NSArMjcxLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3Jt
YXROb25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gc3BpbGxGb3JtYXQ7CiAgICAgICAgIG1f
Y2FuRmlsbCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAg
ICAgICAgICAgYXBwZW5kU3BpbGwoU3BpbGwsIHN0cmVhbSwgdmlydHVhbFJlZ2lzdGVyKTsKICAg
ICB9CiAKICAgICAvLyBDYWxsZWQgb24gdmFsdWVzIHRoYXQgZG9uJ3QgbmVlZCBzcGlsbGluZyAo
Y29uc3RhbnRzIGFuZCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gYWxyZWFkeSBiZWVuIHNwaWxs
ZWQpLCB0byBtYXJrIHRoZW0gYXMgbm8gbG9uZ2VyIGJlaW5nIGluIG1hY2hpbmUgcmVnaXN0ZXJz
LgotICAgIHZvaWQgc2V0U3BpbGxlZCgpCisgICAgdm9pZCBzZXRTcGlsbGVkKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcikKICAgICB7
CiAgICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB2YWx1ZXMgdGhhdCBkb24ndCBu
ZWVkIHNwaWxsaW5nLCBhbmQgYXJlIGN1cnJlbnRseSBpbiByZWdpc3RlcnMuCiAgICAgICAgIEFT
U0VSVChtX2NhbkZpbGwgJiYgbV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CiAg
ICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRTcGlsbChTcGlsbCwgc3Ry
ZWFtLCB2aXJ0dWFsUmVnaXN0ZXIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGtpbGxTcGlsbGVk
KCkKQEAgLTI1Niw0NiArMjk3LDY3IEBAIHB1YmxpYzoKICAgICAvLyBSZWNvcmQgdGhhdCB0aGlz
IHZhbHVlIGlzIGZpbGxlZCBpbnRvIG1hY2hpbmUgcmVnaXN0ZXJzLAogICAgIC8vIHRyYWNraW5n
IHdoaWNoIHJlZ2lzdGVycywgYW5kIHdoYXQgZm9ybWF0IHRoZSB2YWx1ZSBoYXMuCiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB2b2lkIGZpbGxKU1ZhbHVlKEdQUlJlZyBncHIsIERhdGFGb3JtYXQg
Zm9ybWF0ID0gRGF0YUZvcm1hdEpTKQorICAgIHZvaWQgZmlsbEpTVmFsdWUoVmFyaWFibGVFdmVu
dFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGZvcm1hdCA9IERhdGFGb3Jt
YXRKUykKICAgICB7CiAgICAgICAgIEFTU0VSVChmb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAg
ICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gZm9ybWF0OwogICAgICAgICB1LmdwciA9IGdwcjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxs
KEZpbGwsIHN0cmVhbSk7CiAgICAgfQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lk
IGZpbGxKU1ZhbHVlKEdQUlJlZyB0YWdHUFIsIEdQUlJlZyBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0
IGZvcm1hdCA9IERhdGFGb3JtYXRKUykKKyAgICB2b2lkIGZpbGxKU1ZhbHVlKFZhcmlhYmxlRXZl
bnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIHRhZ0dQUiwgR1BSUmVnIHBheWxvYWRHUFIsIERhdGFG
b3JtYXQgZm9ybWF0ID0gRGF0YUZvcm1hdEpTKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZvcm1h
dCAmIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBmb3JtYXQ7CiAg
ICAgICAgIHUudi50YWdHUFIgPSB0YWdHUFI7IC8vIEZJWE1FOiBmb3IgSlNWYWx1ZXMgd2l0aCBr
bm93biB0eXBlIChib29sZWFuLCBpbnRlZ2VyLCBjZWxsIGV0Yy4pIG5vIHRhZ0dQUiBpcyBuZWVk
ZWQ/CiAgICAgICAgIHUudi5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsKKyAgICAgICAgCisgICAg
ICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisgICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVh
bSk7CiAgICAgfQotICAgIHZvaWQgZmlsbENlbGwoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxD
ZWxsKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Q2VsbDsKICAgICAgICAgdS5ncHIgPSBn
cHI7CisgICAgICAgIAorICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBw
ZW5kRmlsbChGaWxsLCBzdHJlYW0pOwogICAgIH0KICNlbmRpZgotICAgIHZvaWQgZmlsbEludGVn
ZXIoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxJbnRlZ2VyKFZhcmlhYmxlRXZlbnRTdHJlYW0m
IHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBE
YXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAorICAgICAg
ICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBzdHJlYW0p
OwogICAgIH0KLSAgICB2b2lkIGZpbGxCb29sZWFuKEdQUlJlZyBncHIpCisgICAgdm9pZCBmaWxs
Qm9vbGVhbihWYXJpYWJsZUV2ZW50U3RyZWFtJiBzdHJlYW0sIEdQUlJlZyBncHIpCiAgICAgewog
ICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdEJvb2xlYW47CiAgICAgICAgIHUu
Z3ByID0gZ3ByOworICAgICAgICAKKyAgICAgICAgaWYgKG1fYm9ybkZvck9TUikKKyAgICAgICAg
ICAgIGFwcGVuZEZpbGwoRmlsbCwgc3RyZWFtKTsKICAgICB9Ci0gICAgdm9pZCBmaWxsRG91Ymxl
KEZQUlJlZyBmcHIpCisgICAgdm9pZCBmaWxsRG91YmxlKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0
cmVhbSwgRlBSUmVnIGZwcikKICAgICB7CiAgICAgICAgIEFTU0VSVChmcHIgIT0gSW52YWxpZEZQ
UlJlZyk7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOwogICAg
ICAgICB1LmZwciA9IGZwcjsKKyAgICAgICAgCisgICAgICAgIGlmIChtX2Jvcm5Gb3JPU1IpCisg
ICAgICAgICAgICBhcHBlbmRGaWxsKEZpbGwsIHN0cmVhbSk7CiAgICAgfQotICAgIHZvaWQgZmls
bFN0b3JhZ2UoR1BSUmVnIGdwcikKKyAgICB2b2lkIGZpbGxTdG9yYWdlKFZhcmlhYmxlRXZlbnRT
dHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKICAgICB7CiAgICAgICAgIG1fcmVnaXN0ZXJGb3Jt
YXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKICAgICAgICAgdS5ncHIgPSBncHI7CisgICAgICAgIAor
ICAgICAgICBpZiAobV9ib3JuRm9yT1NSKQorICAgICAgICAgICAgYXBwZW5kRmlsbChGaWxsLCBz
dHJlYW0pOwogICAgIH0KIAogICAgIGJvb2wgYWxpdmUoKQpAQCAtMzA0LDEyICszNjYsMzMgQEAg
cHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVuZEZpbGwoVmFyaWFibGVF
dmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAg
ICAgc3RyZWFtLmFwcGVuZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpmaWxsRlBSKGtpbmQsIG1fbm9k
ZUluZGV4LCB1LmZwcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpIHsKKyAgICAgICAgICAgIHN0cmVhbS5hcHBlbmRBbmRMb2coVmFyaWFibGVFdmVudDo6Zmls
bFBhaXIoa2luZCwgbV9ub2RlSW5kZXgsIHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBzdHJlYW0uYXBw
ZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6OmZpbGxHUFIoa2luZCwgbV9ub2RlSW5kZXgsIHUuZ3By
LCBtX3JlZ2lzdGVyRm9ybWF0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kU3BpbGwo
VmFyaWFibGVFdmVudEtpbmQga2luZCwgVmFyaWFibGVFdmVudFN0cmVhbSYgc3RyZWFtLCBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgc3RyZWFtLmFwcGVu
ZEFuZExvZyhWYXJpYWJsZUV2ZW50OjpzcGlsbChraW5kLCBtX25vZGVJbmRleCwgdmlydHVhbFJl
Z2lzdGVyLCBtX3NwaWxsRm9ybWF0KSk7CisgICAgfQorICAgIAogICAgIC8vIFRoZSBpbmRleCBv
ZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgc3RvcmVkIGluIHRoaXMgdmlydHVhbCByZWdpc3Rl
ci4KICAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CiAgICAgdWludDMyX3QgbV91c2VDb3VudDsK
ICAgICBEYXRhRm9ybWF0IG1fcmVnaXN0ZXJGb3JtYXQ7CiAgICAgRGF0YUZvcm1hdCBtX3NwaWxs
Rm9ybWF0OwogICAgIGJvb2wgbV9jYW5GaWxsOworICAgIGJvb2wgbV9ib3JuRm9yT1NSOwogICAg
IHVuaW9uIHsKICAgICAgICAgR1BSUmVnIGdwcjsKICAgICAgICAgRlBSUmVnIGZwcjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDExICsyMDMsMTQgQEAgdm9pZCBKSVRDb21waWxlcjo6
bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICAgICAgY29kZUJsb2NrKCktPndhdGNocG9p
bnQoZXhpdC5tX3dhdGNocG9pbnRJbmRleCkuY29ycmVjdExhYmVscyhsaW5rQnVmZmVyKTsKICAg
ICB9CiAgICAgCisgICAgY29kZUJsb2NrKCktPm1pbmlmaWVkREZHKCkuc2V0T3JpZ2luYWxHcmFw
aFNpemUobV9ncmFwaC5zaXplKCkpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2Rl
QmxvY2s6OkxhdGVTaHJpbmspOwogfQogCiBib29sIEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENv
ZGUmIGVudHJ5KQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQmFj
a2VuZCIpOworCiAgICAgc2V0U3RhcnRPZkNvZGUoKTsKICAgICBjb21waWxlRW50cnkoKTsKICAg
ICBTcGVjdWxhdGl2ZUpJVCBzcGVjdWxhdGl2ZSgqdGhpcyk7CkBAIC0yNDEsNiArMjQ0LDggQEAg
Ym9vbCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogCiBib29sIEpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kZSYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgZW50cnlXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiREZHIEJhY2tlbmQiKTsKKyAgICAKICAgICBzZXRTdGFydE9mQ29kZSgpOwogICAgIGNv
bXBpbGVFbnRyeSgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlm
aWVkR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkR3JhcGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWRHcmFwaC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTWluaWZp
ZWRHcmFwaF9oCisjZGVmaW5lIERGR01pbmlmaWVkR3JhcGhfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR01pbmlmaWVk
Tm9kZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIE1pbmlmaWVkR3JhcGggeworcHVibGljOgorICAgIE1pbmlmaWVkR3Jh
cGgoKSB7IH0KKworICAgIE1pbmlmaWVkTm9kZSogYXQoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9saXN0LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICBNaW5pZmllZE5vZGUqIGVudHJ5ID0KKyAgICAgICAgICAgIGJpbmFyeVNlYXJjaDxN
aW5pZmllZE5vZGUsIE5vZGVJbmRleCwgTWluaWZpZWROb2RlOjpnZXRJbmRleD4oCisgICAgICAg
ICAgICAgICAgbV9saXN0LmJlZ2luKCksIG1fbGlzdC5zaXplKCksIG5vZGVJbmRleCwgV1RGOjpL
ZXlNdXN0Tm90QmVQcmVzZW50SW5BcnJheSk7CisgICAgICAgIGlmIChlbnRyeS0+aW5kZXgoKSAh
PSBub2RlSW5kZXgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGVudHJ5
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZChjb25zdCBNaW5pZmllZE5vZGUmIG5vZGUp
CisgICAgeworICAgICAgICBtX2xpc3QuYXBwZW5kKG5vZGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHByZXBhcmVBbmRTaHJpbmsoKQorICAgIHsKKyAgICAgICAgc3RkOjpzb3J0KG1fbGlzdC5i
ZWdpbigpLCBtX2xpc3QuZW5kKCksIE1pbmlmaWVkTm9kZTo6Y29tcGFyZUJ5Tm9kZUluZGV4KTsK
KyAgICAgICAgbV9saXN0LnNocmlua1RvRml0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
T3JpZ2luYWxHcmFwaFNpemUoc2l6ZV90IHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorICAgIAor
ICAgIHNpemVfdCBvcmlnaW5hbEdyYXBoU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
Citwcml2YXRlOgorICAgIFZlY3RvcjxNaW5pZmllZE5vZGU+IG1fbGlzdDsKKyAgICBzaXplX3Qg
bV9zaXplOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdNaW5pZmllZEdyYXBoX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTWluaWZp
ZWROb2RlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitNaW5pZmllZE5vZGUgTWluaWZp
ZWROb2RlOjpmcm9tTm9kZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlJiBub2RlKQoreworICAg
IEFTU0VSVChiZWxvbmdzSW5NaW5pZmllZEdyYXBoKG5vZGUub3AoKSkpOworICAgIE1pbmlmaWVk
Tm9kZSByZXN1bHQ7CisgICAgcmVzdWx0Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgcmVzdWx0
Lm1fb3AgPSBub2RlLm9wKCk7CisgICAgaWYgKGhhc0NoaWxkKG5vZGUub3AoKSkpCisgICAgICAg
IHJlc3VsdC5tX2NoaWxkT3JJbmZvID0gbm9kZS5jaGlsZDEoKS5pbmRleCgpOworICAgIGVsc2Ug
aWYgKGhhc0NvbnN0YW50TnVtYmVyKG5vZGUub3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2NoaWxk
T3JJbmZvID0gbm9kZS5jb25zdGFudE51bWJlcigpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoaGFzV2Vha0NvbnN0YW50KG5vZGUub3AoKSkpOworICAgICAgICByZXN1bHQubV9jaGlsZE9y
SW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUud2Vha0NvbnN0YW50KCkpOworICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdNaW5pZmllZE5vZGVfaAorI2RlZmluZSBERkdNaW5pZmllZE5vZGVfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGU7CisKK2lubGluZSBib29sIGJlbG9uZ3NJbk1p
bmlmaWVkR3JhcGgoTm9kZVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICBjYXNlIFZhbHVl
VG9JbnQzMjoKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBVSW50MzJUb051bWJl
cjoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2NsYXNzIE1pbmlmaWVk
Tm9kZSB7CitwdWJsaWM6CisgICAgTWluaWZpZWROb2RlKCkgeyB9CisgICAgCisgICAgc3RhdGlj
IE1pbmlmaWVkTm9kZSBmcm9tTm9kZShOb2RlSW5kZXgsIE5vZGUmKTsKKyAgICAKKyAgICBOb2Rl
SW5kZXggaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgTm9kZVR5cGUgb3Ao
KSBjb25zdCB7IHJldHVybiBtX29wOyB9CisgICAgCisgICAgYm9vbCBoYXNDaGlsZDEoKSBjb25z
dCB7IHJldHVybiBoYXNDaGlsZChtX29wKTsgfQorICAgIAorICAgIE5vZGVJbmRleCBjaGlsZDEo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NoaWxkKG1fb3ApKTsKKyAgICAgICAg
cmV0dXJuIG1fY2hpbGRPckluZm87CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzQ29uc3RhbnQo
KSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcigpIHx8IGhhc1dlYWtDb25zdGFudCgp
OyB9CisgICAgCisgICAgYm9vbCBoYXNDb25zdGFudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGhh
c0NvbnN0YW50TnVtYmVyKG1fb3ApOyB9CisgICAgCisgICAgdW5zaWduZWQgY29uc3RhbnROdW1i
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50TnVtYmVyKG1fb3Ap
KTsKKyAgICAgICAgcmV0dXJuIG1fY2hpbGRPckluZm87CisgICAgfQorICAgIAorICAgIGJvb2wg
aGFzV2Vha0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzV2Vha0NvbnN0YW50KG1fb3ApOyB9
CisgICAgCisgICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1dlYWtDb25zdGFudChtX29wKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8SlNDZWxsKj4obV9jaGlsZE9ySW5mbyk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBOb2Rl
SW5kZXggZ2V0SW5kZXgoTWluaWZpZWROb2RlKiBub2RlKSB7IHJldHVybiBub2RlLT5pbmRleCgp
OyB9CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUJ5Tm9kZUluZGV4KGNvbnN0IE1pbmlmaWVkTm9k
ZSYgYSwgY29uc3QgTWluaWZpZWROb2RlJiBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGEubV9p
bmRleCA8IGIubV9pbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBib29s
IGhhc0NoaWxkKE5vZGVUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToK
KyAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50TnVtYmVyKE5vZGVUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50OworICAgIH0KKyAgICBzdGF0
aWMgYm9vbCBoYXNXZWFrQ29uc3RhbnQoTm9kZVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0eXBlID09IFdlYWtKU0NvbnN0YW50OworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXgg
bV9pbmRleDsKKyAgICBOb2RlVHlwZSBtX29wOworICAgIHVpbnRwdHJfdCBtX2NoaWxkT3JJbmZv
OyAvLyBOb2RlcyBpbiB0aGUgbWluaWZpZWQgZ3JhcGggaGF2ZSBvbmx5IG9uZSBjaGlsZCBlYWNo
LgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdNaW5pZmllZE5vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJTcGVj
dWxhdGVkVHlwZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgogI2luY2x1ZGUgIlZhbHVl
UHJvZmlsZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC03MDcsNyAr
NzA4LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQobV92aXJ0dWFsUmVnaXN0ZXIg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdp
c3RlcjsKICAgICB9Ci0KKyAgICAKICAgICB2b2lkIHNldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFs
UmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1Jlc3Vs
dCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZU51bVZhcmlhYmxlc0ZvckNv
ZGVPcmlnaW4oCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4pCi17Ci0gICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci0gICAgcmV0dXJuCi0g
ICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArCi0gICAgICAg
IGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7Ci19Ci0KLU9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCitPU1JFeGl0OjpPU1JF
eGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
ZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAg
ICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9jaGVjayhjaGVjaykKQEAg
LTU0LDI0ICs0NCwxMCBAQCBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
CiAgICAgLCBtX3dhdGNocG9pbnRJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCiAgICAgLCBtX2tpbmQoa2luZCkKICAgICAsIG1fY291bnQoMCkKLSAgICAsIG1fYXJn
dW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQotICAgICwgbV92YXJpYWJsZXMoY29tcHV0
ZU51bVZhcmlhYmxlc0ZvckNvZGVPcmlnaW4oaml0LT5tX2ppdC5ncmFwaCgpLm1fcHJvZmlsZWRC
bG9jaywgaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpKQorICAgICwgbV9zdHJlYW1JbmRleChzdHJl
YW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQog
ewogICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQot
ICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKLSAgICBmb3IgKHVuc2lnbmVkIHZhcmlh
YmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCi0gICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
aml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwotfQotCi12b2lkIE9TUkV4aXQ6OmR1bXAoRklM
RSogb3V0KSBjb25zdAotewotICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKLSAgICAgICAgbV9hcmd1bWVudHNb
YXJndW1lbnRdLmR1bXAob3V0KTsKLSAgICBmcHJpbnRmKG91dCwgIiA6ICIpOwotICAgIGZvciAo
dW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2
YXJpYWJsZSkKLSAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdLmR1bXAob3V0KTsKIH0KIAog
Ym9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJs
b2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTIxNzA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIgogI2lu
Y2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1
ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCkBAIC04Myw3ICs4NCw3IEBAIHByaXZhdGU6CiAvLyBUaGlzIHN0cnVjdHVy
ZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5n
IGludG8gYmFzZWxpbmUgY29kZS4KIHN0cnVjdCBPU1JFeGl0IHsKLSAgICBPU1JFeGl0KEV4aXRL
aW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0g
MCk7CisgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5z
aWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwogICAgIApAQCAtMTAxLDM4ICsxMDIsNiBA
QCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgRXhpdEtpbmQgbV9raW5kOwogICAgIHVpbnQzMl90IG1f
Y291bnQ7CiAgICAgCi0gICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFs
dWVSZWNvdmVyaWVzIHdoaWxlIGJlaW5nCi0gICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZl
cnN1cyB2YXJpYWJsZS4KLSAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1
cm4gbV9hcmd1bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50c1tpbmRleF07Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRl
eCAtIG1fYXJndW1lbnRzLnNpemUoKV07Ci0gICAgfQotICAgIFZhbHVlUmVjb3ZlcnkmIHZhbHVl
UmVjb3ZlcnlGb3JPcGVyYW5kKGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKQotICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW29w
ZXJhbmRUb0FyZ3VtZW50KG9wZXJhbmQpXTsKLSAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW29w
ZXJhbmRdOwotICAgIH0KLSAgICBib29sIGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7IHJl
dHVybiBpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0gICAgYm9vbCBpc1Zhcmlh
YmxlKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9Ci0gICAg
aW50IGFyZ3VtZW50Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGluZGV4OwotICAgIH0KLSAgICBpbnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Ci0g
ICAgfQotICAgIGludCBvcGVyYW5kRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQoaW5kZXgpOwotICAgICAgICByZXR1cm4gaW5kZXggLSBt
X2FyZ3VtZW50cy5zaXplKCk7Ci0gICAgfQotICAgIAogICAgIGJvb2wgY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2spCiAgICAgewogICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5k
SXNDb3VudGFibGUobV9raW5kKSkKQEAgLTE0MCwxMSArMTA5LDEwIEBAIHN0cnVjdCBPU1JFeGl0
IHsKICAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhk
ZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2NrKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBk
dW1wKEZJTEUqIG91dCkgY29uc3Q7Ci0gICAgCi0gICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+
IG1fYXJndW1lbnRzOwotICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsK
KyAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwor
ICAgIAorICAgIFJlZlB0cjxWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92
ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaWYgRU5BQkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVF
MzJfNjQpCiAKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFM
b2cuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIE9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNv
dmVyeSogcmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
T1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBT
cGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKIHsKICAgICAvLyAxKSBQcm8tZm9ybWEgc3R1
ZmYuCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQpAQCAtNDQsNyArNDUsNyBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIGRhdGFMb2coIiAt
PiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CiAg
ICAgfQogICAgIGRhdGFMb2coIikgYXQgSklUIG9mZnNldCAweCV4ICAiLCBtX2ppdC5kZWJ1Z09m
ZnNldCgpKTsKLSAgICBleGl0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkdW1wT3BlcmFu
ZHMob3BlcmFuZHMsIFdURjo6ZGF0YUZpbGUoKSk7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZF
UkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKICAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0lu
Zm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CkBAIC0xMTMs
NyArMTE0LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
IC8vICAgIEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIG9mIHRoZW0uIEFsc28gc2VlIGlmIHRo
ZXJlIGFyZSBhbnkgY29uc3RhbnRzLAogICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFu
eSBGUFIgc2xvdHMsIGFuZCBhbnkgdW5ib3hlZCBpbnRzLgogICAgICAgICAgICAgCi0gICAgVmVj
dG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUo
KSk7CisgICAgVmVjdG9yPGJvb2w+IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyhvcGVyYW5kcy5u
dW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzLnNpemUoKTsgKytpKQogICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnNbaV0gPSBmYWxzZTsKIApAQCAtMTMzLDggKzEzNCw4IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsK
ICAgICBib29sIGhhdmVBcmd1bWVudHMgPSBmYWxzZTsKICAgICAKLSAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShp
bmRleCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewog
ICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CkBAIC0xNTAsOCArMTUxLDggQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRo
aXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKICAg
ICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6
ZWQgZm9yIHRoZSBjYXNlcyBpbgogICAgICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFw
cGVuLgotICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludCll
eGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5t
X3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpb3BlcmFuZHMu
bnVtYmVyT2ZMb2NhbHMoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmFuZHMubG9j
YWwocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BS
OgogICAgICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKQEAgLTIxNCwxOSAr
MjE1LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAv
LyA1KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2VycyBhbmQgY2VsbHMsIGV4Y2VwdCBm
b3IgdGhvc2UgaW4gcmVnaXN0ZXJzLgogCiAgICAgaWYgKGhhdmVVbmJveGVkSW50MzJJblJlZ2lz
dGVyRmlsZSB8fCBoYXZlVW5ib3hlZENlbGxJblJlZ2lzdGVyRmlsZSB8fCBoYXZlVW5ib3hlZEJv
b2xlYW5JblJlZ2lzdGVyRmlsZSkgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9w
ZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkSW50MzI6
Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKHN0YXRpY19j
YXN0PFZpcnR1YWxSZWdpc3Rlcj4oZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSkpOworICAg
ICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJG
aWxlQXNVbmJveGVkQ2VsbDoKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6
OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KGV4aXQub3BlcmFuZEZvckluZGV4
KGluZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChp
bmRleCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQWxy
ZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkQm9vbGVhbjoKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5U
YWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+
KGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcp
LCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0yMzksMTkgKzI0MCwxOSBAQCB2b2lkIE9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8gICAgTm90ZSB0aGF0IEdQUnMg
ZG8gbm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBl
Y3QgdGhhdAogICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBs
ZWFzdCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgogICAgIAotICAgIGluaXRpYWxp
emVQb2lzb25lZChleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgaW5pdGlhbGl6ZVBvaXNv
bmVkKG9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCkpOwogICAgIHVuc2lnbmVkIGN1cnJlbnRQb2lz
b25JbmRleCA9IDA7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQg
b3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICBp
bnQgb3BlcmFuZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAgICAgICAgIHN3
aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAg
ICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKICAgICAgICAgY2FzZSBVbmJveGVkQm9vbGVhbklu
R1BSOgotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAg
ICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZTRVRP
RihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwotICAgICAgICAgICAg
ICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0g
PSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5k
aWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5k
ZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIHVpbnQzMl90IHRhZyA9IEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWc7CkBAIC0yNjYsMTAgKzI2NywxMCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJblBhaXI6Ci0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBw
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsK
KyAgICAgICAgICAgIGlmIChvcGVyYW5kcy5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbb3BlcmFuZHMudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CiAgICAg
ICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNvdmVyeS50YWdHUFIoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsgT0JK
RUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHJlY292ZXJ5LnBheWxvYWRHUFIoKSwgcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7
Ci0gICAgICAgICAgICAgICAgbV9wb2lzb25TY3JhdGNoSW5kaWNlc1tleGl0LnZhcmlhYmxlRm9y
SW5kZXgoaW5kZXgpXSA9IGN1cnJlbnRQb2lzb25JbmRleDsKKyAgICAgICAgICAgICAgICBtX3Bv
aXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1
cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihyZWNv
dmVyeS50YWdHUFIoKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rlcilv
cGVyYW5kKSk7CkBAIC0yOTEsNyArMjkyLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShyZWNvdmVyeS5ncHIoKSwgRlBSSW5mbzo6ZnBSZWdUMCk7CiAgICAgICAgICAg
ICBtX2ppdC5hZGREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2Vt
Ymx5SGVscGVyczo6dHdvVG9UaGUzMiksIEZQUkluZm86OmZwUmVnVDApOwotICAgICAgICAgICAg
aWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4
aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAgICAgICAgICBpZiAob3BlcmFuZHMu
aXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW29wZXJhbmRzLnZh
cmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBv
aXNvbkluZGV4KSwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3Vi
bGUoRlBSSW5mbzo6ZnBSZWdUMCwgYWRkcmVzc0dQUik7CiAgICAgICAgICAgICB9IGVsc2UKQEAg
LTMwMSw3ICszMDIsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKSB7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZHMuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgewogICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIocmVjb3ZlcnkuZ3ByKCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6SW50MzJUYWcpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciAr
IGN1cnJlbnRQb2lzb25JbmRleCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMxNSw4ICszMTYs
OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3NHUFIsIEZQUkluZm86OmZwUmVnVDApOwogICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihteVNjcmF0Y2gsIGFkZHJlc3NHUFIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4
KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0pIHsKLSAgICAgICAgICAgICAgICBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFi
bGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OworICAgICAgICAgICAgaWYg
KG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tv
cGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKKyAgICAgICAgICAgICAgICBtX3Bv
aXNvblNjcmF0Y2hJbmRpY2VzW29wZXJhbmRzLnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSA9IGN1
cnJlbnRQb2lzb25JbmRleDsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9pc29uSW5kZXgrKzsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzI5LDE2ICszMzAsMTYgQEAg
dm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vIDcpIER1bXAg
YWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3Rv
cmFnZSBpZiB0aGUKICAgICAvLyAgICBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBv
aXNvbmVkLgogICAgIGlmIChoYXZlRlBScykgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5k
ZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6
ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChl
eGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZh
cmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFy
aWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJs
ZUZvckluZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShy
ZWNvdmVyeS5mcHIoKSwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgpOwot
ICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZvcklu
ZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9wb2lz
b25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBjdXJy
ZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShyZWNv
dmVyeS5mcHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmVEb3VibGUocmVjb3ZlcnkuZnByKCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAg
fQogICAgIH0KICAgICAKQEAgLTM1Niw4ICszNTcsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJh
bnRlZWQuCiAgICAgICAgIAogICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXgg
PSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVy
YW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUo
KSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNl
bWVudEluZGV4KyspKTsKQEAgLTM4MSwxNSArMzgyLDE1IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVy
Ojpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAg
ICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVy
YW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU6CiAgICAgICAgICAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGU6CiAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3Rlcihk
aXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsr
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6dG9SZWdpc3Rl
cihkaXNwbGFjZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtNDE0LDggKzQxNSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIC8vIHRvIHRoZWlyIG5ldyAob2xkIEpJVCkgbG9j
YXRpb25zLgogICAgICAgICAKICAgICAgICAgICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOwotICAgICAgICAgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVS
ZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBH
UFJJbmZvOjpyZWdUMCk7CkBAIC00MzYsMzAgKzQzNywzMCBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAg
ICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAg
ICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVm
ZmVyICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMucGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVy
ICsgc2NyYXRjaEluZGV4KSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9y
LCBhc0JpdHMudGFnKSwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZp
cnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQXNzZW1ibHlIZWxwZXJzOjp0
YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86
OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRz
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaElu
ZGV4Kys7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRj
aEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToK
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyspICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSwgR1BSSW5mbzo6cmVnVDApOwot
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxS
ZWdpc3RlcilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5
bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBCb29s
ZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihyZWludGVycHJldF9jYXN0PGNoYXIqPihzY3JhdGNoRGF0YUJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
cGF5bG9hZCksIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwg
QXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFu
ZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQ
UkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cilvcGVyYW5kcy5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNDczLDExICs0NzQsMTEgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgIC8vIDkpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgogICAgIAogICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgewotICAg
ICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50
KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICBm
b3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KW9wZXJh
bmRzLm51bWJlck9mTG9jYWxzKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CiAgICAgICAgICAgICBp
ZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2aXJ0dWFsUmVnaXN0ZXJdKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJpYWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAg
ICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHMubG9jYWwo
dmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKICAgICAgICAgICAgIGNhc2UgSW5HUFI6CiAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgpAQCAtNTE5LDE2ICs1MjAsMTYgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihqc1VuZGVmaW5lZCgpLnRhZygpKSwgR1BSSW5mbzo6cmVnVDEpOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRz
W2luZGV4XTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFu
dCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChyZWNvdmVyeS5j
b25zdGFudCgpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBc3NlbWJseUhlbHBl
cnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRl
eCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnBheWxv
YWQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIocmVjb3ZlcnkuY29uc3RhbnQoKS50YWcoKSks
IEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9y
SW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihyZWNvdmVyeS5jb25zdGFudCgpLnBheWxvYWQoKSksIEFzc2Vt
Ymx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKHJlY292ZXJ5LmNvbnN0YW50KCkudGFnKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShy
ZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTAgKzI5LDExIEBACiAjaWYgRU5B
QkxFKERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQpCiAKICNpbmNsdWRlICJERkdPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCi12b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhp
dCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCit2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFs
dWVSZWNvdmVyeT4mIG9wZXJhbmRzLCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKIHsK
ICAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQpAQCAtNDQsNyArNDUsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29u
c3QgCiAgICAgICAgIGRhdGFMb2coIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CiAgICAgfQogICAgIGRhdGFMb2coIikgICIpOwotICAgIGV4
aXQuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgIGR1bXBPcGVyYW5kcyhvcGVyYW5kcywgV1RG
OjpkYXRhRmlsZSgpKTsKICNlbmRpZgogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElP
Tl9GQUlMVVJFKQogICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0g
bmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKQEAgLTExMCw3ICsxMTEsNyBAQCB2b2lk
IE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8gICAgR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYgdGhlcmUgYXJlIGFueSBjb25z
dGFudHMsCiAgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywgYW55IEZQUiBzbG90cywgYW5k
IGFueSB1bmJveGVkIGludHMuCiAgICAgICAgICAgICAKLSAgICBWZWN0b3I8Ym9vbD4gcG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKTsKKyAgICBWZWN0b3I8
Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKG9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCkp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMu
c2l6ZSgpOyArK2kpCiAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tpXSA9IGZhbHNl
OwogCkBAIC0xMjksOCArMTMwLDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgIGJvb2wgaGF2ZVVJbnQzMnMgPSBmYWxzZTsKICAgICBib29sIGhhdmVBcmd1
bWVudHMgPSBmYWxzZTsKICAgICAKLSAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAg
ICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAg
ICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEludDMy
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgIGNhc2UgRG91YmxlRGlzcGxhY2VkSW5S
ZWdpc3RlckZpbGU6CkBAIC0xNDUsOCArMTQ2LDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgLy8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBl
ZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVjdCB0aGlzIGNhc2UKICAgICAgICAgICAgIC8v
IHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBvZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBj
YXNlcyBpbgogICAgICAgICAgICAgLy8gd2hpY2ggaXQgZG9lcyBub3QgaGFwcGVuLgotICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFi
bGVzLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1ty
ZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVjaG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGlm
IChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQpb3BlcmFuZHMubnVtYmVyT2ZMb2Nh
bHMoKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmFuZHMubG9jYWwocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkpLnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBJ
bkdQUjoKICAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgogICAgICAgICAg
ICAgICAgIGNhc2UgVUludDMySW5HUFI6CkBAIC0yMjQsOCArMjI1LDggQEAgdm9pZCBPU1JFeGl0
Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIC8vIDUpIFBlcmZvcm0gYWxsIHJlYm94
aW5nIG9mIGludGVnZXJzLgogICAgIAogICAgIGlmIChoYXZlVW5ib3hlZEludDMycyB8fCBoYXZl
VUludDMycykgewotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4
XTsKICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CiAgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LmdwcigpICE9IGFscmVhZHlCb3hlZCkKQEAgLTIzMyw3ICsyMzQsNyBAQCB2b2lkIE9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5i
b3hlZEludDMyOgotICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFRhZ1R5cGVOdW1iZXIgPj4gMzIp
KSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihl
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3Rv
cmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4o
VGFnVHlwZU51bWJlciA+PiAzMikpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFVJbnQzMkluR1BSOiB7CkBAIC0yODQsMTkgKzI4NSwxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhh
dmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZlRlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAog
ICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUgcG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUg
R1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVkLgogICAgIAotICAgIGluaXRpYWxpemVQb2lzb25l
ZChleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgaW5pdGlhbGl6ZVBvaXNvbmVkKG9wZXJh
bmRzLm51bWJlck9mTG9jYWxzKCkpOwogICAgIHVuc2lnbmVkIGN1cnJlbnRQb2lzb25JbmRleCA9
IDA7CiAgICAgCi0gICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKLSAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwotICAgICAgICBpbnQgb3BlcmFuZCA9
IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOworICAgICAgICBpbnQgb3BlcmFu
ZCA9IG9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCk7CiAgICAgICAgIHN3aXRjaCAocmVj
b3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgY2FzZSBV
bmJveGVkSW50MzJJbkdQUjoKICAgICAgICAgY2FzZSBVSW50MzJJbkdQUjoKLSAgICAgICAgICAg
IGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tl
eGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRz
LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52
YXJpYWJsZUZvckluZGV4KGluZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaERhdGFCdWZmZXIgKyBjdXJyZW50UG9pc29uSW5kZXgp
OwotICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbZXhpdC52YXJpYWJsZUZv
ckluZGV4KGluZGV4KV0gPSBjdXJyZW50UG9pc29uSW5kZXg7CisgICAgICAgICAgICAgICAgbV9w
b2lzb25TY3JhdGNoSW5kaWNlc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGluZGV4KV0gPSBj
dXJyZW50UG9pc29uSW5kZXg7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvaXNvbkluZGV4Kys7
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWNv
dmVyeS5ncHIoKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZCkpOwpAQCAtMzExLDggKzMxMiw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICBpZiAoaGF2ZUZQUnMpIHsKICAgICAgICAgLy8gNykgQm94IGFs
bCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKICAg
ICAgICAgCi0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9m
UmVjb3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwog
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigp
OwpAQCAtMzIzLDE3ICszMjQsMTcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IAogICAgICAgICAvLyA4KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVy
IGZpbGUsIG9yIHRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UgaWYKICAgICAgICAgLy8gICAgdGhlIGRl
c3RpbmF0aW9uIHZpcnR1YWwgcmVnaXN0ZXIgaXMgcG9pc29uZWQuCiAgICAgICAgIAotICAgICAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgewotICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgb3BlcmFuZHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgIGlm
IChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86
OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKLSAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFi
bGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5k
ZXgoaW5kZXgpXSkgeworICAgICAgICAgICAgaWYgKG9wZXJhbmRzLmlzVmFyaWFibGUoaW5kZXgp
ICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tvcGVyYW5kcy52YXJpYWJsZUZvckluZGV4KGlu
ZGV4KV0pIHsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIHNjcmF0Y2hEYXRh
QnVmZmVyICsgY3VycmVudFBvaXNvbkluZGV4KTsKLSAgICAgICAgICAgICAgICBtX3BvaXNvblNj
cmF0Y2hJbmRpY2VzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNv
bkluZGV4OworICAgICAgICAgICAgICAgIG1fcG9pc29uU2NyYXRjaEluZGljZXNbb3BlcmFuZHMu
dmFyaWFibGVGb3JJbmRleChpbmRleCldID0gY3VycmVudFBvaXNvbkluZGV4OwogICAgICAgICAg
ICAgICAgIGN1cnJlbnRQb2lzb25JbmRleCsrOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9qaXQuc3RvcmVQdHIoZ3ByLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKQEAgLTM0MSwxMyArMzQyLDEzIEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAKICAgICAvLyA5KSBCb3ggYWxsIHVuYm94ZWQg
ZG91YmxlcyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KICAgICBpZiAoaGF2ZVVuYm94ZWREb3VibGVz
KSB7Ci0gICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiBy
ZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwogICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEFscmVhZHlJblJlZ2lzdGVyRmls
ZUFzVW5ib3hlZERvdWJsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSwgRlBSSW5mbzo6ZnBSZWdUMCk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJhbmRGb3JJbmRleChpbmRleCkpLCBGUFJJbmZv
OjpmcFJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1Qw
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICB9CiAgICAgfQogICAg
IApAQCAtMzYzLDggKzM2NCw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChj
b25zdCAKICAgICAgICAgICAgIC8vIHRoYXQgaXMgZmFyIGZyb20gZ3VhcmFudGVlZC4KICAgICAg
ICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJhbmRzW2luZGV4XTsK
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4Kysp
KTsKQEAgLTM5MCwxMyArMzkxLDEzIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBkaXNwbGFjZW1l
bnRJbmRleCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7
ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IG9wZXJhbmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmls
ZToKICAgICAgICAgICAgICAgICBjYXNlIEludDMyRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFj
ZW1lbnRJbmRleCsrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
aml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmRzLm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC00MjIsOCArNDIzLDgg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAg
Ly8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCiAgICAgICAgIAogICAgICAgICAg
ICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnM7Ci0gICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewotICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBvcGVyYW5kcy5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IG9wZXJh
bmRzW2luZGV4XTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZToKQEAgLTQ1MSwxNCArNDUyLDE0IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpj
b21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICAgICBz
Y3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKLSAgICAgICAg
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmllcygp
OyArK2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IG9wZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwog
ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKICAgICAgICAg
ICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgIGNh
c2UgSW50MzJEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKHNjcmF0Y2hEYXRhQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
b3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAg
LTQ3MywxMSArNDc0LDExIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAvLyAxMSkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlcnMuCiAgICAg
CiAgICAgaWYgKG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Ci0gICAgICAgIGZv
ciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5t
X3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgIGZvciAoaW50
IHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpb3BlcmFuZHMubnVt
YmVyT2ZMb2NhbHMoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKICAgICAgICAgICAgIGlmICghcG9p
c29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kcy5sb2NhbCh2aXJ0dWFs
UmVnaXN0ZXIpOwogICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewog
ICAgICAgICAgICAgY2FzZSBJbkdQUjoKICAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5H
UFI6CkBAIC01MDAsMTQgKzUwMSwxNCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQogICAgICAgICAgICAgbV9qaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG9w
ZXJhbmRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVj
b3ZlcnkuY29uc3RhbnQoKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxS
ZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZHMub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw4IEBAIGV4dGVybiAiQyIgewogCiB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0
ZSogZXhlYykKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIE9TUiBF
eGl0IENvbXBpbGF0aW9uIik7CisgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKQEAgLTY0LDEyICs2
NiwyMiBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgICAg
IC0+aml0Q29tcGlsZShleGVjKTsKICAgICB9CiAgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgdmFs
dWUgcmVjb3Zlcmllcy4KKyAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsKKyAg
ICBjb2RlQmxvY2stPnZhcmlhYmxlRXZlbnRTdHJlYW0oKS5yZWNvbnN0cnVjdChjb2RlQmxvY2ss
IGV4aXQubV9jb2RlT3JpZ2luLCBjb2RlQmxvY2stPm1pbmlmaWVkREZHKCksIGV4aXQubV9zdHJl
YW1JbmRleCwgb3BlcmFuZHMpOworICAgIAorICAgIC8vIFRoZXJlIG1heSBiZSBhbiBvdmVycmlk
ZSwgZm9yIGZvcndhcmQgc3BlY3VsYXRpb25zLgorICAgIGlmICghIWV4aXQubV92YWx1ZVJlY292
ZXJ5T3ZlcnJpZGUpIHsKKyAgICAgICAgb3BlcmFuZHMuc2V0T3BlcmFuZCgKKyAgICAgICAgICAg
IGV4aXQubV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGUtPm9wZXJhbmQsIGV4aXQubV92YWx1ZVJlY292
ZXJ5T3ZlcnJpZGUtPnJlY292ZXJ5KTsKKyAgICB9CisgICAgCiAgICAgU3BlY3VsYXRpb25SZWNv
dmVyeSogcmVjb3ZlcnkgPSAwOwogICAgIGlmIChleGl0Lm1fcmVjb3ZlcnlJbmRleCkKICAgICAg
ICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4IC0gMSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZGF0
YUxvZygiR2VuZXJhdGluZyBPU1IgZXhpdCAjJXUgKGJjIyV1LCBAJXUsICVzKSBmb3IgY29kZSBi
bG9jayAlcC5cbiIsIGV4aXRJbmRleCwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwg
ZXhpdC5tX25vZGVJbmRleCwgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIGNvZGVCbG9j
ayk7CisgICAgZGF0YUxvZygiR2VuZXJhdGluZyBPU1IgZXhpdCAjJXUgKHNlcSMldSwgYmMjJXUs
IEAldSwgJXMpIGZvciBjb2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fc3RyZWFt
SW5kZXgsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2RlSW5kZXgs
IGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKICAg
ICB7CkBAIC03Nyw3ICs4OSw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVj
KQogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAKICAgICAgICAg
aml0LmppdEFzc2VydEhhc1ZhbGlkQ2FsbEZyYW1lKCk7Ci0gICAgICAgIGV4aXRDb21waWxlci5j
b21waWxlRXhpdChleGl0LCByZWNvdmVyeSk7CisgICAgICAgIGV4aXRDb21waWxlci5jb21waWxl
RXhpdChleGl0LCBvcGVyYW5kcywgcmVjb3ZlcnkpOwogICAgICAgICAKICAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2NrKTsKICAgICAgICAg
ZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxMjE3MDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29tcGlsZUV4aXQoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKKyAg
ICB2b2lkIGNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmLCBjb25zdCBPcGVyYW5kczxWYWx1ZVJl
Y292ZXJ5PiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKIAogcHJpdmF0ZToKICNpZiAhQVNTRVJU
X0RJU0FCTEVECkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTIxNzA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwOCw2ICs5MDgsNyBAQCBwcml2YXRlOgogICAgIAog
Ym9vbCBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKEdyYXBoJiBncmFwaCkKIHsKKyAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFByZWRpY3Rpb24gUHJvcGFnYXRpb24g
UGhhc2UiKTsKICAgICByZXR1cm4gcnVuUGhhc2U8UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U+
KGdyYXBoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZWR1bmRh
bnRQaGlFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
MjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlZHVuZGFudFBoaUVsaW1p
bmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAgcHJpdmF0
ZToKIAogYm9vbCBwZXJmb3JtUmVkdW5kYW50UGhpRWxpbWluYXRpb24oR3JhcGgmIGdyYXBoKQog
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUmVkdW5kYW50IFBoaSBF
bGltaW5hdGlvbiBQaGFzZSIpOwogICAgIHJldHVybiBydW5QaGFzZTxSZWR1bmRhbnRQaGlFbGlt
aW5hdGlvblBoYXNlPihncmFwaCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTIxNzA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxJbnRlZ2VyKE5vZGVJCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgfQogCi0gICAgICAg
IGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAg
ICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTkxLDcgKzkxLDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlSQogICAgICAgICBtX2dwcnMucmVsZWFzZSh0YWdHUFIp
OwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BSKTsKICAgICAgICAgbV9ncHJzLnJl
dGFpbihwYXlsb2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJJbnRlZ2VyKTsKLSAg
ICAgICAgaW5mby5maWxsSW50ZWdlcihwYXlsb2FkR1BSKTsKKyAgICAgICAgaW5mby5maWxsSW50
ZWdlcigqbV9zdHJlYW0sIHBheWxvYWRHUFIpOwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRh
Rm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CiAgICAgfQpAQCAtMTIz
LDEzICsxMjMsMTMgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgog
ICAgICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5m
aWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3Ry
ZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChpc051bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBG
UFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KG5vZGVJbmRleCksIGZwcik7CiAgICAgICAgICAg
ICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJs
ZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAg
ICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZnByOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
c2hvdWxkIG5vdCBiZSByZWFjaGFibGU/CkBAIC0xNDIsNyArMTQyLDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIg
PSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAgICAgICAgICAg
ICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7
Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAg
aW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZnByOwogICAgICAgICAgICAgfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICAgICAgICAgIGhhc1VuYm94ZWREb3Vi
bGUubGluaygmbV9qaXQpOwogCiAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxEb3Vi
bGUoZnByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAg
ICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA3LDcgKzIwNyw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAgICAgbV9n
cHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHBheWxvYWRHUFIpOwog
ICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91
YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERv
dWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAg
ICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNTIsNyArMjUyLDcgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2
YWx1ZU9mSlNDb25zdGFudChub2RlSW5kZXgpLnBheWxvYWQoKSksIHBheWxvYWRHUFIpOwogICAg
ICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVh
bFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAgICAgICAgaW5mby5maWxsSlNW
YWx1ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpID8gRGF0
YUZvcm1hdEpTSW50ZWdlciA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBpc0ludDMyQ29uc3RhbnQobm9k
ZUluZGV4KSA/IERhdGFGb3JtYXRKU0ludGVnZXIgOiBEYXRhRm9ybWF0SlMpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxG
b3JtYXQoKTsKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9u
ZSAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFnZSk7CkBAIC0yNzgsNyArMjc4LDcg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoTm9kZUluZAogICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHBh
eWxvYWRHUFIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbih0YWdHUFIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihwYXls
b2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUodGFnR1BSLCBwYXlsb2FkR1BSLCBzcGlsbEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlNEb3VibGUgPyBEYXRhRm9ybWF0SlMgOiBzcGlsbEZvcm1hdCk7CisgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBzcGlsbEZv
cm1hdCA9PSBEYXRhRm9ybWF0SlNEb3VibGUgPyBEYXRhRm9ybWF0SlMgOiBzcGlsbEZvcm1hdCk7
CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMyMCw3ICszMjAsNyBAQCBi
b29sIFNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgIG1fZ3Bycy5y
ZWxlYXNlKGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZmlsbEZvcm1hdCk7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGZpbGxGb3JtYXQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTMzNSw3ICszMzUsNyBAQCBib29sIFNwZWN1bGF0aXZlSklU
OjpmaWxsSlNWYWx1ZShOb2RlSW5kCiAgICAgICAgIG1fZnBycy5yZWxlYXNlKG9sZEZQUik7CiAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVySlMpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKHRhZ0dQUiwgcGF5bG9hZEdQ
UiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIHRh
Z0dQUiwgcGF5bG9hZEdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xMDY1LDcgKzEwNjUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGVJbmRleCkpLCBncHIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBn
cHIpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAg
ICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CkBAIC0xMDgwLDcgKzEwODAsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIEdQUlJlZyBncHIg
PSBhbGxvY2F0ZSgpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICBpbmZvLmZpbGxJbnRl
Z2VyKGdwcik7CisgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAg
ICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICB9CkBAIC0xMDk4LDcgKzEwOTgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7CiAgICAgICAg
IG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwogICAgICAgICBtX2dwcnMucmV0YWluKHBheWxv
YWRHUFIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckludGVnZXIpOwotICAgICAgICBpbmZv
LmZpbGxJbnRlZ2VyKHBheWxvYWRHUFIpOworICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0
cmVhbSwgcGF5bG9hZEdQUik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0
dXJuLgogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAg
cmV0dXJuIHBheWxvYWRHUFI7CkBAIC0xMTYwLDEzICsxMTYwLDEzIEBAIEZQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJ
bW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlSW5kZXgpKSwgZ3ByKTsKICAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3Rh
bnQpOwotICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICB1
bmxvY2soZ3ByKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2Rl
SW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChu
b2RlSW5kZXgpLCBmcHIpOwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0
dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5m
aWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVh
bSwgZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMTc3LDcgKzExNzcs
NyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAg
ICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIp
OwogICAgICAgICAgICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsK
KyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAKQEAgLTEyMDAsNyArMTIwMCw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAg
ICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsKIAogICAgICAgICAgICAgbV9mcHJz
LnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAg
ICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUo
Km1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAg
ICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgfQpAQCAtMTIzOCw3ICsxMjM4LDcgQEAgRlBSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2dwcnMudW5sb2Nr
KHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy51bmxvY2socGF5bG9hZEdQUik7CiAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0
cmVhbSwgZnByKTsKICAgICAgICAgaW5mby5raWxsU3BpbGxlZCgpOwogICAgICAgICByZXR1cm4g
ZnByOwogICAgIH0KQEAgLTEyOTYsNyArMTI5Niw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwog
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoanNWYWx1ZS5hc0NlbGwoKSksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxD
ZWxsKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0cmVhbSwgZ3ByKTsKICAg
ICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KIApAQCAtMTMwNiw3ICsxMzA2LDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3By
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5mby5maWxs
Q2VsbChncHIpOworICAgICAgICBpbmZvLmZpbGxDZWxsKCptX3N0cmVhbSwgZ3ByKTsKICAgICAg
ICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTEzMjgsNyArMTMyOCw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgbV9ncHJzLnJlbGVhc2UodGFn
R1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAgIG1fZ3By
cy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ2VsbCk7Ci0g
ICAgICAgIGluZm8uZmlsbENlbGwocGF5bG9hZEdQUik7CisgICAgICAgIGluZm8uZmlsbENlbGwo
Km1fc3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAgICAgcmV0dXJuIHBheWxvYWRHUFI7CiAgICAg
fQogCkBAIC0xMzcwLDcgKzEzNzAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAg
ICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFu
dCk7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
anNWYWx1ZS5hc0Jvb2xlYW4oKSksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFu
KGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3ByKTsKICAg
ICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KIApAQCAtMTM4Miw3ICsxMzgyLDcgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3By
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKLSAgICAgICAgaW5mby5maWxs
Qm9vbGVhbihncHIpOworICAgICAgICBpbmZvLmZpbGxCb29sZWFuKCptX3N0cmVhbSwgZ3ByKTsK
ICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CiAKQEAgLTE0MDUsNyArMTQwNSw3IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLnJlbGVh
c2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocGF5bG9hZEdQUiwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQm9v
bGVhbik7Ci0gICAgICAgIGluZm8uZmlsbEJvb2xlYW4ocGF5bG9hZEdQUik7CisgICAgICAgIGlu
Zm8uZmlsbEJvb2xlYW4oKm1fc3RyZWFtLCBwYXlsb2FkR1BSKTsKICAgICAgICAgcmV0dXJuIHBh
eWxvYWRHUFI7CiAgICAgfQogCkBAIC0yMDA0LDcgKzIwMDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgdGhh
dCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCiAgICAg
ICAgICAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJlZ2lzdGVycyBvciBv
dGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsCiAgICAgICAgICAgICAgICAgLy8g
YnV0IHRoYXQgaXQgaXMgc3RvcmVkIGFzIGEgZG91YmxlLgotICAgICAgICAgICAgICAgIHZhbHVl
U291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoRG91
YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUu
bG9jYWwoKSwgVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJl
ZGljdGlvbigpOwpAQCAtMjAxMiwxNCArMjAxMiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgRG91YmxlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZURvdWJsZSh2
YWx1ZS5mcHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAg
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgICAgIHZh
bHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3VyY2Uo
RG91YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5v
ZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoRG91YmxlSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAgICAgICByZWNv
cmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChpc0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIwMjksMTQgKzIwMjks
MTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6
OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJy
YXk6OnNfaW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3Rl
ckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFs
dWVTb3VyY2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGVkVHlwZSkpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZh
bHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShC
b29sZWFuSW5SZWdpc3RlckZpbGUpOworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5v
ZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoQm9vbGVhbkluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIwNDQsNyArMjA0
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
bV9qaXQuc3RvcmUzMih2YWx1ZS5wYXlsb2FkR1BSKCksIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KG5vZGUubG9jYWwoKSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLnRhZ0dQUigpLCBK
SVRDb21waWxlcjo6dGFnRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2Rl
LmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJl
Y29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTIxNzA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxJ
bnRlZ2VyKE5vZGVJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6SW1tMzIodmFsdWVPZkludDMyQ29uc3RhbnQobm9kZUluZGV4KSksIGdwcik7Ci0gICAgICAg
ICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmls
bEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9
IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAg
ICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEludGVn
ZXIoTm9kZUkKICAgICAgICAgLy8gU2luY2Ugd2Ugc3RhdGljYWxseSBrbm93IHRoYXQgd2UncmUg
ZmlsbGluZyBhbiBpbnRlZ2VyLCBhbmQgdmFsdWVzCiAgICAgICAgIC8vIGluIHRoZSBSZWdpc3Rl
ckZpbGUgYXJlIGJveGVkLCB0aGlzIG11c3QgYmUgRGF0YUZvcm1hdEpTSW50ZWdlci4KICAgICAg
ICAgLy8gV2Ugd2lsbCBjaGVjayB0aGlzIHdpdGggYSBqaXRBc3NlcnQgYmVsb3cuCi0gICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAg
ICAgIHVubG9jayhncHIpOwogICAgIH0KICAgICAKQEAgLTEyNyw3ICsxMjcsNyBAQCBGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHNob3VsZCBub3QgYmUgcmVhY2hhYmxlPwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBn
cHIpOwogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihn
cHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwog
ICAgICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc051
bWJlckNvbnN0YW50KG5vZGVJbmRleCkpIHsKICAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0g
ZnByQWxsb2NhdGUoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAgICAg
ICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVy
RG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmcHI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KQEAgLTE0NCw3ICsxNDQsNyBAQCBGUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxEb3VibGUoTm9kZUluCiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29k
ZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBpbmZvLmZp
bGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgICAg
IHVubG9jayhncHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewpAQCAtMTU0LDcg
KzE1NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAgICAg
ICAgICAgICAgICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IGZwcik7CiAgICAgICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3Rl
ciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZw
cik7CisgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMTYzLDcgKzE2Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShO
b2RlSW4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdw
cik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgICAgIHVu
bG9jayhncHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTc0
LDcgKzE3NCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERvdWJsZShOb2RlSW4KICAg
ICAgICAgICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJT
cGlsbGVkKTsKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKCptX3N0cmVhbSwgZ3ByLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgdW5sb2Nr
KGdwcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMTYsNyAr
MjE2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAg
ICBtX2dwcnMudW5sb2NrKGpzVmFsdWVHcHIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBH
cHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyRG91YmxlKTsKLSAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8u
ZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsK
ICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9CkBAIC0yNDcsNyArMjQ3LDcgQEAgRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGVJbgogICAgICAgICBtX2dwcnMucmVsZWFzZShn
cHIpOwogICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyRG91YmxlKTsKIAotICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAgICAgaW5m
by5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9
CiAKQEAgLTI3NCwxOCArMjc0LDE4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUoTm9kZUkKIAogICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHsKLSAgICAgICAgICAgICAgICBpbmZv
LmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29u
c3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSkgewotICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJs
ZSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91
YmxlLCB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVChp
c0pTQ29uc3RhbnQobm9kZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3Jt
YXRKUyk7CisgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKQEAgLTMwNSw3ICsz
MDUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGVJCiAgICAgICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAm
IERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBncHI7
CiAgICAgfQpAQCAtMzIxLDcgKzMyMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpT
VmFsdWUoTm9kZUkKICAgICAgICAgfQogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAg
ICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7Ci0gICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBAIC0zMzAsNyArMzMwLDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZShOb2RlSQogICAgICAgICBHUFJSZWcgZ3ByID0gYm94
RG91YmxlKGZwcik7CiAKICAgICAgICAgLy8gVXBkYXRlIGFsbCBpbmZvCi0gICAgICAgIGluZm8u
ZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOworICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAgICBtX2Zw
cnMucmVsZWFzZShmcHIpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVySlMpOwogCkBAIC0xMDQ3LDcgKzEwNDcsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgQVNT
RVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKTsKICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpLCBn
cHIpOwotICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihncHIpOworICAgICAgICAgICAgaW5m
by5maWxsSW50ZWdlcigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQg
PSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0K
QEAgLTEwNjIsNyArMTA2Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEkKICAgICAgICAgICAgIC8vIElmIHdlIGtub3cgdGhpcyB3YXMgc3BpbGxlZCBhcyBhbiBp
bnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hlY2tpbmcuCiAgICAgICAgICAgICBpZiAoc3Ry
aWN0KSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50
ZWdlcihncHIpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoKm1fc3RyZWFtLCBn
cHIpOwogICAgICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwog
ICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9CkBAIC0xMDcxLDE0ICsx
MDcxLDE0IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAg
ICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdw
cik7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CisgICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsK
ICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRKU0ludGVnZXI7CiAgICAgICAg
ICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKIAogICAgICAgICAvLyBG
aWxsIGFzIEpTVmFsdWUsIGFuZCBmYWxsIHRocm91Z2guCi0gICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgq
bV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTSW50ZWdlcik7CiAgICAgICAgIG1fZ3Bycy51bmxv
Y2soZ3ByKTsKICAgICB9CiAKQEAgLTEwODgsNyArMTA4OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKICAgICAg
ICAgaWYgKCFpc0ludDMyU3BlY3VsYXRpb24odHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKLSAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVn
ZXIpOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0
SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAg
ICAgICAgIGlmICghc3RyaWN0KSB7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9y
bWF0SlNJbnRlZ2VyOwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlKCk7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICAgICAgICAgIGluZm8uZmlsbEludGVnZXIoZ3ByKTsKKyAgICAgICAgICAgICAgICBp
bmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBncHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0
cihncHIsIHJlc3VsdCk7CkBAIC0xMTkxLDcgKzExOTEsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKICAg
ICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKKyAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNOdW1iZXJD
b25zdGFudChub2RlSW5kZXgpKSB7CkBAIC0xMjAxLDcgKzEyMDEsNyBAQCBGUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7
CiAKICAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsK
KyAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKQEAgLTEyMTQsNyArMTIxNCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCBmcHIpOwogICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0gICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnBy
KTsKKyAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7CiAgICAgICAg
ICAgICByZXR1cm4gZnByOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEyMjMsNyArMTIy
Myw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlclNwaWxsZWQpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxJ
bnRlZ2VyKGdwcik7CisgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3By
KTsKICAgICAgICAgICAgIHVubG9jayhncHIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTEyMzQsNyArMTIzNCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZURvdWIKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7
CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyU3BpbGxlZCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRy
ZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgc3BpbGxGb3JtYXQpOworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAgRlBSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBtX2dwcnMudW5sb2NrKGpz
VmFsdWVHcHIpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRlbXBHcHIpOwogICAgICAgICBtX2Zw
cnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAg
ICAgaW5mby5maWxsRG91YmxlKGZwcik7CisgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJl
YW0sIGZwcik7CiAgICAgICAgIGluZm8ua2lsbFNwaWxsZWQoKTsKICAgICAgICAgcmV0dXJuIGZw
cjsKICAgICB9CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKGdwcik7CiAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwogCi0g
ICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIpOworICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1f
c3RyZWFtLCBmcHIpOwogICAgICAgICByZXR1cm4gZnByOwogICAgIH0KIApAQCAtMTM0Nyw3ICsx
MzQ3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAg
ICAgICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoanNWYWx1ZS5h
c0NlbGwoKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERh
dGFGb3JtYXRKU0NlbGwpOworICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3Ry
ZWFtLCBncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKQEAgLTEzNTcsMTAgKzEzNTcs
MTAgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBt
X2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgZ3ByKTsKIAotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgaWYgKCFpc0NlbGxTcGVjdWxhdGlvbih0eXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1h
dEpTQ2VsbCk7CisgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFG
b3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KIApAQCAtMTM3Niw3ICsx
Mzc2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAg
ICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBpZiAoIWlzQ2VsbFNwZWN1bGF0aW9uKHR5cGUp
KQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIp
LCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9z
dHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAg
fQogCkBAIC0xNDIyLDcgKzE0MjIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAg
ICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29s
ZWFuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CkBAIC0xNDMyLDEzICsxNDMyLDEzIEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1
YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAKLSAgICAgICAg
aW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmICghaXNCb29s
ZWFuU3BlY3VsYXRpb24odHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgs
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJv
b2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxz
ZSkpLCBncHIpOwogICAgICAgICB9Ci0gICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdw
ciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQogCkBA
IC0xNDU3LDcgKzE0NTcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVC
b29sCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0
aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykp
OwogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAgIH0KLSAgICAgICAgaW5mby5maWxsSlNW
YWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICB9CiAKQEAgLTIwNTUsNyArMjA1NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mg
bm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxv
Y2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwKICAgICAgICAgICAgICAgICAvLyBidXQgdGhh
dCBpdCBpcyBzdG9yZWQgYXMgYSBkb3VibGUuCi0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShEb3VibGVJblJl
Z2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9kZS5sb2NhbCgp
LCBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAKQEAgLTIwNjQsNyArMjA2NCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBTcGVj
dWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZv
cihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUu
bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShJbnQzMkluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAg
ICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2FsKCksIFZhbHVlU291cmNlKEludDMySW5SZWdp
c3RlckZpbGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChpc0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIwNzQs
MTQgKzIwNzQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OmNsYXNz
SW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJkpTQXJyYXk6OnNf
aW5mbykpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VG
b3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShDZWxsSW5SZWdpc3RlckZpbGUp
OworICAgICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKG5vZGUubG9jYWwoKSwgVmFsdWVTb3Vy
Y2UoQ2VsbEluUmVnaXN0ZXJGaWxlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGVkVHlw
ZSkpIHsKICAgICAgICAgICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBib29sZWFuKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGJvb2xl
YW4uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgICAgICB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEJv
b2xlYW5JblJlZ2lzdGVyRmlsZSk7CisgICAgICAgICAgICAgICAgcmVjb3JkU2V0TG9jYWwobm9k
ZS5sb2NhbCgpLCBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjA5MCw3ICsyMDkw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBt
X2ppdC5zdG9yZVB0cih2YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5s
b2NhbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKIAotICAgICAgICB2
YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZWNvcmRTZXRMb2NhbChub2RlLmxvY2Fs
KCksIFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAg
U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwgbV92YXJpYWJs
ZXMoaml0LmdyYXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX3N0YXRlKG1faml0LmdyYXBoKCkp
CisgICAgLCBtX3N0cmVhbSgmaml0LmNvZGVCbG9jaygpLT52YXJpYWJsZUV2ZW50U3RyZWFtKCkp
CisgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5jb2RlQmxvY2soKS0+bWluaWZpZWRERkcoKSkK
ICAgICAsIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMoZmFsc2UpCiB7CiB9CkBAIC05OSw3ICsx
MDEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKE5vZGVJCiAgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3By
KTsKLSAgICAgICAgICAgIGluZm8uZmlsbFN0b3JhZ2UoZ3ByKTsKKyAgICAgICAgICAgIGluZm8u
ZmlsbFN0b3JhZ2UoKm1fc3RyZWFtLCBncHIpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTc4MCwzOSArNzgyLDYgQEAgRlBSVGVtcG9yYXJ5OjpGUFJU
ZW1wb3JhcnkoU3BlY3VsYXRpdmVKSQogfQogI2VuZGlmCiAKLXZvaWQgVmFsdWVTb3VyY2U6OmR1
bXAoRklMRSogb3V0KSBjb25zdAotewotICAgIHN3aXRjaCAoa2luZCgpKSB7Ci0gICAgY2FzZSBT
b3VyY2VOb3RTZXQ6Ci0gICAgICAgIGZwcmludGYob3V0LCAiTm90U2V0Iik7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU291cmNlSXNEZWFkOgotICAgICAgICBmcHJpbnRmKG91dCwgIklzRGVh
ZCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZhbHVlSW5SZWdpc3RlckZpbGU6Ci0gICAg
ICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW50MzJJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJJbnQzMiIpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENlbGxJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50
ZihvdXQsICJDZWxsIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQm9vbGVhbkluUmVnaXN0
ZXJGaWxlOgotICAgICAgICBmcHJpbnRmKG91dCwgIkJvb2wiKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgZnByaW50ZihvdXQsICJEb3Vi
bGUiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6Ci0gICAgICAg
IGZwcmludGYob3V0LCAiQXJndW1lbnRzIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSGF2
ZU5vZGU6Ci0gICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgs
IEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJy
YW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwpAQCAtOTUzLDEyICs5MjIsMzAgQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgIHJldHVybiBmYWxzZTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm90aWNlT1NSQmlydGgoTm9kZUluZGV4IG5vZGVJ
bmRleCwgTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUuaGFzVmlydHVhbFJlZ2lzdGVyKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lz
dGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9
IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAgICBpbmZvLm5vdGlj
ZU9TUkJpcnRoKCptX3N0cmVhbSwgbm9kZUluZGV4LCB2aXJ0dWFsUmVnaXN0ZXIpOworfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQogewogICAgIEFT
U0VSVChub2RlLm9wKCkgPT0gU2V0TG9jYWwpOwogICAgIAotICAgIHNldE5vZGVJbmRleEZvck9w
ZXJhbmQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpOwogICAgIG1fbGFzdFNl
dE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CisgICAgCisgICAgTm9kZSYgY2hpbGQgPSBhdChub2Rl
LmNoaWxkMSgpKTsKKyAgICBub3RpY2VPU1JCaXJ0aChub2RlLmNoaWxkMSgpLmluZGV4KCksIGNo
aWxkKTsKKyAgICAKKyAgICBpZiAoY2hpbGQub3AoKSA9PSBVSW50MzJUb051bWJlcikKKyAgICAg
ICAgbm90aWNlT1NSQmlydGgoY2hpbGQuY2hpbGQxKCkuaW5kZXgoKSwgYXQoY2hpbGQuY2hpbGQx
KCkpKTsKKyAgICAKKyAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlhYmxlRXZlbnQ6Om1v
dkhpbnQobm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2RlLmxvY2FsKCkpKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKQEAgLTk4MywxMSArOTcw
LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2pp
dC5icmVha3BvaW50KCk7CiAjZW5kaWYKICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgZGF0YUxvZygiU2V0dGluZyB1cCBzdGF0ZSBmb3IgYmxvY2sgIyV1OiAiLCBtX2Js
b2NrKTsKKyNlbmRpZgorICAgIAorICAgIG1fc3RyZWFtLT5hcHBlbmRBbmRMb2coVmFyaWFibGVF
dmVudDo6cmVzZXQoKSk7CisgICAgCiAgICAgbV9qaXQuaml0QXNzZXJ0SGFzVmFsaWRDYWxsRnJh
bWUoKTsKIAogICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVz
QXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVT
b3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IHZhbHVlU291cmNlOworICAgICAgICBtX3N0cmVhbS0+YXBwZW5kQW5kTG9nKFZhcmlh
YmxlRXZlbnQ6OnNldExvY2FsKGFyZ3VtZW50VG9PcGVyYW5kKGkpLCB2YWx1ZVNvdXJjZS5kYXRh
Rm9ybWF0KCkpKTsKKyAgICB9CiAgICAgCiAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgIG1fc3Rh
dGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CkBAIC05OTUsMTggKzk5MSwyMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgQVNTRVJUKG1fdmFyaWFibGVz
LnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwor
ICAgICAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9
PSBOb05vZGUpCi0gICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJj
ZUlzRGVhZCk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKFNvdXJjZUlz
RGVhZCk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRh
KCktPmlzQXJndW1lbnRzQWxpYXMoKSkKLSAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFs
dWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKKyAgICAgICAgICAgIHZhbHVlU291cmNlID0gVmFs
dWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKICAgICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4
KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNDYXB0dXJlZCgpKQotICAgICAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgICAg
IHZhbHVlU291cmNlID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAg
IGVsc2UgaWYgKCFhdChub2RlSW5kZXgpLnJlZkNvdW50KCkpCi0gICAgICAgICAgICBtX3Zhcmlh
Ymxlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAgICAgICB2YWx1ZVNv
dXJjZSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5v
ZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQot
ICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVy
RmlsZSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJjZSA9IFZhbHVlU291cmNlKERvdWJsZUluUmVn
aXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBW
YWx1ZVNvdXJjZTo6Zm9yU3BlY3VsYXRpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICB2YWx1ZVNvdXJj
ZSA9IFZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpKTsKKyAgICAgICAgbV92YXJpYWJs
ZXNbaV0gPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFuZExvZyhWYXJp
YWJsZUV2ZW50OjpzZXRMb2NhbChpLCB2YWx1ZVNvdXJjZS5kYXRhRm9ybWF0KCkpKTsKICAgICB9
CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7CkBAIC0xMDE5LDYgKzEwMTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgICAgICB2ZXJpZmljYXRpb25TdWNjZWVkZWQubGluaygmbV9qaXQp
OwogICAgIH0KIAorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBkYXRhTG9nKCJc
biIpOworI2VuZGlmCisKICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxv
Y2sgPCBibG9jay5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKICAgICAgICAgbV9jb21waWxl
SW5kZXggPSBibG9ja1ttX2luZGV4SW5CbG9ja107CiAgICAgICAgIG1faml0LnNldEZvck5vZGUo
bV9jb21waWxlSW5kZXgpOwpAQCAtMTAyOSw2ICsxMDMyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgIGRhdGFMb2coIlNwZWN1bGF0aXZl
SklUIHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAo
aW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQu
ZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7
CisgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgorICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVk
Tm9kZTo6ZnJvbU5vZGUobV9jb21waWxlSW5kZXgsIG5vZGUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAg
ICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMTAwLDYgKzExMDgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgobm9kZS5vcCgpKSkg
eworICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6
ZnJvbU5vZGUobV9jb21waWxlSW5kZXgsIG5vZGUpKTsKKyAgICAgICAgICAgICAgICBub3RpY2VP
U1JCaXJ0aChtX2NvbXBpbGVJbmRleCwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICBpZiAobm9kZS5o
YXNSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKQEAgLTExMjAsMTYgKzExMzMs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAjZW5kaWYKICAg
ICAgICAgfQogICAgICAgICAKLSNpZiBERkdfRU5BQkxFKFZFUkJPU0VfVkFMVUVfUkVDT1ZFUklF
UykKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGFyZ3VtZW50VG9PcGVyYW5k
KGkpKS5kdW1wKHN0ZGVycik7Ci0gICAgICAgIAotICAgICAgICBkYXRhTG9nKCIgOiAiKTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwgKGludCltX3Zh
cmlhYmxlcy5zaXplKCk7ICsrb3BlcmFuZCkKLSAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKLSNlbmRpZgotCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJcbiIpOwogI2VuZGlmCkBAIC0xMzY2LDE1
NiArMTM2OSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiAK
IFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNv
bnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKIHsKLSAgICBzd2l0Y2ggKHZhbHVlU291cmNl
LmtpbmQoKSkgewotICAgIGNhc2UgU291cmNlSXNEZWFkOgotICAgICAgICByZXR1cm4gVmFsdWVS
ZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIAotICAgIGNhc2UgVmFs
dWVJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJ
blJlZ2lzdGVyRmlsZSgpOwotICAgICAgICAKLSAgICBjYXNlIEludDMySW5SZWdpc3RlckZpbGU6
Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1Vu
Ym94ZWRJbnQzMigpOwotCi0gICAgY2FzZSBDZWxsSW5SZWdpc3RlckZpbGU6Ci0gICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRDZWxsKCk7
Ci0KLSAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZEJvb2xlYW4oKTsKLSAgICAg
ICAgCi0gICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKLSAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZERvdWJsZSgpOworICAgIGlm
ICh2YWx1ZVNvdXJjZS5pc0luUmVnaXN0ZXJGaWxlKCkpCisgICAgICAgIHJldHVybiB2YWx1ZVNv
dXJjZS52YWx1ZVJlY292ZXJ5KCk7CiAgICAgICAgIAotICAgIGNhc2UgQXJndW1lbnRzU291cmNl
OgotICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVh
dGVkKCk7Ci0KLSAgICBjYXNlIEhhdmVOb2RlOiB7Ci0gICAgICAgIE5vZGUqIG5vZGVQdHIgPSAm
YXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpOwotCi0gICAgICAgIGlmIChub2RlUHRyLT5pc1Bo
YW50b21Bcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojphcmd1
bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChub2RlUHRy
LT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0
YW50KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0cjsKLSAgICAgICAgaWYgKG5vZGVQdHIt
PnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbklu
Zm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBpbmZvUHRyID0gMDsKLSAgICAgICAgaWYgKCFpbmZvUHRyIHx8ICFpbmZvUHRyLT5hbGl2ZSgp
IHx8IGluZm9QdHItPm5vZGVJbmRleCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSB7Ci0g
ICAgICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRo
YXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KLSAgICAgICAgICAgIC8vIFRoZXJl
IGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
SW50MzJUb0RvdWJsZTogV2UgY2FuIHVzZSB0aGlzIGluIHBsYWNlIG9mIHRoZSBvcmlnaW5hbCBu
b2RlLCBidXQKLSAgICAgICAgICAgIC8vICAgIHdlJ2QgcmF0aGVyIG5vdDsgc28gd2UgdXNlIGl0
IG9ubHkgaWYgaXQgaXMgdGhlIG9ubHkgcmVtYWluaW5nCi0gICAgICAgICAgICAvLyAgICBsaXZl
IHZlcnNpb24uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBJ
ZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcwotICAgICAg
ICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVy
c2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgotICAgICAgICAgICAgLy8gICAg
dGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJs
eSBmb3JtZWQgbnVtYmVyCi0gICAgICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBp
bnRlcm1lZGlhdGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlIHJldmVyc2Ug
b2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0
cwotICAgICAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuIFRoaXMgbWVh
bnMgdGhhdCB0aGUgb25seSByZW1haW5pbmcgdXNlcyBvZgotICAgICAgICAgICAgLy8gICAgdGhl
IG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIERvdWJsZUFzSW50MzI6IFNhbWUgYXMgVUludDMyVG9O
dW1iZXIuCi0gICAgICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AoKSA9PSBVSW50
MzJUb051bWJlciB8fCBub2RlUHRyLT5vcCgpID09IERvdWJsZUFzSW50MzIpIHsKLSAgICAgICAg
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCkuaW5kZXgoKTsK
LSAgICAgICAgICAgICAgICBub2RlUHRyID0gJmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9k
ZUluZGV4KCkgPT0gbm9kZUluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIWZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMyVG9Eb3Vi
bGVJbmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMy
SW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVy
SW5kZXggPSBOb05vZGU7Ci0gICAgICAgICAgICAgICAgTm9kZUluZGV4IGRvdWJsZUFzSW50MzJJ
bmRleCA9IE5vTm9kZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWluZm8uYWxpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9
PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KGluZm8ubm9kZUluZGV4KCkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDFVbmNoZWNrZWQoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMy
VG9Eb3VibGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQzMlRvRG91YmxlSW5kZXggPSBp
bmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVUb0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5k
ZXgoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIERvdWJsZUFzSW50MzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVBc0lu
dDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4VG9Vc2U7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdWJsZUFzSW50MzJJbmRl
eCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gZG91Ymxl
QXNJbnQzMkluZGV4OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGludDMyVG9Eb3VibGVJbmRl
eCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gaW50MzJU
b0RvdWJsZUluZGV4OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRv
SW50MzJJbmRleDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJU
b051bWJlckluZGV4OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZUluZGV4VG9Vc2UgIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVQ
dHIgPSAmYXQobm9kZUluZGV4VG9Vc2UpOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVB0
ci0+c2hvdWxkR2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1B0ciA9
ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChpbmZvUHRyLT5hbGl2ZSgpICYmIGluZm9QdHItPm5vZGVJ
bmRleCgpID09IG5vZGVJbmRleFRvVXNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWZvdW5kKQotICAgICAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICAg
ICAgfQotICAgIAotICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7Ci0KLSAgICAgICAg
aWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKLSAgICAg
ICAgICAgIGlmIChpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZw
cigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgICAgICAgICAgaWYgKGluZm9QdHItPnJl
Z2lzdGVyRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmluUGFpcihpbmZvUHRyLT50YWdHUFIoKSwgaW5mb1B0ci0+cGF5bG9hZEdQ
UigpKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGlu
Zm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoaW5mb1B0ci0+c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkKLSAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSwgaW5m
b1B0ci0+c3BpbGxGb3JtYXQoKSk7CisgICAgQVNTRVJUKHZhbHVlU291cmNlLmtpbmQoKSA9PSBI
YXZlTm9kZSk7CisgICAgaWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKQor
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQodmFsdWVPZkpTQ29uc3RhbnQo
dmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKICAgICAKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Ci0gICAgfQotICAgICAgICAK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3ZlcnkoKTsKLSAgICB9CisgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsK
IH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSYgbm9k
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDEyMTcwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBERkdT
cGVjdWxhdGl2ZUpJVF9oCiAjZGVmaW5lIERGR1NwZWN1bGF0aXZlSklUX2gKIAorI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdB
YnN0cmFjdFN0YXRlLmgiCkBAIC0zNCw2ICszNiw3IEBACiAjaW5jbHVkZSAiREZHT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdTaWxlbnRSZWdpc3Rl
clNhdmVQbGFuLmgiCisjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKICNpbmNsdWRlICJNYXJr
ZWRBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAKQEAgLTQ4LDg3ICs1
MSw2IEBAIGNsYXNzIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQ7CiBjbGFzcyBTcGVjdWxhdGVDZWxs
T3BlcmFuZDsKIGNsYXNzIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kOwogCi0KLWVudW0gVmFsdWVT
b3VyY2VLaW5kIHsKLSAgICBTb3VyY2VOb3RTZXQsCi0gICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwK
LSAgICBJbnQzMkluUmVnaXN0ZXJGaWxlLAotICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKLSAgICBC
b29sZWFuSW5SZWdpc3RlckZpbGUsCi0gICAgRG91YmxlSW5SZWdpc3RlckZpbGUsCi0gICAgQXJn
dW1lbnRzU291cmNlLAotICAgIFNvdXJjZUlzRGVhZCwKLSAgICBIYXZlTm9kZQotfTsKLQotY2xh
c3MgVmFsdWVTb3VyY2UgewotcHVibGljOgotICAgIFZhbHVlU291cmNlKCkKLSAgICAgICAgOiBt
X25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZChTb3VyY2VOb3RTZXQpKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIHZhbHVlU291
cmNlS2luZCkKLSAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXhGcm9tS2luZCh2YWx1ZVNv
dXJjZUtpbmQpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSAhPSBTb3VyY2VOb3RTZXQp
OwotICAgICAgICBBU1NFUlQoa2luZCgpICE9IEhhdmVOb2RlKTsKLSAgICB9Ci0gICAgCi0gICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICAgICAgOiBtX25v
ZGVJbmRleChub2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVO
b2RlKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFZhbHVlU291cmNlIGZvclNwZWN1bGF0aW9u
KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKElu
dDMySW5SZWdpc3RlckZpbGUpOwotICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJblJlZ2lzdGVyRmls
ZSk7Ci0gICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKLSAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3RlckZpbGUpOwotICAgICAg
ICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Ci0gICAgfQotICAgIAot
ICAgIGJvb2wgaXNTZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGtpbmRGcm9tTm9k
ZUluZGV4KG1fbm9kZUluZGV4KSAhPSBTb3VyY2VOb3RTZXQ7Ci0gICAgfQotICAgIAotICAgIFZh
bHVlU291cmNlS2luZCBraW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBraW5kRnJv
bU5vZGVJbmRleChtX25vZGVJbmRleCk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBub2Rl
SW5kZXgoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7
Ci0gICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1w
KEZJTEUqIG91dCkgY29uc3Q7Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyBOb2RlSW5kZXgg
bm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBB
U1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2luZCA8IEhhdmVOb2RlKTsKLSAgICAgICAg
cmV0dXJuIE5vTm9kZSAtIGtpbmQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBWYWx1ZVNvdXJj
ZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUlu
ZGV4KTsKLSAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2Rl
KSkKLSAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7Ci0gICAgfQotICAgIAotICAgIE5vZGVJbmRleCBt
X25vZGVJbmRleDsKLX07Ci0KLQogZW51bSBHZW5lcmF0ZWRPcGVyYW5kVHlwZSB7IEdlbmVyYXRl
ZE9wZXJhbmRUeXBlVW5rbm93biwgR2VuZXJhdGVkT3BlcmFuZEludGVnZXIsIEdlbmVyYXRlZE9w
ZXJhbmREb3VibGUsIEdlbmVyYXRlZE9wZXJhbmRKU1ZhbHVlfTsKIAogLy8gPT09IFNwZWN1bGF0
aXZlSklUID09PQpAQCAtMzI2LDcgKzI0OCw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyB1c2Uo
KSByZXR1cm5zIHRydWUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcyBkZWFkLCBhbmQgYW55CiAgICAg
ICAgIC8vIGFzc29jaWF0ZWQgcmVzb3VyY2VzIG1heSBiZSBmcmVlZC4KLSAgICAgICAgaWYgKCFp
bmZvLnVzZSgpKQorICAgICAgICBpZiAoIWluZm8udXNlKCptX3N0cmVhbSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgLy8gUmVsZWFzZSB0aGUgYXNzb2NpYXRlZCBtYWNoaW5lIHJl
Z2lzdGVycy4KQEAgLTM3Niw2ICsyOTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBydW5TbG93UGF0
aEdlbmVyYXRvcnMoKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQg
bm90aWNlT1NSQmlydGgoTm9kZUluZGV4LCBOb2RlJik7CiAgICAgdm9pZCBjb21waWxlTW92SGlu
dChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIApAQCAtNzc3LDcgKzcw
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gQ2hlY2sgdGhlIEdlbmVyYXRpb25JbmZvIHRvIHNl
ZSBpZiB0aGlzIHZhbHVlIG5lZWQgd3JpdGluZwogICAgICAgICAvLyB0byB0aGUgUmVnaXN0ZXJG
aWxlIC0gaWYgbm90LCBtYXJrIGl0IGFzIHNwaWxsZWQgJiByZXR1cm4uCiAgICAgICAgIGlmICgh
aW5mby5uZWVkc1NwaWxsKCkpIHsKLSAgICAgICAgICAgIGluZm8uc2V0U3BpbGxlZCgpOworICAg
ICAgICAgICAgaW5mby5zZXRTcGlsbGVkKCptX3N0cmVhbSwgc3BpbGxNZSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzg3LDIwICs3MTAsMjAgQEAgcHVibGljOgogICAg
ICAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpTIHZhbHVlIC0g
YXMgaW4gaXQncyBub3QgdmlzaWJsZSB0byBKUwogICAgICAgICAgICAgLy8gY29kZS4KICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdFN0b3JhZ2UpOwor
ICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRTdG9y
YWdlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgRGF0
YUZvcm1hdEludGVnZXI6IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwg
SklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGls
bChEYXRhRm9ybWF0SW50ZWdlcik7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwg
c3BpbGxNZSwgRGF0YUZvcm1hdEludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGluZm8uZnByKCksIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1h
dERvdWJsZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0
YUZvcm1hdERvdWJsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtODE2LDEzICs3MzksMTMgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBpdHMg
Ym94ZWQgZm9ybS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1h
dCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwo
Km1fc3RyZWFtLCBzcGlsbE1lLCAoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0
SlMpKTsKICAgICAgICAgICAgIHJldHVybjsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46
IHsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbChzcGlsbEZvcm1hdCk7
CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTgzMCw3ICs3NTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiB7CiAgICAgICAgICAgICAv
LyBPbiBKU1ZBTFVFMzJfNjQgYm94aW5nIGEgZG91YmxlIGlzIGEgbm8tb3AuCiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZURvdWJsZShpbmZvLmZwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihz
cGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3JtYXRKU0RvdWJsZSk7Cisg
ICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdEpTRG91
YmxlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC04MzksNyArNzYyLDcg
QEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoaW5mby50YWdHUFIoKSwgSklUQ29tcGlsZXI6
OnRhZ0ZvcihzcGlsbE1lKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGluZm8ucGF5bG9h
ZEdQUigpLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBp
bmZvLnNwaWxsKHNwaWxsRm9ybWF0KTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFt
LCBzcGlsbE1lLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47CiAjZW5kaWYKICAg
ICAgICAgfQpAQCAtMjIwNCw3ICsyMTI3LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChhdChtX2NvbXBp
bGVJbmRleCkuY2FuRXhpdCgpIHx8IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMpOwotICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2Rl
SW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRo
aXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogICAgIHsKQEAgLTIyMzEsNyArMjE1
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKGF0KG1f
Y29tcGlsZUluZGV4KS5jYW5FeGl0KCkgfHwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyk7CiAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292
ZXJ5KTsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChr
aW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCkt
Pm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5n
cmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRv
RmFpbCwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9m
U3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKICAgICB9CiAgICAgdm9pZCBzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2Rl
VXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJl
Y292ZXJ5JiByZWNvdmVyeSkKICAgICB7CkBAIC0yMjk1LDcgKzIyMTgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGV4aXQubV9jb2RlT3JpZ2luID0gbmV4dE5vZGUtPmNvZGVPcmlnaW47CiAgICAgICAg
IGV4aXQubV9sYXN0U2V0T3BlcmFuZCA9IHNldExvY2FsLT5sb2NhbCgpOwogICAgICAgICAKLSAg
ICAgICAgZXhpdC52YWx1ZVJlY292ZXJ5Rm9yT3BlcmFuZChzZXRMb2NhbC0+bG9jYWwoKSkgPSB2
YWx1ZVJlY292ZXJ5OworICAgICAgICBleGl0Lm1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlID0gYWRv
cHRSZWYoCisgICAgICAgICAgICBuZXcgVmFsdWVSZWNvdmVyeU92ZXJyaWRlKHNldExvY2FsLT5s
b2NhbCgpLCB2YWx1ZVJlY292ZXJ5KSk7CiAgICAgfQogICAgIHZvaWQgZm9yd2FyZFNwZWN1bGF0
aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2Rl
SW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsLCBj
b25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogICAgIHsKQEAgLTIzNjIsNiArMjI4
NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCByZWNvcmRTZXRMb2NhbChpbnQgb3BlcmFuZCwgVmFsdWVTb3Vy
Y2UgdmFsdWVTb3VyY2UpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9w
ZXJhbmQob3BlcmFuZCkgPSB2YWx1ZVNvdXJjZTsKKyAgICAgICAgbV9zdHJlYW0tPmFwcGVuZEFu
ZExvZyhWYXJpYWJsZUV2ZW50OjpzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZVNvdXJjZS5kYXRhRm9y
bWF0KCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIEpJVCwgd2hpbGUgYWxzbyBwcm92aWRl
cyBNYWNyb0Fzc2VtYmxlciBmdW5jdGlvbmFsaXR5LgogICAgIEpJVENvbXBpbGVyJiBtX2ppdDsK
IAogICAgIC8vIFRoZSBjdXJyZW50IG5vZGUgYmVpbmcgZ2VuZXJhdGVkLgpAQCAtMjM5NSw2ICsy
MzI2LDkgQEAgcHVibGljOgogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAK
KyAgICBWYXJpYWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKKyAgICBNaW5pZmllZEdyYXBoKiBt
X21pbmlmaWVkR3JhcGg7CisgICAgCiAgICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
OwogICAgIAogICAgIFZlY3RvcjxTbG93UGF0aEdlbmVyYXRvciosIDg+IG1fc2xvd1BhdGhHZW5l
cmF0b3JzOyAvLyBkb2Vzbid0IHVzZSBPd25QdHI8PiBiZWNhdXNlIEkgZG9uJ3Qgd2FudCB0byBp
bmNsdWRlIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGVfaAor
I2RlZmluZSBERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlZhbHVlUmVjb3Zlcnku
aCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFZhbHVlUmVjb3ZlcnlPdmVycmlkZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4geworcHVibGljOgorICAgIFZhbHVlUmVjb3ZlcnlP
dmVycmlkZSgpIHsgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlPdmVycmlkZShpbnQgb3BlcmFu
ZCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgICAgIDogb3BlcmFuZChvcGVy
YW5kKQorICAgICAgICAsIHJlY292ZXJ5KHJlY292ZXJ5KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgaW50IG9wZXJhbmQ7CisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFsdWVTb3VyY2UuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2lu
ZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIGZwcmludGYob3V0LCAiTm90
U2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU291cmNlSXNEZWFkOgorICAgICAgICBm
cHJpbnRmKG91dCwgIklzRGVhZCIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZhbHVlSW5S
ZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiSW5SZWdGaWxlIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50Zihv
dXQsICJJbnQzMiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENlbGxJblJlZ2lzdGVyRmls
ZToKKyAgICAgICAgZnByaW50ZihvdXQsICJDZWxsIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQm9vbGVhbkluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkJvb2wiKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ZnByaW50ZihvdXQsICJEb3VibGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmd1bWVu
dHNTb3VyY2U6CisgICAgICAgIGZwcmludGYob3V0LCAiQXJndW1lbnRzIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCki
LCBtX25vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHVmFsdWVTb3VyY2VfaAorI2RlZmluZSBERkdWYWx1ZVNvdXJjZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gVmFsdWVTb3VyY2VLaW5kIHsKKyAgICBT
b3VyY2VOb3RTZXQsCisgICAgVmFsdWVJblJlZ2lzdGVyRmlsZSwKKyAgICBJbnQzMkluUmVnaXN0
ZXJGaWxlLAorICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKKyAgICBCb29sZWFuSW5SZWdpc3RlckZp
bGUsCisgICAgRG91YmxlSW5SZWdpc3RlckZpbGUsCisgICAgQXJndW1lbnRzU291cmNlLAorICAg
IFNvdXJjZUlzRGVhZCwKKyAgICBIYXZlTm9kZQorfTsKKworc3RhdGljIGlubGluZSBWYWx1ZVNv
dXJjZUtpbmQgZGF0YUZvcm1hdFRvVmFsdWVTb3VyY2VLaW5kKERhdGFGb3JtYXQgZGF0YUZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGRhdGFGb3JtYXQpIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnRl
Z2VyOgorICAgICAgICByZXR1cm4gSW50MzJJblJlZ2lzdGVyRmlsZTsKKyAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVJblJlZ2lzdGVyRmlsZTsKKyAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICByZXR1cm4gQm9vbGVhbkluUmVnaXN0ZXJG
aWxlOworICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgIHJldHVybiBDZWxsSW5SZWdp
c3RlckZpbGU7CisgICAgY2FzZSBEYXRhRm9ybWF0RGVhZDoKKyAgICAgICAgcmV0dXJuIFNvdXJj
ZUlzRGVhZDsKKyAgICBjYXNlIERhdGFGb3JtYXRBcmd1bWVudHM6CisgICAgICAgIHJldHVybiBB
cmd1bWVudHNTb3VyY2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQg
JiBEYXRhRm9ybWF0SlMpOworICAgICAgICByZXR1cm4gVmFsdWVJblJlZ2lzdGVyRmlsZTsKKyAg
ICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgRGF0YUZvcm1hdCB2YWx1ZVNvdXJjZUtpbmRUb0RhdGFG
b3JtYXQoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBWYWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOwor
ICAgIGNhc2UgSW50MzJJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJ
bnRlZ2VyOworICAgIGNhc2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICByZXR1cm4gRGF0
YUZvcm1hdENlbGw7CisgICAgY2FzZSBCb29sZWFuSW5SZWdpc3RlckZpbGU6CisgICAgICAgIHJl
dHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgor
ICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICBjYXNlIEFyZ3VtZW50c1NvdXJj
ZToKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRBcmd1bWVudHM7CisgICAgY2FzZSBTb3VyY2VJ
c0RlYWQ6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdE5vbmU7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgaXNJblJlZ2lzdGVyRmlsZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKK3sKKyAgICBEYXRhRm9y
bWF0IGZvcm1hdCA9IHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChraW5kKTsKKyAgICByZXR1
cm4gZm9ybWF0ICE9IERhdGFGb3JtYXROb25lICYmIGZvcm1hdCA8IERhdGFGb3JtYXRPU1JNYXJr
ZXI7Cit9CisKKy8vIENhbiB0aGlzIHZhbHVlIGJlIHJlY292ZXJlZCB3aXRob3V0IGhhdmluZyB0
byBsb29rIGF0IHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgb3IKKy8vIERGRyBub2RlIGxpdmVu
ZXNzPworc3RhdGljIGlubGluZSBib29sIGlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoVmFsdWVTb3Vy
Y2VLaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIHZhbHVlU291cmNlS2luZFRvRGF0YUZvcm1hdChr
aW5kKSAhPSBEYXRhRm9ybWF0Tm9uZGU7Cit9CisKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1Ymxp
YzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4RnJv
bUtpbmQoU291cmNlTm90U2V0KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
bHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCisgICAgICAgIDogbV9u
b2RlSW5kZXgobm9kZUluZGV4RnJvbUtpbmQodmFsdWVTb3VyY2VLaW5kKSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgIT0gU291cmNlTm90U2V0KTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSAhPSBIYXZlTm9kZSk7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5v
ZGVJbmRleCBub2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG5vZGVJbmRleCAhPSBOb05vZGUpOworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEhhdmVOb2RlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlU291cmNl
IGZvclNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJu
IFZhbHVlU291cmNlKEludDMySW5SZWdpc3RlckZpbGUpOworICAgICAgICBpZiAoaXNBcnJheVNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENl
bGxJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5SZWdpc3Rl
ckZpbGUpOworICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZSBmb3JEYXRhRm9ybWF0KERhdGFG
b3JtYXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShkYXRh
Rm9ybWF0VG9WYWx1ZVNvdXJjZUtpbmQoZGF0YUZvcm1hdCkpOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kRnJvbU5vZGVJbmRl
eChtX25vZGVJbmRleCkgIT0gU291cmNlTm90U2V0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNv
dXJjZUtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZEZyb21Ob2Rl
SW5kZXgobV9ub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSW5SZWdpc3RlckZp
bGUoKSBjb25zdCB7IHJldHVybiBKU0M6OkRGRzo6aXNJblJlZ2lzdGVyRmlsZShraW5kKCkpOyB9
CisgICAgYm9vbCBpc1RyaXZpYWxseVJlY292ZXJhYmxlKCkgY29uc3QgeyByZXR1cm4gSlNDOjpE
Rkc6OmlzVHJpdmlhbGx5UmVjb3ZlcmFibGUoa2luZCgpKTsgfQorICAgIAorICAgIERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VL
aW5kVG9EYXRhRm9ybWF0KGtpbmQoKSk7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3Zlcnkg
dmFsdWVSZWNvdmVyeSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNUcml2aWFsbHlS
ZWNvdmVyYWJsZSgpKTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBW
YWx1ZUluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFs
cmVhZHlJblJlZ2lzdGVyRmlsZSgpOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50MzJJ
blJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5
SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRJbnQzMigpOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ2VsbEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hlZENlbGwoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIEJvb2xlYW5JblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWRCb29sZWFuKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94ZWREb3Vi
bGUoKTsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5Ojphcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeSgpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIHN0YXRpYyBOb2RlSW5kZXggbm9kZUluZGV4RnJvbUtpbmQoVmFsdWVTb3VyY2VLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCA+PSBTb3VyY2VOb3RTZXQgJiYga2lu
ZCA8IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIE5vTm9kZSAtIGtpbmQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYWx1ZVNvdXJjZUtpbmQga2luZEZyb21Ob2RlSW5kZXgoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGtpbmQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oTm9Ob2RlIC0gbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKGtpbmQgPj0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBIYXZlTm9kZTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4oa2luZCk7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
VmFsdWVTb3VyY2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zhcmlh
YmxlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVFdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmlhYmxlRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50LmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBWYXJpYWJsZUV2ZW50
OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNh
c2UgUmVzZXQ6CisgICAgICAgIGZwcmludGYob3V0LCAiUmVzZXQiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgZHVtcEZpbGxJbmZvKCJCaXJ0aFRvRmls
bCIsIG91dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQmlydGhUb1NwaWxsOgorICAgICAg
ICBkdW1wU3BpbGxJbmZvKCJCaXJ0aFRvU3BpbGwiLCBvdXQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZpbGw6CisgICAgICAgIGR1bXBGaWxsSW5mbygiRmlsbCIsIG91dCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU3BpbGw6CisgICAgICAgIGR1bXBTcGlsbEluZm8oIlNwaWxsIiwg
b3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEZWF0aDoKKyAgICAgICAgZnByaW50Zihv
dXQsICJEZWF0aChAJXUpIiwgbm9kZUluZGV4KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1vdkhpbnQ6CisgICAgICAgIGZwcmludGYob3V0LCAiTW92SGludChAJXUsIHIlZCkiLCBub2Rl
SW5kZXgoKSwgb3BlcmFuZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRMb2NhbEV2
ZW50OgorICAgICAgICBmcHJpbnRmKG91dCwgIlNldExvY2FsKHIlZCwgJXMpIiwgb3BlcmFuZCgp
LCBkYXRhRm9ybWF0VG9TdHJpbmcoZGF0YUZvcm1hdCgpKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgVmFyaWFibGVFdmVudDo6ZHVtcEZpbGxJbmZvKGNvbnN0IGNoYXIq
IG5hbWUsIEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBmcHJpbnRmKG91dCwgIiVzKEAldSwgIiwg
bmFtZSwgbm9kZUluZGV4KCkpOworICAgIGlmIChkYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERv
dWJsZSkKKyAgICAgICAgZnByaW50ZihvdXQsICIlcyIsIEZQUkluZm86OmRlYnVnTmFtZShmcHIo
KSkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgZWxzZSBpZiAoZGF0YUZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTKQorICAgICAgICBmcHJpbnRmKG91dCwgIiVzOiVzIiwgR1BSSW5mbzo6ZGVi
dWdOYW1lKHRhZ0dQUigpKSwgR1BSSW5mbzo6ZGVidWdOYW1lKHBheWxvYWRHUFIoKSkpOworI2Vu
ZGlmCisgICAgZWxzZQorICAgICAgICBmcHJpbnRmKG91dCwgIiVzIiwgR1BSSW5mbzo6ZGVidWdO
YW1lKGdwcigpKSk7CisgICAgZnByaW50ZihvdXQsICIsICVzKSIsIGRhdGFGb3JtYXRUb1N0cmlu
ZyhkYXRhRm9ybWF0KCkpKTsKK30KKwordm9pZCBWYXJpYWJsZUV2ZW50OjpkdW1wU3BpbGxJbmZv
KGNvbnN0IGNoYXIqIG5hbWUsIEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBmcHJpbnRmKG91dCwg
IiVzKEAldSwgciVkLCAlcykiLCBuYW1lLCBub2RlSW5kZXgoKSwgdmlydHVhbFJlZ2lzdGVyKCks
IGRhdGFGb3JtYXRUb1N0cmluZyhkYXRhRm9ybWF0KCkpKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVFdmVudF9oCisjZGVmaW5lIERGR1ZhcmlhYmxl
RXZlbnRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRhdGFGb3JtYXQuaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYXJpYWJsZUV2ZW50S2luZCB7CisgICAg
Ly8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIGNoZWNrcG9pbnQuIElmIHlvdSBpbnRlcnByZXQg
dGhlIHZhcmlhYmxlCisgICAgLy8gZXZlbnRzIHN0YXJ0aW5nIGF0IGEgUmVzZXQgcG9pbnQgdGhl
biB5b3UnbGwgZ2V0IGV2ZXJ5dGhpbmcgeW91IG5lZWQuCisgICAgUmVzZXQsCisgICAgCisgICAg
Ly8gTm9kZSBiaXJ0aHMuIFBvaW50cyBpbiB0aGUgY29kZSB3aGVyZSBhIG5vZGUgYmVjb21lcyBy
ZWxldmFudCBmb3IgT1NSLgorICAgIC8vIEl0IG1heSBiZSB0aGUgcG9pbnQgd2hlcmUgaXQgaXMg
YWN0dWFsbHkgYm9ybiAoaS5lLiBhc3NpZ25lZCkgb3IgaXQgbWF5CisgICAgLy8gYmUgYSBsYXRl
ciBwb2ludCwgaWYgaXQncyBvbmx5IGxhdGVyIGluIHRoZSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlv
bnMKKyAgICAvLyB0aGF0IHdlIHN0YXJ0IHRvIGNhcmUgYWJvdXQgdGhpcyBub2RlLgorICAgIEJp
cnRoVG9GaWxsLAorICAgIEJpcnRoVG9TcGlsbCwKKyAgICAKKyAgICAvLyBFdmVudHMgcmVsYXRl
ZCB0byBob3cgYSBub2RlIGlzIHJlcHJlc2VudGVkLgorICAgIEZpbGwsCisgICAgU3BpbGwsCisg
ICAgCisgICAgLy8gRGVhdGggb2YgYSBub2RlIC0gYWZ0ZXIgdGhpcyB3ZSBubyBsb25nZXIgY2Fy
ZSBhYm91dCB0aGlzIG5vZGUuCisgICAgRGVhdGgsCisgICAgCisgICAgLy8gQSBNb3ZIaW50IG1l
YW5zIHRoYXQgYSBub2RlIGlzIGJlaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGJ5dGVjb2RlIG9wZXJh
bmQsCisgICAgLy8gYnV0IHRoYXQgaXQgaGFzIG5vdCBiZWVuIHN0b3JlZCBpbnRvIHRoYXQgb3Bl
cmFuZC4KKyAgICBNb3ZIaW50LAorICAgIAorICAgIC8vIEEgU2V0TG9jYWxFdmVudCBtZWFucyB0
aGF0IGEgbm9kZSdzIHZhbHVlIGhhcyBhY3R1YWxseSBiZWVuIHN0b3JlZCBpbnRvIHRoZQorICAg
IC8vIGJ5dGVjb2RlIG9wZXJhbmQgdGhhdCBpdCdzIGFzc29jaWF0ZWQgd2l0aC4KKyAgICBTZXRM
b2NhbEV2ZW50LAorICAgIAorICAgIC8vIFVzZWQgdG8gaW5kaWNhdGUgYW4gdW5pbml0aWFsaXpl
ZCBWYXJpYWJsZUV2ZW50LiBEb24ndCB1c2UgZm9yIG90aGVyCisgICAgLy8gcHVycG9zZXMuCisg
ICAgSW52YWxpZEV2ZW50S2luZAorfTsKKwordW5pb24gVmFyaWFibGVSZXByZXNlbnRhdGlvbiB7
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByOworICAgIE1hY3JvQXNzZW1ibGVy
OjpGUFJlZ2lzdGVySUQgZnByOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgc3RydWN0IHsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgdGFnR1BSOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXlsb2FkR1BSOworICAgIH0gcGFpcjsKKyNlbmRpZgor
ICAgIGludDMyX3QgdmlydHVhbFJlZzsKK307CisKK2NsYXNzIFZhcmlhYmxlRXZlbnQgeworcHVi
bGljOgorICAgIFZhcmlhYmxlRXZlbnQoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkRXZlbnRL
aW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgcmVzZXQo
KQorICAgIHsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQubV9r
aW5kID0gUmVzZXQ7CisgICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFZhcmlhYmxlRXZlbnQgZmlsbEdQUihWYXJpYWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5k
ZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHIsIERhdGFGb3JtYXQg
ZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09IEJpcnRoVG9GaWxsIHx8
IGtpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXRE
b3VibGUpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEFTU0VSVCghKGRhdGFGb3Jt
YXQgJiBEYXRhRm9ybWF0SlMpKTsKKyNlbmRpZgorICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50
OworICAgICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51Lmdw
ciA9IGdwcjsKKyAgICAgICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9k
YXRhRm9ybWF0ID0gZGF0YUZvcm1hdDsKKyAgICAgICAgcmV0dXJuIGV2ZW50OworICAgIH0KKyAg
ICAKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IGZpbGxQ
YWlyKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNz
ZW1ibGVyOjpSZWdpc3RlcklEIHRhZ0dQUiwgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5
bG9hZEdQUikKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09IEJpcnRoVG9GaWxsIHx8IGtp
bmQgPT0gRmlsbCk7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAgICAgIGV2ZW50
Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUucGFpci50YWdHUFIgPSB0YWdH
UFI7CisgICAgICAgIGV2ZW50LnUucGFpci5wYXlsb2FkR1BSID0gcGF5bG9hZEdQUjsKKyAgICAg
ICAgZXZlbnQubV9raW5kID0ga2luZDsKKyAgICAgICAgZXZlbnQubV9kYXRhRm9ybWF0ID0gRGF0
YUZvcm1hdEpTOworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShK
U1ZBTFVFMzJfNjQpCisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZlbnQgZmlsbEZQUihWYXJp
YWJsZUV2ZW50S2luZCBraW5kLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6
RlBSZWdpc3RlcklEIGZwcikKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kID09IEJpcnRoVG9G
aWxsIHx8IGtpbmQgPT0gRmlsbCk7CisgICAgICAgIFZhcmlhYmxlRXZlbnQgZXZlbnQ7CisgICAg
ICAgIGV2ZW50Lm1faW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgIGV2ZW50LnUuZnByID0gZnBy
OworICAgICAgICBldmVudC5tX2tpbmQgPSBraW5kOworICAgICAgICBldmVudC5tX2RhdGFGb3Jt
YXQgPSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IHNwaWxsKFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQs
IE5vZGVJbmRleCBub2RlSW5kZXgsIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIsIERh
dGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQmlydGhUb1Nw
aWxsIHx8IGtpbmQgPT0gU3BpbGwpOworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAg
ICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LnZpcnR1YWxS
ZWcgPSB2aXJ0dWFsUmVnaXN0ZXI7CisgICAgICAgIGV2ZW50Lm1fa2luZCA9IGtpbmQ7CisgICAg
ICAgIGV2ZW50Lm1fZGF0YUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgcmV0dXJuIGV2ZW50Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVFdmVudCBkZWF0aChOb2RlSW5kZXggbm9k
ZUluZGV4KQorICAgIHsKKyAgICAgICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZl
bnQubV9pbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgZXZlbnQubV9raW5kID0gRGVhdGg7Cisg
ICAgICAgIHJldHVybiBldmVudDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhcmlhYmxlRXZl
bnQgc2V0TG9jYWwoaW50IG9wZXJhbmQsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAg
ICAgVmFyaWFibGVFdmVudCBldmVudDsKKyAgICAgICAgZXZlbnQudS52aXJ0dWFsUmVnID0gb3Bl
cmFuZDsKKyAgICAgICAgZXZlbnQubV9raW5kID0gU2V0TG9jYWxFdmVudDsKKyAgICAgICAgZXZl
bnQubV9kYXRhRm9ybWF0ID0gZm9ybWF0OworICAgICAgICByZXR1cm4gZXZlbnQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZUV2ZW50IG1vdkhpbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBWYXJpYWJsZUV2ZW50IGV2ZW50OworICAg
ICAgICBldmVudC5tX2luZGV4ID0gbm9kZUluZGV4OworICAgICAgICBldmVudC51LnZpcnR1YWxS
ZWcgPSBvcGVyYW5kOworICAgICAgICBldmVudC5tX2tpbmQgPSBNb3ZIaW50OworICAgICAgICBy
ZXR1cm4gZXZlbnQ7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlRXZlbnRLaW5kIGtpbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhcmlhYmxlRXZlbnRLaW5k
PihtX2tpbmQpOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09
IEZpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2luZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5k
ID09IFNwaWxsCisgICAgICAgICAgICAgICB8fCBtX2tpbmQgPT0gRGVhdGggfHwgbV9raW5kID09
IE1vdkhpbnQpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgRGF0
YUZvcm1hdCBkYXRhRm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQg
PT0gQmlydGhUb0ZpbGwgfHwgbV9raW5kID09IEZpbGwKKyAgICAgICAgICAgICAgIHx8IG1fa2lu
ZCA9PSBCaXJ0aFRvU3BpbGwgfHwgbV9raW5kID09IFNwaWxsCisgICAgICAgICAgICAgICB8fCBt
X2tpbmQgPT0gU2V0TG9jYWxFdmVudCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRh
Rm9ybWF0PihtX2RhdGFGb3JtYXQpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBC
aXJ0aFRvRmlsbCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3Jt
YXQpOworICAgICAgICBBU1NFUlQobV9kYXRhRm9ybWF0ICE9IERhdGFGb3JtYXREb3VibGUpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEFTU0VSVCghKG1fZGF0YUZvcm1hdCAmIERh
dGFGb3JtYXRKUykpOworI2VuZGlmCisgICAgICAgIHJldHVybiB1LmdwcjsKKyAgICB9CisgICAg
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCB0
YWdHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBCaXJ0aFRvRmls
bCB8fCBtX2tpbmQgPT0gRmlsbCk7CisgICAgICAgIEFTU0VSVChtX2RhdGFGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOworICAgICAgICByZXR1cm4gdS5wYWlyLnRhZ0dQUjsKKyAgICB9CisgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgcGF5bG9hZEdQUigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsKKyAgICAg
ICAgQVNTRVJUKG1fZGF0YUZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybiB1
LnBhaXIucGF5bG9hZEdQUjsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RlBSZWdpc3RlcklEIGZwcigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9raW5kID09IEJpcnRoVG9GaWxsIHx8IG1fa2luZCA9PSBGaWxsKTsK
KyAgICAgICAgQVNTRVJUKG1fZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAg
ICAgcmV0dXJuIHUuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gQmlydGhU
b1NwaWxsIHx8IG1fa2luZCA9PSBTcGlsbCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KHUudmlydHVhbFJlZyk7CisgICAgfQorICAgIAorICAgIGludCBvcGVy
YW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2V0TG9jYWxFdmVu
dCB8fCBtX2tpbmQgPT0gTW92SGludCk7CisgICAgICAgIHJldHVybiB1LnZpcnR1YWxSZWc7Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IFZhcmlhYmxlUmVwcmVzZW50YXRpb24mIHZhcmlhYmxlUmVw
cmVzZW50YXRpb24oKSBjb25zdCB7IHJldHVybiB1OyB9CisgICAgCisgICAgdm9pZCBkdW1wKEZJ
TEUqKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wRmlsbEluZm8oY29uc3Qg
Y2hhciogbmFtZSwgRklMRSopIGNvbnN0OworICAgIHZvaWQgZHVtcFNwaWxsSW5mbyhjb25zdCBj
aGFyKiBuYW1lLCBGSUxFKikgY29uc3Q7CisgICAgCisgICAgTm9kZUluZGV4IG1faW5kZXg7Cisg
ICAgCisgICAgLy8gRm9yIEJpcnRoVG9GaWxsLCBGaWxsOgorICAgIC8vICAgLSBUaGUgR1BSIG9y
IEZQUiwgb3IgYSBHUFIgcGFpci4KKyAgICAvLyBGb3IgQmlydGhUb1NwaWxsLCBTcGlsbDoKKyAg
ICAvLyAgIC0gVGhlIHZpcnR1YWwgcmVnaXN0ZXIuCisgICAgLy8gRm9yIE1vdkhpbnQsIFNldExv
Y2FsRXZlbnQ6CisgICAgLy8gICAtIFRoZSBieXRlY29kZSBvcGVyYW5kLgorICAgIC8vIEZvciBE
ZWF0aDoKKyAgICAvLyAgIC0gVW51c2VkLgorICAgIFZhcmlhYmxlUmVwcmVzZW50YXRpb24gdTsK
KyAgICAKKyAgICBpbnQ4X3QgbV9raW5kOworICAgIGludDhfdCBtX2RhdGFGb3JtYXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KworI2VuZGlmIC8vIERGR1ZhcmlhYmxlRXZlbnRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdWYWx1ZVNvdXJjZS5oIgorI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50JiBldmVu
dCkKK3sKKyAgICBkYXRhTG9nKCJzZXEjJXU6Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUo
KSkpOworICAgIGV2ZW50LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICBkYXRhTG9nKCIgIik7
Cit9CisKK3N0cnVjdCBNaW5pZmllZEdlbmVyYXRpb25JbmZvIHsKKyAgICBib29sIGZpbGxlZDsg
Ly8gdHJ1ZSAtPiBpbiBncHIvZnByL3BhaXIsIGZhbHNlIC0+IHNwaWxsZWQKKyAgICBWYXJpYWJs
ZVJlcHJlc2VudGF0aW9uIHU7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgCisgICAgTWlu
aWZpZWRHZW5lcmF0aW9uSW5mbygpCisgICAgICAgIDogZm9ybWF0KERhdGFGb3JtYXROb25lKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCB1cGRhdGUoY29uc3QgVmFyaWFibGVFdmVudCYg
ZXZlbnQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGV2ZW50LmtpbmQoKSkgeworICAgICAgICBj
YXNlIEJpcnRoVG9GaWxsOgorICAgICAgICBjYXNlIEZpbGw6CisgICAgICAgICAgICBmaWxsZWQg
PSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQmlydGhUb1NwaWxsOgor
ICAgICAgICBjYXNlIFNwaWxsOgorICAgICAgICAgICAgZmlsbGVkID0gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWF0aDoKKyAgICAgICAgICAgIGZvcm1hdCA9IERh
dGFGb3JtYXROb25lOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB1ID0gZXZlbnQu
dmFyaWFibGVSZXByZXNlbnRhdGlvbigpOworICAgICAgICBmb3JtYXQgPSBldmVudC5kYXRhRm9y
bWF0KCk7CisgICAgfQorfTsKKwordm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVj
dCgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNaW5p
ZmllZEdyYXBoJiBncmFwaCwKKyAgICB1bnNpZ25lZCBpbmRleCwgT3BlcmFuZHM8VmFsdWVSZWNv
dmVyeT4mIHZhbHVlUmVjb3ZlcmllcykgY29uc3QKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrID0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBudW1WYXJpYWJsZXM7CisgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICBudW1WYXJpYWJsZXMgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFt
ZShjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICsgY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIGVsc2UKKyAgICAgICAg
bnVtVmFyaWFibGVzID0gYmFzZWxpbmVDb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOwor
ICAgIAorICAgIC8vIENyYXp5IHNwZWNpYWwgY2FzZTogaWYgd2UncmUgYXQgaW5kZXggPT0gMCB0
aGVuIHRoaXMgbXVzdCBiZSBhbiBhcmd1bWVudCBjaGVjaworICAgIC8vIGZhaWx1cmUsIGluIHdo
aWNoIGNhc2UgYWxsIHZhcmlhYmxlcyBhcmUgYWxyZWFkeSBzZXQgdXAuIFRoZSByZWNvdmVyaWVz
IHNob3VsZAorICAgIC8vIHJlZmxlY3QgdGhpcy4KKyAgICBpZiAoIWluZGV4KSB7CisgICAgICAg
IHZhbHVlUmVjb3ZlcmllcyA9IE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+KGNvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpLCBudW1WYXJpYWJsZXMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZhbHVlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZhbHVlUmVjb3Zl
cmllc1tpXSA9IFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN0ZXAgMTogRmluZCB0aGUgbGFzdCBjaGVj
a3BvaW50LCBhbmQgZmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHZpcnR1YWwgcmVnaXN0ZXJzIGFz
IHdlIGdvLgorICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXggPSBpbmRleCAtIDE7CisgICAgd2hpbGUg
KGF0KHN0YXJ0SW5kZXgpLmtpbmQoKSAhPSBSZXNldCkKKyAgICAgICAgc3RhcnRJbmRleC0tOwor
ICAgIAorICAgIC8vIFN0ZXAgMjogQ3JlYXRlIGEgbW9jay11cCBvZiB0aGUgREZHJ3Mgc3RhdGUg
YW5kIGV4ZWN1dGUgdGhlIGV2ZW50cy4KKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gb3BlcmFu
ZFNvdXJjZXMoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZhcmlhYmxlcyk7CisgICAg
VmVjdG9yPE1pbmlmaWVkR2VuZXJhdGlvbkluZm8sIDMyPiBnZW5lcmF0aW9uSW5mb3MoZ3JhcGgu
b3JpZ2luYWxHcmFwaFNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRJbmRleDsg
aSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgY29uc3QgVmFyaWFibGVFdmVudCYgZXZlbnQgPSBh
dChpKTsKKyAgICAgICAgc3dpdGNoIChldmVudC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZXNl
dDoKKyAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBCaXJ0aFRvRmlsbDoKKyAgICAgICAgY2FzZSBCaXJ0aFRvU3BpbGw6CisgICAg
ICAgIGNhc2UgRmlsbDoKKyAgICAgICAgY2FzZSBTcGlsbDoKKyAgICAgICAgY2FzZSBEZWF0aDoK
KyAgICAgICAgICAgIGdlbmVyYXRpb25JbmZvc1tldmVudC5ub2RlSW5kZXgoKV0udXBkYXRlKGV2
ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAg
ICAgICBpZiAob3BlcmFuZFNvdXJjZXMuaGFzT3BlcmFuZChldmVudC5vcGVyYW5kKCkpKQorICAg
ICAgICAgICAgICAgIG9wZXJhbmRTb3VyY2VzLnNldE9wZXJhbmQoZXZlbnQub3BlcmFuZCgpLCBW
YWx1ZVNvdXJjZShldmVudC5ub2RlSW5kZXgoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU2V0TG9jYWxFdmVudDoKKyAgICAgICAgICAgIGlmIChvcGVyYW5kU291cmNlcy5o
YXNPcGVyYW5kKGV2ZW50Lm9wZXJhbmQoKSkpCisgICAgICAgICAgICAgICAgb3BlcmFuZFNvdXJj
ZXMuc2V0T3BlcmFuZChldmVudC5vcGVyYW5kKCksIFZhbHVlU291cmNlOjpmb3JEYXRhRm9ybWF0
KGV2ZW50LmRhdGFGb3JtYXQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFN0ZXAgMzogUmVjb3JkIHRoZSB0aGlu
Z3MgdGhhdCBhcmUgbGl2ZSwgc28gd2UgY2FuIGdldCB0byB0aGVtIG1vcmUgcXVpY2tseS4KKyAg
ICBWZWN0b3I8dW5zaWduZWQsIDE2PiBpbmRpY2VzT2ZMaXZlVGhpbmdzOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBnZW5lcmF0aW9uSW5mb3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKGdlbmVyYXRpb25JbmZvc1tpXS5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAg
ICAgICBpbmRpY2VzT2ZMaXZlVGhpbmdzLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8g
U3RlcCA0OiBDb21wdXRlIHZhbHVlIHJlY292ZXJpZXMhCisgICAgdmFsdWVSZWNvdmVyaWVzID0g
T3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4oY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIG51bVZh
cmlhYmxlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhbmRTb3VyY2VzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlU291cmNlJiBzb3VyY2UgPSBvcGVyYW5kU291cmNl
c1tpXTsKKyAgICAgICAgaWYgKHNvdXJjZS5pc1RyaXZpYWxseVJlY292ZXJhYmxlKCkpIHsKKyAg
ICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IHNvdXJjZS52YWx1ZVJlY292ZXJ5KCk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
KHNvdXJjZS5raW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUg
PSBncmFwaC5hdChzb3VyY2Uubm9kZUluZGV4KCkpOworICAgICAgICBpZiAobm9kZSkgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50TnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKKyAgICAgICAg
ICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBub2RlLT5jb25zdGFudE51bWJl
cigpKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzV2Vha0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAg
ICB2YWx1ZVJlY292ZXJpZXNbaV0gPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChub2RlLT53ZWFr
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8qIGluZm8g
PSAmZ2VuZXJhdGlvbkluZm9zW3NvdXJjZS5ub2RlSW5kZXgoKV07CisgICAgICAgIGlmIChpbmZv
LT5mb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBzZWUg
aWYgdGhlcmUgaXMgYW4gYWx0ZXJuYXRlIG5vZGUgdGhhdCB3b3VsZCBjb250YWluIHRoZSB2YWx1
ZSB3ZSB3YW50LgorICAgICAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJbnQzMlRvRG91YmxlOiBXZSBjYW4gdXNl
IHRoaXMgaW4gcGxhY2Ugb2YgdGhlIG9yaWdpbmFsIG5vZGUsIGJ1dAorICAgICAgICAgICAgLy8g
ICAgd2UnZCByYXRoZXIgbm90OyBzbyB3ZSB1c2UgaXQgb25seSBpZiBpdCBpcyB0aGUgb25seSBy
ZW1haW5pbmcKKyAgICAgICAgICAgIC8vICAgIGxpdmUgdmVyc2lvbi4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IElmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZl
IHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIs
IHRoZW4gd2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBVSW50
MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJ
bnQzMlRvTnVtYmVyCisgICAgICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1
c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAg
ICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyBEb3VibGVBc0ludDMyOiBTYW1lIGFzIFVJbnQzMlRvTnVtYmVy
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92
ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKKyAgICAgICAg
ICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhl
IG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291
bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobm9kZSAmJiBub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICAgICAgICAg
IG5vZGUgPSBncmFwaC5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGluZm8gPSAmZ2Vu
ZXJhdGlvbkluZm9zW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKGluZm8tPmZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IGludDMyVG9Eb3VibGVJbmRleCA9IE5vTm9kZTsKKyAg
ICAgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb0ludDMySW5kZXggPSBOb05vZGU7CisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAg
ICAgICAgICAgICAgTm9kZUluZGV4IGRvdWJsZUFzSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5k
aWNlc09mTGl2ZVRoaW5ncy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gaW5kaWNlc09mTGl2ZVRoaW5nc1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IGdyYXBoLmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmhhc0NoaWxkMSgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSAhPSBzb3Vy
Y2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvc1tub2RlSW5kZXhdLmZvcm1hdCAh
PSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMlRvRG91YmxlSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IG5vZGVJbmRl
eDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1i
ZXJJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGVBc0ludDMySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4VG9Vc2U7CisgICAgICAgICAgICAgICAgaWYgKGRvdWJsZUFzSW50MzJJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gZG91YmxlQXNJbnQz
MkluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGludDMyVG9Eb3VibGVJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gaW50MzJUb0RvdWJs
ZUluZGV4OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMkluZGV4ICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJ
bmRleDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB1aW50MzJUb051bWJl
ckluZGV4OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgICAgICBpbmZvID0g
JmdlbmVyYXRpb25JbmZvc1tub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChpbmZvLT5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgdmFsdWVS
ZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChpbmZvLT5mb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGluZm8tPmZpbGxlZCkgeworICAgICAgICAgICAgaWYgKGluZm8t
PmZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgdmFsdWVSZWNv
dmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5GUFIoaW5mby0+dS5mcHIpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgICAgICBpZiAoaW5mby0+Zm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAg
ICAgICAgdmFsdWVSZWNvdmVyaWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGluZm8tPnUu
cGFpci50YWdHUFIsIGluZm8tPnUucGFpci5wYXlsb2FkR1BSKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgdmFsdWVSZWNvdmVy
aWVzW2ldID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoaW5mby0+dS5ncHIsIGluZm8tPmZvcm1hdCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmFs
dWVSZWNvdmVyaWVzW2ldID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oaW5mby0+dS52aXJ0dWFs
UmVnKSwgaW5mby0+Zm9ybWF0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVFdmVudFN0cmVhbV9oCisjZGVm
aW5lIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1
ZGUgIkRGR01pbmlmaWVkR3JhcGguaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50LmgiCisj
aW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgVmFyaWFibGVFdmVudFN0cmVhbSA6IHB1
YmxpYyBWZWN0b3I8VmFyaWFibGVFdmVudD4geworcHVibGljOgorICAgIHZvaWQgYXBwZW5kQW5k
TG9nKGNvbnN0IFZhcmlhYmxlRXZlbnQmIGV2ZW50KQorICAgIHsKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgICAgIGxvZ0V2ZW50KGV2ZW50KTsKKyNlbmRpZgorICAgICAgICBh
cHBlbmQoZXZlbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlY29uc3RydWN0KAorICAgICAg
ICBDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBNaW5pZmllZEdyYXBoJiwKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50Jik7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1ZhcmlhYmxlRXZlbnRTdHJlYW1faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxMjE3MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
Miw2ICsxMzIsNyBAQCBwdWJsaWM6CiAKIGJvb2wgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb24oR3JhcGgmIGdyYXBoKQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgVmlydHVhbCBSZWdpc3RlciBBbGxvY2F0aW9uIFBoYXNlIik7CiAgICAgcmV0dXJuIHJ1
blBoYXNlPFZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZT4oZ3JhcGgpOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>