<?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>69996</bug_id>
          
          <creation_ts>2011-10-12 21:12:02 -0700</creation_ts>
          <short_desc>DFG should have inlining</short_desc>
          <delta_ts>2011-10-24 01:54:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69995</dependson>
    
    <dependson>70068</dependson>
    
    <dependson>70157</dependson>
    
    <dependson>70278</dependson>
    
    <dependson>70466</dependson>
    
    <dependson>70467</dependson>
    
    <dependson>70468</dependson>
    
    <dependson>70578</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>paroga</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>482993</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-12 21:12:02 -0700</bug_when>
    <thetext>For now, this is an umbrella bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485806</commentid>
    <comment_count>1</comment_count>
      <attachid>111381</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-17 22:20:46 -0700</bug_when>
    <thetext>Created attachment 111381
work in progress

If this even compiles, then clang is broken.

Still working on this.  Items that are (hopefully) done:

- Flushing state related to the call that can be reflectively accessed, like the arguments, and the callee.

- Determining when it is profitable to inline based on the classic heuristics (inlinee size, inline stack depth, recursion detection, rejection of fancy operations that the inliner won&apos;t handle correctly).

- Actually inlining code, with the following special things:

- Inlining calls to single-basic-block functions does not introduce any control flow, and so the only &quot;evidence&quot; that there was a call is the flushing of arguments and the callee.

- Inlining calls to functions with multiple basic blocks does the right thing.

- Inlining calls to functions that don&apos;t terminate does the right thing.

- Inlining calls to functions that have multiple return statements does the right thing.

Things that aren&apos;t done:

- OSR support.

- ???

- Make it compiler, pass tests, and produce speed-ups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485929</commentid>
    <comment_count>2</comment_count>
      <attachid>111413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-18 02:40:17 -0700</bug_when>
    <thetext>Created attachment 111413
work in progress (almost done)

Added support for DFG graph dumping that prints useful stuff when inlining happens.  Implemented OSR support for inlining.

Still haven&apos;t tried to compile it.  Putting it up here for backup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486433</commentid>
    <comment_count>3</comment_count>
      <attachid>111528</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-18 16:48:30 -0700</bug_when>
    <thetext>Created attachment 111528
work in progress - almost done

It already works for simple programs.  Still more debugging to do though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486438</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 16:50:51 -0700</bug_when>
    <thetext>Attachment 111528 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGJITCompiler.h:444:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGGraph.cpp:82:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGGraph.cpp:92:  Declaration has space between type name and &amp; in Node &amp;currentNode  [whitespace/declaration] [3]
Source/JavaScriptCore/dfg/DFGGraph.cpp:93:  Declaration has space between type name and &amp; in Node &amp;previousNode  [whitespace/declaration] [3]
Source/JavaScriptCore/runtime/Executable.h:577:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 25 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>486524</commentid>
    <comment_count>5</comment_count>
      <attachid>111552</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-18 19:20:38 -0700</bug_when>
    <thetext>Created attachment 111552
more work in progress

It sort of works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486526</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-18 19:30:29 -0700</bug_when>
    <thetext>&gt; It sort of works.

Always promising :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487317</commentid>
    <comment_count>7</comment_count>
      <attachid>111725</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-19 21:51:12 -0700</bug_when>
    <thetext>Created attachment 111725
more work in progress

Removed some really bad bugs.  Note that this patch includes some of the patches that are listed as dependencies of this bug.  I&apos;ll fix that when those patches land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487947</commentid>
    <comment_count>8</comment_count>
      <attachid>111861</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-20 15:46:50 -0700</bug_when>
    <thetext>Created attachment 111861
more work in progress

This isn&apos;t fully tested yet but it has a good chunk of functionality for landing once all bugs are addressed.  It&apos;s not yet complete though, so more patches will come after this one to flesh out the functionality.  Notably, we don&apos;t inline constructors (even though we really should) and we don&apos;t have a good inlining heuristics story yet.

On the V8 harness, it&apos;s an 8.7% speed-up.  Here&apos;s the performance using my harness:



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;Inlining&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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                Inlining                                    
SunSpider:
   3d-cube                                7.2294+-0.1743    ?     7.3492+-0.1425       ? might be 1.0166x slower
   3d-morph                               7.6382+-0.1203    ?     7.6582+-0.1256       ?
   3d-raytrace                            7.5246+-0.1949    ?     7.6317+-0.1888       ? might be 1.0142x slower
   access-binary-trees                    1.7486+-0.0494          1.7437+-0.0460       
   access-fannkuch                        6.5008+-0.1280          6.4137+-0.1062         might be 1.0136x faster
   access-nbody                           3.3089+-0.0763    !     3.5599+-0.0831       ! definitely 1.0759x slower
   access-nsieve                          2.6140+-0.0645    ?     2.6633+-0.0950       ? might be 1.0188x slower
   bitops-3bit-bits-in-byte               1.7503+-0.0280    ^     1.2948+-0.0372       ^ definitely 1.3518x faster
   bitops-bits-in-byte                    2.7918+-0.0953    ^     2.3645+-0.0767       ^ definitely 1.1807x faster
   bitops-bitwise-and                     3.4221+-0.1173          3.3934+-0.0957       
   bitops-nsieve-bits                     5.4132+-0.1308          5.3306+-0.0769         might be 1.0155x faster
   controlflow-recursive                  2.1608+-0.0553          2.1481+-0.0479       
   crypto-aes                             6.7897+-0.1909    !     7.2303+-0.2243       ! definitely 1.0649x slower
   crypto-md5                             2.7882+-0.0802          2.7425+-0.0615         might be 1.0167x faster
   crypto-sha1                            2.5315+-0.0735          2.4292+-0.0628         might be 1.0421x faster
   date-format-tofte                     10.1474+-0.2384          9.9917+-0.2174         might be 1.0156x faster
   date-format-xparb                      8.8026+-0.1675    ?     9.2311+-0.3072       ? might be 1.0487x slower
   math-cordic                            6.5753+-0.2417          6.5217+-0.1291       
   math-partial-sums                      7.6060+-0.1360    ?     7.6328+-0.1490       ?
   math-spectral-norm                     2.8472+-0.0610    ^     2.5817+-0.0614       ^ definitely 1.1028x faster
   regexp-dna                            11.6238+-0.1617         11.4674+-0.1856         might be 1.0136x faster
   string-base64                          4.4783+-0.1092          4.3667+-0.1042         might be 1.0256x faster
   string-fasta                           6.3774+-0.1054          6.3234+-0.1221       
   string-tagcloud                       11.4621+-0.1364         11.4097+-0.2304       
   string-unpack-code                    20.2390+-0.2392         20.1693+-0.2645       
   string-validate-input                  5.2160+-0.1046    ?     5.2871+-0.1256       ? might be 1.0136x slower

   &lt;arithmetic&gt; *                         6.1380+-0.0387          6.1129+-0.0295       
   &lt;geometric&gt;                            5.0496+-0.0307    ^     4.9542+-0.0300       ^ definitely 1.0192x faster
   &lt;harmonic&gt;                             4.1716+-0.0276    ^     3.9812+-0.0323       ^ definitely 1.0478x faster

                                            TipOfTree                Inlining                                    
V8:
   crypto                                73.4235+-0.4433    !    75.0053+-0.5804       ! definitely 1.0215x slower
   deltablue                            228.1755+-1.0590    ^   171.0148+-0.7583       ^ definitely 1.3342x faster
   earley-boyer                          91.4364+-1.6587    ?    94.3709+-1.4916       ? might be 1.0321x slower
   raytrace                              58.3178+-0.2884    !    59.9449+-0.4125       ! definitely 1.0279x slower
   regexp                               106.6983+-0.6395        106.3563+-0.5184       
   richards                             183.5438+-0.5371    ^   142.4662+-0.4241       ^ definitely 1.2883x faster
   splay                                 97.2676+-0.5820    ^    95.9481+-0.6546       ^ definitely 1.0138x faster

   &lt;arithmetic&gt;                         119.8376+-0.3437    ^   106.4438+-0.3814       ^ definitely 1.1258x faster
   &lt;geometric&gt; *                        107.8833+-0.3250    ^   100.7615+-0.4141       ^ definitely 1.0707x faster
   &lt;harmonic&gt;                            98.3173+-0.3068    ^    95.4845+-0.4341       ^ definitely 1.0297x faster

                                            TipOfTree                Inlining                                    
Kraken:
   ai-astar                             506.3080+-8.7997        504.8021+-3.0190       
   audio-beat-detection                 195.2658+-1.2351        194.5032+-1.0999       
   audio-dft                            272.5609+-2.2965        270.2281+-1.5971       
   audio-fft                            126.5316+-1.1957    ?   126.5381+-1.1408       ?
   audio-oscillator                     255.5309+-2.0254        254.8838+-1.3599       
   imaging-darkroom                     422.1903+-1.7198    ^   409.7418+-3.5790       ^ definitely 1.0304x faster
   imaging-desaturate                   222.6997+-0.4788    ?   223.1201+-1.2055       ?
   imaging-gaussian-blur                562.7176+-2.0577    ?   563.6714+-1.7784       ?
   json-parse-financial                  57.2528+-0.3100    ^    56.3006+-0.2807       ^ definitely 1.0169x faster
   json-stringify-tinderbox              68.5532+-0.5595    !    70.0214+-0.2980       ! definitely 1.0214x slower
   stanford-crypto-aes                  133.5707+-1.7238        132.0632+-1.7421         might be 1.0114x faster
   stanford-crypto-ccm                  102.6632+-1.2818    ?   102.7728+-0.8918       ?
   stanford-crypto-pbkdf2               196.2656+-1.0252    ?   198.3048+-2.5661       ? might be 1.0104x slower
   stanford-crypto-sha256-iterative      71.2168+-0.2476    !    72.1844+-0.4220       ! definitely 1.0136x slower

   &lt;arithmetic&gt; *                       228.0948+-0.7858        227.0811+-0.5272       
   &lt;geometric&gt;                          178.9893+-0.5003        178.6557+-0.4535       
   &lt;harmonic&gt;                           140.4928+-0.3341    ?   140.5655+-0.4151       ?

                                            TipOfTree                Inlining                                    
All benchmarks:
   &lt;arithmetic&gt;                          89.1867+-0.2757    ^    86.8761+-0.1709       ^ definitely 1.0266x faster
   &lt;geometric&gt;                           23.0604+-0.0983    ^    22.5749+-0.0838       ^ definitely 1.0215x faster
   &lt;harmonic&gt;                             7.3397+-0.0477    ^     7.0112+-0.0556       ^ definitely 1.0469x faster

                                            TipOfTree                Inlining                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.2550+-0.1847    ^    51.9082+-0.1028       ^ definitely 1.0259x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487948</commentid>
    <comment_count>9</comment_count>
      <attachid>111861</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-20 15:47:08 -0700</bug_when>
    <thetext>Comment on attachment 111861
more work in progress

Ooops, didn&apos;t mean to set the r? flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487954</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-20 15:49:54 -0700</bug_when>
    <thetext>Attachment 111861 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/bytecode/CodeOrigin.h:65:  The parameter name &quot;inlineCallFrame&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGDriver.cpp:40:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:857:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 3 in 30 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>488069</commentid>
    <comment_count>11</comment_count>
      <attachid>111886</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-20 18:26:39 -0700</bug_when>
    <thetext>Created attachment 111886
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488266</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 01:49:13 -0700</bug_when>
    <thetext>Updated performance after merging.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;Inlining&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 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                Inlining                                    
SunSpider:
   3d-cube                                7.5802+-0.1700          7.5607+-0.1572       
   3d-morph                               7.7902+-0.1274    ?     7.8295+-0.1048       ?
   3d-raytrace                            7.6805+-0.1737    ?     7.7723+-0.2040       ? might be 1.0120x slower
   access-binary-trees                    1.7349+-0.0446    ?     1.7760+-0.0487       ? might be 1.0237x slower
   access-fannkuch                        6.4702+-0.1248    ?     6.6150+-0.1171       ? might be 1.0224x slower
   access-nbody                           3.3459+-0.0766    !     3.6672+-0.0759       ! definitely 1.0960x slower
   access-nsieve                          2.5824+-0.0628    ?     2.6535+-0.0556       ? might be 1.0275x slower
   bitops-3bit-bits-in-byte               1.7588+-0.0389    ^     1.2956+-0.0250       ^ definitely 1.3575x faster
   bitops-bits-in-byte                    2.8443+-0.0406    ^     2.3885+-0.0751       ^ definitely 1.1909x faster
   bitops-bitwise-and                     3.4283+-0.0824          3.3971+-0.0965       
   bitops-nsieve-bits                     5.5956+-0.2869          5.4540+-0.0905         might be 1.0260x faster
   controlflow-recursive                  2.1149+-0.0375    ?     2.1161+-0.0353       ?
   crypto-aes                             6.9257+-0.1076    !     7.4491+-0.2030       ! definitely 1.0756x slower
   crypto-md5                             2.8842+-0.0867          2.7452+-0.0804         might be 1.0506x faster
   crypto-sha1                            2.5600+-0.0690          2.4965+-0.0755         might be 1.0254x faster
   date-format-tofte                      9.9971+-0.1856    ?    10.0634+-0.1550       ?
   date-format-xparb                      9.3292+-0.1708    ?     9.4672+-0.2583       ? might be 1.0148x slower
   math-cordic                            6.4908+-0.1038    ?     6.6374+-0.1601       ? might be 1.0226x slower
   math-partial-sums                      7.7452+-0.1433          7.6759+-0.1205       
   math-spectral-norm                     2.9435+-0.0506    ^     2.6500+-0.0545       ^ definitely 1.1108x faster
   regexp-dna                            11.8225+-0.1472         11.5870+-0.1209         might be 1.0203x faster
   string-base64                          4.4506+-0.1049    ?     4.4925+-0.1559       ?
   string-fasta                           6.2615+-0.1023    ?     6.5080+-0.1471       ? might be 1.0394x slower
   string-tagcloud                       11.4536+-0.1568    !    11.8683+-0.1448       ! definitely 1.0362x slower
   string-unpack-code                    20.3437+-0.2670    ?    20.7484+-0.2756       ? might be 1.0199x slower
   string-validate-input                  5.2792+-0.1040    ?     5.3195+-0.1574       ?

   &lt;arithmetic&gt; *                         6.2082+-0.0304    ?     6.2398+-0.0199       ?
   &lt;geometric&gt;                            5.1020+-0.0250    ^     5.0399+-0.0270       ^ definitely 1.0123x faster
   &lt;harmonic&gt;                             4.2040+-0.0250    ^     4.0334+-0.0337       ^ definitely 1.0423x faster

                                            TipOfTree                Inlining                                    
V8:
   crypto                                75.0317+-0.6962    ?    76.1193+-0.6357       ? might be 1.0145x slower
   deltablue                            229.5168+-2.0350    ^   171.9966+-1.3813       ^ definitely 1.3344x faster
   earley-boyer                          94.3379+-2.0813    ?    96.7467+-1.9250       ? might be 1.0255x slower
   raytrace                              59.5699+-0.2731    !    61.1444+-1.2674       ! definitely 1.0264x slower
   regexp                               106.6368+-0.7844    ?   107.0270+-0.9189       ?
   richards                             185.1246+-1.0312    ^   144.3955+-0.9598       ^ definitely 1.2821x faster
   splay                                 98.7830+-0.5944    ^    96.1199+-0.7264       ^ definitely 1.0277x faster

   &lt;arithmetic&gt;                         121.2858+-0.5272    ^   107.6499+-0.4626       ^ definitely 1.1267x faster
   &lt;geometric&gt; *                        109.4864+-0.5406    ^   102.0054+-0.3858       ^ definitely 1.0733x faster
   &lt;harmonic&gt;                           100.0171+-0.5284    ^    96.7603+-0.3744       ^ definitely 1.0337x faster

                                            TipOfTree                Inlining                                    
Kraken:
   ai-astar                             504.0532+-2.4731    ?   512.0117+-6.1466       ? might be 1.0158x slower
   audio-beat-detection                 195.2423+-1.1973    ?   198.4151+-2.1492       ? might be 1.0163x slower
   audio-dft                            286.9930+-9.2743        280.3339+-7.3088         might be 1.0238x faster
   audio-fft                            128.6663+-1.6103        126.4186+-0.7910         might be 1.0178x faster
   audio-oscillator                     258.8092+-4.0336        258.7320+-2.5276       
   imaging-darkroom                     431.3622+-2.6677    ^   412.0987+-4.9051       ^ definitely 1.0467x faster
   imaging-desaturate                   224.0498+-2.1918    ?   224.5701+-1.6935       ?
   imaging-gaussian-blur                569.6371+-6.1933    ?   571.6295+-4.3435       ?
   json-parse-financial                  57.5612+-0.3672    ?    57.8921+-0.5814       ?
   json-stringify-tinderbox              69.6784+-0.7403    !    71.6162+-0.5837       ! definitely 1.0278x slower
   stanford-crypto-aes                  136.1775+-1.8543        134.4457+-2.1320         might be 1.0129x faster
   stanford-crypto-ccm                  103.4945+-1.0784    ?   104.4574+-0.8185       ?
   stanford-crypto-pbkdf2               203.6624+-1.5077        202.5547+-5.2252       
   stanford-crypto-sha256-iterative      72.7979+-0.7534    ?    73.4482+-0.6291       ?

   &lt;arithmetic&gt; *                       231.5846+-0.5794        230.6160+-0.6849       
   &lt;geometric&gt;                          181.8590+-0.3005        181.6454+-0.6541       
   &lt;harmonic&gt;                           142.6110+-0.2599    ?   143.1602+-0.5793       ?

                                            TipOfTree                Inlining                                    
All benchmarks:
   &lt;arithmetic&gt;                          90.4808+-0.2130    ^    88.1789+-0.2279       ^ definitely 1.0261x faster
   &lt;geometric&gt;                           23.3539+-0.0772    ^    22.9450+-0.0851       ^ definitely 1.0178x faster
   &lt;harmonic&gt;                             7.3984+-0.0431    ^     7.1037+-0.0580       ^ definitely 1.0415x faster

                                            TipOfTree                Inlining                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.9934+-0.1639    ^    52.7502+-0.1200       ^ definitely 1.0236x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488268</commentid>
    <comment_count>13</comment_count>
      <attachid>111924</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 01:53:24 -0700</bug_when>
    <thetext>Created attachment 111924
it works

Except on 32_64, where it&apos;ll either fail to compile or crash in awesome ways.  I haven&apos;t copy-pasted some code yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488272</commentid>
    <comment_count>14</comment_count>
      <attachid>111924</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 01:58:06 -0700</bug_when>
    <thetext>Comment on attachment 111924
it works

Attachment 111924 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10181797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488273</commentid>
    <comment_count>15</comment_count>
      <attachid>111924</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-21 02:03:22 -0700</bug_when>
    <thetext>Comment on attachment 111924
it works

Attachment 111924 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10176842</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488275</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 02:04:56 -0700</bug_when>
    <thetext>Looks like there are some awesome crashes induced by botched OSR failures induced by LayoutTests, so the claim that &quot;it works&quot; is probably premature.  Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488285</commentid>
    <comment_count>17</comment_count>
      <attachid>111924</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-21 02:58:51 -0700</bug_when>
    <thetext>Comment on attachment 111924
it works

Attachment 111924 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10180843</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488680</commentid>
    <comment_count>18</comment_count>
      <attachid>112025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 14:56:39 -0700</bug_when>
    <thetext>Created attachment 112025
the patch

It passes tests.  It makes things faster.  Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488682</commentid>
    <comment_count>19</comment_count>
      <attachid>112025</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 14:58:11 -0700</bug_when>
    <thetext>Comment on attachment 112025
the patch

Aaahhhh!  Never mind.  Still need to do 32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488755</commentid>
    <comment_count>20</comment_count>
      <attachid>112041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 16:23:49 -0700</bug_when>
    <thetext>Created attachment 112041
the patch

Passes tests, works on 32_64.  Still need to get gmail to load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488759</commentid>
    <comment_count>21</comment_count>
      <attachid>112041</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-21 16:37:19 -0700</bug_when>
    <thetext>Comment on attachment 112041
the patch

Attachment 112041 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10198091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488763</commentid>
    <comment_count>22</comment_count>
      <attachid>112041</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 16:50:28 -0700</bug_when>
    <thetext>Comment on attachment 112041
the patch

Attachment 112041 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10197101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488772</commentid>
    <comment_count>23</comment_count>
      <attachid>112041</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 17:04:50 -0700</bug_when>
    <thetext>Comment on attachment 112041
the patch

Looks like the gmail bug requires a slight rearchitecting of the block linking to make it more rugged.  There&apos;s probably a simple side-stepping but I&apos;m going to use a sledge hammer to reduce the likelihood that I ever see assertion failures like this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488787</commentid>
    <comment_count>24</comment_count>
      <attachid>112050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 17:34:46 -0700</bug_when>
    <thetext>Created attachment 112050
the patch

Ruggedized the block linker.  Will set r? once I&apos;m happy that websites work.  Still testing that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488791</commentid>
    <comment_count>25</comment_count>
      <attachid>112050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 17:40:41 -0700</bug_when>
    <thetext>Comment on attachment 112050
the patch

Ready for review.  I can browse gmail, facebook, google plus, bing, cnn, bankrate, and tests pass.  32_64 seems to work as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488793</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 17:42:00 -0700</bug_when>
    <thetext>Latest perf numbers.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;Inlining&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 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                Inlining                                    
SunSpider:
   3d-cube                                7.5292+-0.1551          7.5090+-0.1494       
   3d-morph                               7.7238+-0.1017    ?     7.7504+-0.1686       ?
   3d-raytrace                            7.7175+-0.1658          7.6361+-0.1587         might be 1.0107x faster
   access-binary-trees                    1.7710+-0.0353          1.6970+-0.0480         might be 1.0436x faster
   access-fannkuch                        6.5448+-0.1462          6.4973+-0.1362       
   access-nbody                           3.2920+-0.0581    !     3.6436+-0.0649       ! definitely 1.1068x slower
   access-nsieve                          2.6189+-0.0491          2.5701+-0.0533         might be 1.0190x faster
   bitops-3bit-bits-in-byte               1.7719+-0.0463    ^     1.3203+-0.0365       ^ definitely 1.3421x faster
   bitops-bits-in-byte                    2.8426+-0.0491    ^     2.3600+-0.0661       ^ definitely 1.2045x faster
   bitops-bitwise-and                     3.3914+-0.1234    ?     3.4515+-0.0830       ? might be 1.0177x slower
   bitops-nsieve-bits                     5.6335+-0.1041    ^     5.4495+-0.0794       ^ definitely 1.0338x faster
   controlflow-recursive                  2.1004+-0.0485    ?     2.1078+-0.0435       ?
   crypto-aes                             6.9378+-0.1358    !     7.6149+-0.1823       ! definitely 1.0976x slower
   crypto-md5                             2.8627+-0.1010          2.8080+-0.0770         might be 1.0195x faster
   crypto-sha1                            2.5662+-0.0679          2.5086+-0.0403         might be 1.0230x faster
   date-format-tofte                      9.9458+-0.2107    ?    10.2073+-0.3872       ? might be 1.0263x slower
   date-format-xparb                      9.4583+-0.1809    ^     8.9732+-0.0994       ^ definitely 1.0541x faster
   math-cordic                            6.6702+-0.1924          6.4718+-0.1315         might be 1.0307x faster
   math-partial-sums                      7.7084+-0.1235    ?     8.1012+-0.4149       ? might be 1.0510x slower
   math-spectral-norm                     2.8734+-0.0662    ^     2.6389+-0.0422       ^ definitely 1.0889x faster
   regexp-dna                            11.6119+-0.1368    ?    11.6933+-0.1866       ?
   string-base64                          4.4173+-0.1344    ?     4.4714+-0.1723       ? might be 1.0123x slower
   string-fasta                           6.4880+-0.1368          6.4316+-0.1918       
   string-tagcloud                       11.5306+-0.1765    ?    11.5918+-0.2346       ?
   string-unpack-code                    20.3630+-0.2860    ?    20.8189+-0.2604       ? might be 1.0224x slower
   string-validate-input                  5.2883+-0.1414    ?     5.4789+-0.1554       ? might be 1.0360x slower

   &lt;arithmetic&gt; *                         6.2177+-0.0345    ?     6.2232+-0.0225       ?
   &lt;geometric&gt;                            5.1094+-0.0268    ^     5.0234+-0.0242       ^ definitely 1.0171x faster
   &lt;harmonic&gt;                             4.2102+-0.0271    ^     4.0180+-0.0279       ^ definitely 1.0478x faster

                                            TipOfTree                Inlining                                    
V8:
   crypto                                74.2652+-0.3573    !    76.2611+-0.6886       ! definitely 1.0269x slower
   deltablue                            228.7236+-1.8105    ^   169.4730+-1.4956       ^ definitely 1.3496x faster
   earley-boyer                          93.0936+-1.7728    ?    95.7037+-1.5892       ? might be 1.0280x slower
   raytrace                              58.6868+-0.3134    !    61.5333+-0.9121       ! definitely 1.0485x slower
   regexp                               107.2100+-1.0549        106.2229+-0.4367       
   richards                             184.7886+-0.4967    ^   145.4120+-1.6208       ^ definitely 1.2708x faster
   splay                                 98.0963+-0.7513    ^    95.0552+-0.4904       ^ definitely 1.0320x faster

   &lt;arithmetic&gt;                         120.6949+-0.4253    ^   107.0944+-0.4520       ^ definitely 1.1270x faster
   &lt;geometric&gt; *                        108.7804+-0.3992    ^   101.5881+-0.4463       ^ definitely 1.0708x faster
   &lt;harmonic&gt;                            99.2003+-0.3728    ^    96.4955+-0.4677       ^ definitely 1.0280x faster

                                            TipOfTree                Inlining                                    
Kraken:
   ai-astar                             508.6602+-3.7149    ?   513.4338+-5.7509       ?
   audio-beat-detection                 194.7253+-1.9536        194.2500+-1.3624       
   audio-dft                            278.9230+-8.0107    ?   285.5524+-6.2409       ? might be 1.0238x slower
   audio-fft                            126.8889+-1.0945        125.9327+-0.9391       
   audio-oscillator                     254.7716+-2.0469    ?   255.3800+-1.1305       ?
   imaging-darkroom                     421.9319+-1.6725    ^   410.0498+-3.3201       ^ definitely 1.0290x faster
   imaging-desaturate                   224.2292+-1.6659    ?   225.1973+-2.4855       ?
   imaging-gaussian-blur                571.7987+-7.9711        564.7698+-2.5282         might be 1.0124x faster
   json-parse-financial                  57.3133+-0.6812         56.4367+-0.2013         might be 1.0155x faster
   json-stringify-tinderbox              69.9055+-1.0370    ?    70.0927+-0.9709       ?
   stanford-crypto-aes                  136.4939+-2.3346        133.3180+-1.3957         might be 1.0238x faster
   stanford-crypto-ccm                  103.6385+-1.1249    ?   104.3401+-1.2851       ?
   stanford-crypto-pbkdf2               198.7528+-3.1946        197.6987+-0.8001       
   stanford-crypto-sha256-iterative      72.7265+-0.6502    ?    73.2132+-0.5826       ?

   &lt;arithmetic&gt; *                       230.0542+-0.7879        229.2618+-0.7745       
   &lt;geometric&gt;                          180.6700+-0.7627        180.1717+-0.4641       
   &lt;harmonic&gt;                           141.9692+-0.6425        141.5408+-0.4094       

                                            TipOfTree                Inlining                                    
All benchmarks:
   &lt;arithmetic&gt;                          89.9422+-0.2815    ^    87.6836+-0.2670       ^ definitely 1.0258x faster
   &lt;geometric&gt;                           23.3046+-0.0910    ^    22.8341+-0.0758       ^ definitely 1.0206x faster
   &lt;harmonic&gt;                             7.4078+-0.0467    ^     7.0758+-0.0480       ^ definitely 1.0469x faster

                                            TipOfTree                Inlining                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.7855+-0.1745    ^    52.5281+-0.1441       ^ definitely 1.0239x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488799</commentid>
    <comment_count>27</comment_count>
      <attachid>112050</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-21 18:10:13 -0700</bug_when>
    <thetext>Comment on attachment 112050
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler32_64.cpp:482
&gt; +        store32(Imm32(JSValue::CellTag), tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + RegisterFile::ScopeChain)));

So much sadness :-/

&gt; Source/JavaScriptCore/runtime/Heuristics.cpp:32
&gt; -#define ENABLE_RUN_TIME_HEURISTICS 0
&gt; +#define ENABLE_RUN_TIME_HEURISTICS 1

Do we want these on by default?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488800</commentid>
    <comment_count>28</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 18:13:13 -0700</bug_when>
    <thetext>Here&apos;s some more performance data, from a different machine.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc
&quot;Inlining&quot; at /Volumes/Data/fromMiniMe/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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                Inlining                                    
SunSpider:
   3d-cube                                7.9057+-0.0355    ?     7.9108+-0.0333       ?
   3d-morph                               8.6263+-0.1314    ^     8.4058+-0.0298       ^ definitely 1.0262x faster
   3d-raytrace                            8.1104+-0.0722          8.0728+-0.0743       
   access-binary-trees                    1.7884+-0.0047    !     1.8039+-0.0046       ! definitely 1.0086x slower
   access-fannkuch                        7.9673+-0.0243    ^     7.8511+-0.0598       ^ definitely 1.0148x faster
   access-nbody                           4.0548+-0.0328    !     4.2363+-0.0073       ! definitely 1.0448x slower
   access-nsieve                          3.1608+-0.0130    ?     3.1832+-0.0130       ?
   bitops-3bit-bits-in-byte               1.7805+-0.0034    ^     1.3165+-0.0147       ^ definitely 1.3525x faster
   bitops-bits-in-byte                    5.3079+-0.0117    ^     5.2709+-0.0227       ^ definitely 1.0070x faster
   bitops-bitwise-and                     3.4332+-0.0600    ?     3.4381+-0.0600       ?
   bitops-nsieve-bits                     5.6791+-0.0396          5.6473+-0.0367       
   controlflow-recursive                  2.3211+-0.0036    ?     2.3280+-0.0053       ?
   crypto-aes                             6.8789+-0.0498    !     7.6776+-0.0596       ! definitely 1.1161x slower
   crypto-md5                             3.0041+-0.0363    ^     2.8722+-0.0314       ^ definitely 1.0459x faster
   crypto-sha1                            2.7722+-0.0271    ^     2.6334+-0.0164       ^ definitely 1.0527x faster
   date-format-tofte                     10.5648+-0.0599    !    10.7473+-0.0880       ! definitely 1.0173x slower
   date-format-xparb                     10.9002+-0.1451    ^     9.5093+-0.1691       ^ definitely 1.1463x faster
   math-cordic                            7.2169+-0.0227    !     7.5781+-0.2770       ! definitely 1.0500x slower
   math-partial-sums                     10.5438+-0.0239    !    10.6200+-0.0396       ! definitely 1.0072x slower
   math-spectral-norm                     3.2655+-0.0115    ^     2.8810+-0.0056       ^ definitely 1.1335x faster
   regexp-dna                            13.3356+-0.1807    ?    13.3923+-0.2041       ?
   string-base64                          4.4239+-0.0169    ?     4.4245+-0.0157       ?
   string-fasta                           7.1008+-0.0334    ?     7.1265+-0.0376       ?
   string-tagcloud                       13.2980+-0.1306         13.2206+-0.1446       
   string-unpack-code                    22.6685+-0.1202         22.6000+-0.1731       
   string-validate-input                  5.6601+-0.0754          5.6096+-0.0405       

   &lt;arithmetic&gt; *                         6.9911+-0.0237          6.9368+-0.0332       
   &lt;geometric&gt;                            5.7257+-0.0154    ^     5.6206+-0.0229       ^ definitely 1.0187x faster
   &lt;harmonic&gt;                             4.6719+-0.0103    ^     4.4690+-0.0174       ^ definitely 1.0454x faster

                                            TipOfTree                Inlining                                    
V8:
   crypto                                80.1479+-0.0824    !    81.5153+-0.1235       ! definitely 1.0171x slower
   deltablue                            253.7627+-1.6497    ^   188.5828+-0.5628       ^ definitely 1.3456x faster
   earley-boyer                         111.5673+-2.2941    ?   113.8488+-1.4306       ? might be 1.0204x slower
   raytrace                              63.8901+-0.3075    !    66.7756+-0.6179       ! definitely 1.0452x slower
   regexp                               124.2609+-0.3933    ?   125.0151+-0.7319       ?
   richards                             212.5178+-0.6103    ^   165.2101+-0.2793       ^ definitely 1.2863x faster
   splay                                126.0742+-0.4379    ^   124.1464+-0.7412       ^ definitely 1.0155x faster

   &lt;arithmetic&gt;                         138.8887+-0.4821    ^   123.5849+-0.3212       ^ definitely 1.1238x faster
   &lt;geometric&gt; *                        125.2085+-0.4398    ^   116.9687+-0.3409       ^ definitely 1.0704x faster
   &lt;harmonic&gt;                           113.4041+-0.3858    ^   110.3364+-0.3652       ^ definitely 1.0278x faster

                                            TipOfTree                Inlining                                    
Kraken:
   ai-astar                             804.8272+-11.5509   ?   825.5071+-11.4066      ? might be 1.0257x slower
   audio-beat-detection                 210.3146+-1.2071    ?   210.9226+-1.8756       ?
   audio-dft                            263.5513+-8.3917        262.6012+-2.5779       
   audio-fft                            135.0298+-0.0938    ?   135.4095+-0.5561       ?
   audio-oscillator                     291.4857+-2.0305    ?   292.7020+-1.4143       ?
   imaging-darkroom                     480.7360+-3.4757    ^   445.8657+-2.5090       ^ definitely 1.0782x faster
   imaging-desaturate                   238.0163+-0.1114    ?   238.1223+-0.1226       ?
   imaging-gaussian-blur                621.0191+-0.4272    ?   621.0583+-0.3606       ?
   json-parse-financial                  70.8058+-0.2058    ^    69.6470+-0.2175       ^ definitely 1.0166x faster
   json-stringify-tinderbox              79.7848+-0.3356    ^    78.4771+-0.2201       ^ definitely 1.0167x faster
   stanford-crypto-aes                  154.2835+-1.7173    ^   151.3350+-1.0898       ^ definitely 1.0195x faster
   stanford-crypto-ccm                  116.3939+-0.6686    ?   117.5918+-0.6777       ? might be 1.0103x slower
   stanford-crypto-pbkdf2               236.0109+-1.7652    ?   236.9104+-2.0966       ?
   stanford-crypto-sha256-iterative      85.4621+-0.2368    ?    85.6366+-0.2715       ?

   &lt;arithmetic&gt; *                       270.5515+-1.0418        269.4133+-0.8671       
   &lt;geometric&gt;                          206.4148+-0.6826    ^   205.2601+-0.3124       ^ definitely 1.0056x faster
   &lt;harmonic&gt;                           162.4133+-0.4534    ^   161.4193+-0.2400       ^ definitely 1.0062x faster

                                            TipOfTree                Inlining                                    
All benchmarks:
   &lt;arithmetic&gt;                         105.1428+-0.3565    ^   102.4944+-0.3063       ^ definitely 1.0258x faster
   &lt;geometric&gt;                           26.3714+-0.0708    ^    25.7962+-0.0736       ^ definitely 1.0223x faster
   &lt;harmonic&gt;                             8.2267+-0.0181    ^     7.8753+-0.0300       ^ definitely 1.0446x faster

                                            TipOfTree                Inlining                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                       61.8693+-0.1933    ^    60.2394+-0.1885       ^ definitely 1.0271x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488801</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 18:13:36 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 112050 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112050&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler32_64.cpp:482
&gt; &gt; +        store32(Imm32(JSValue::CellTag), tagFor((VirtualRegister)(inlineCallFrame-&gt;stackOffset + RegisterFile::ScopeChain)));
&gt; 
&gt; So much sadness :-/

:-(

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Heuristics.cpp:32
&gt; &gt; -#define ENABLE_RUN_TIME_HEURISTICS 0
&gt; &gt; +#define ENABLE_RUN_TIME_HEURISTICS 1
&gt; 
&gt; Do we want these on by default?

Ooops!  Thanks for catching that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488806</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-21 18:22:28 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/98179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489230</commentid>
    <comment_count>31</comment_count>
    <who name="Patrick R. Gansterer">paroga</who>
    <bug_when>2011-10-24 01:54:48 -0700</bug_when>
    <thetext>Committed interpreter build fix r98220: &lt;http://trac.webkit.org/changeset/98220&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111381</attachid>
            <date>2011-10-17 22:20:46 -0700</date>
            <delta_ts>2011-10-18 02:40:17 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>inlining_patch_1.diff</filename>
            <type>text/plain</type>
            <size>44827</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAK
KzIwMTEtMTAtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGhhdmUgaW5saW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY5OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNTLiBJIGRvbid0IHRoaW5rIHRo
aXMgZXZlbiBjb21waWxlcyB5ZXQsIHB1dHRpbmcgaXQgdXAgaGVyZQorICAgICAgICBmb3IgYmFj
a3VwLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+SW5saW5l
U3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNv
ZGVCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGls
ZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAg
ICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVFdmFsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAg
ICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlND
OjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6
REZHOjptaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5s
aW5lT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OmNhbklubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAg
KiBkZmcvREZHT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJl
TG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAg
ICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpnZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQ
cmVkaWN0aW9ucyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwp
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnByb2ZpbGVkQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBydW50aW1lL0hl
dXJpc3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjppbml0aWFsaXplSGV1cmlz
dGljcyk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmg6CisKIDIwMTEtMTAtMTcgIFJ5
b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVuYW1lIGRlcmVnaXN0
ZXIqIHRvIHVucmVnaXN0ZXIqCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDEwICszNzUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25z
KCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNv
ZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7IH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25Db3Vu
dDsgfQogICAgICAgICB2b2lkIHNldEluc3RydWN0aW9uQ291bnQodW5zaWduZWQgaW5zdHJ1Y3Rp
b25Db3VudCkgeyBtX2luc3RydWN0aW9uQ291bnQgPSBpbnN0cnVjdGlvbkNvdW50OyB9Ci0jZW5k
aWYKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRD
b2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQpAQCAt
OTQ0LDkgKzk0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2JhbERhdGEqIG1f
Z2xvYmFsRGF0YTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25z
OwotI2lmbmRlZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbkNvdW50Owot
I2VuZGlmCiAKICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1
bWVudHNSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NzY2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOSArMTQ0LDkgQEAgSlNPYmplY3QqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZSgpCiAKICAgICBtX3Njb3BlTm9kZS0+ZW1pdEJ5dGVjb2RlKCp0aGlz
KTsKIAotI2lmbmRlZiBOREVCVUcKICAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1Y3Rpb25Db3Vu
dChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAorI2lmbmRlZiBOREVCVUcK
ICAgICBpZiAoc19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1w
KG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDk3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBBYnN0cmFjdFN0
YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIAogICAgIEFTU0VSVCghbV9ibG9jayk7CiAg
ICAgCisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBB
U1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFz
aWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VSVChiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5lbmQgLSBiYXNpY0Jsb2NrLT5iZWdpbjsgKytpKQogICAg
ICAgICBtX25vZGVzW2ldLmNsZWFyKCk7CiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52
YWx1ZXNBdEhlYWQ7CkBAIC02MDgsNiArNjEyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKE5vZGVJbmRleCBubwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2Ug
UGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBCcmVha3BvaW50OgpAQCAtNjYyLDYgKzY2Nyw3IEBAIGlubGluZSBib29sIEFic3RyYWN0
U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICBjYXNlIFBo
aToKICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIC8vIFRo
ZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBz
b3VyY2UgPSAmaW5WYXJpYWJsZTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gOTc2NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NiArNTIsMTQgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIHZhbHVlc0F0VGFpbChu
dW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICB7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW5z
dXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKKyAgICB7CisgICAgICAgIHZhcmlhYmxl
c0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFyaWFibGVzQXRU
YWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNBdEhlYWQuZW5z
dXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2Nh
bHMobmV3TnVtTG9jYWxzKTsKKyAgICB9CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50
ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVh
bmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDk3Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAg
ICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2so
cHJvZmlsZWRCbG9jaykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fY3Vy
cmVudEJsb2NrKDApCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3Bh
cnNlRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgp
CkBAIC03Nyw3ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1h
eC4KICAgICBib29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVy
YW5kLCBOb2RlVHlwZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCi0gICAg
Ly8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuCisgICAgLy8gSGFuZGxlIGlubGluaW5nLiBS
ZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBj
YWxsLgorICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRh
cmdldCwgaW50IHJlc3VsdE9wZXJhbmQsIEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGludCBs
YXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KTsKKyAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1
bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRv
IHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQs
IGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcs
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMg
YmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCk7CkBAIC0xNDEsMTMgKzE0NCwyNiBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRl
eCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7
Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAg
ICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgaWYgKG5v
ZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVzaCkgeworICAg
ICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRz
IHRoZSBsb2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9h
ZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisgICAgICAgICAg
ICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgIE5vZGUmIGZs
dXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmx1c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hp
bGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gR2V0TG9j
YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICAgICAgICAgIEFTU0VS
VChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgp
OworICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKKyAgICAgICAg
ICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIENo
ZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywKQEAgLTE3OSwy
MSArMTk1LDM0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKIAogICAgICAg
ICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNldEFyZ3VtZW50
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKKyAg
ICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVzaCkgeworICAgICAgICAgICAgICAgIC8v
IFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBi
ZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwg
b3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisgICAgICAgICAgICAgICAgLy8gd2hpY2gg
Y2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dy
YXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICBpZiAoZmx1c2hDaGlsZC5v
cCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUlu
ZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hpbGQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gU2V0QXJndW1lbnQpIHsKICAgICAg
ICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBmaXJzdCBiYXNp
YyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0
QXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNf
Y2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAgICBub2RlSW5k
ZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPmxvY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAgICAgICAgICAg
ICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGVQdHItPnZhcmlh
YmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIGlm
IChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2Nh
bCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIEFTU0VS
VChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+
Y2hpbGQxKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwpA
QCAtMjE0LDYgKzI0Myw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gYWRkVG9HcmFwaChTZXRMb2NhbCwg
T3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIG9wZXJhbmQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAg
ICAgCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CisgICAgICAgIGludCBpbmRleDsKKyAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbmRl
eCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7CisgICAgICAgICAgICBub2RlSW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAg
ICAgaWYgKG5vZGUub3AgPT0gRmx1c2ggfHwgbm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAg
ICAgICAgICAgLy8gSWYgYSBsb2NhbCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQsIG9yIGlmIGl0
J3MgYW4gYXJndW1lbnQgaW4gdGhlCisgICAgICAgICAgICAvLyBmaXJzdCBiYXNpYyBibG9jaywg
dGhlbiB0aGVyZSBpcyByZWFsbHkgbm8gbmVlZCB0byBmbHVzaCBpdC4gSW4gZmFjdAorICAgICAg
ICAgICAgLy8gZW1pdHRpbmcgYSBGbHVzaCBpbnN0cnVjdGlvbiBjb3VsZCBqdXN0IGNvbmZ1c2Ug
dGhpbmdzLCBzaW5jZSB0aGUKKyAgICAgICAgICAgIC8vIGdldEFyZ3VtZW50KCkgY29kZSBhc3N1
bWVzIHRoYXQgd2UgbmV2ZXIgc2VlIGEgRmx1c2ggb2YgYSBTZXRBcmd1bWVudC4KKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVJbmRleCAh
PSBOb05vZGUpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoRmx1c2gsIG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fcHJlc2Vy
dmVkVmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBO
b2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
KTsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgcGhpKTsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBtX2FyZ3VtZW50
UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aW5kZXgpID0gbm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRy
eShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBub2RlSW5kZXg7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4
LCBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQs
IGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgogICAgIE5v
ZGVJbmRleCBnZXRUb0ludDMyKGludCBvcGVyYW5kKQpAQCAtNjkyLDEzICs3NjYsMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxvY2tzIHRvIGp1bXAg
YmFjayBpbnRvIHRoaXMgYmxvY2suCiAgICAgICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0ZUJsb2Nr
SGVhZDsKICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVlOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1cm5WYWx1ZTsKKyAgICAgICAgCisgICAgICAgIC8v
IERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8gaGFuZGxlIHRoZSAodW5jb21tb24g
YnV0IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8gY2FzZSB3aGVyZSBhIHByb2NlZHVyZSB0aGF0IGRv
ZXMgbm90IHJldHVybiB3YXMgaW5saW5lZC4KKyAgICAgICAgYm9vbCBtX2RpZFJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIC8vIExpc3Qgb2YgZWFybHkgcmV0dXJucyB0aGF0IHdlIHNhdy4gSWYg
d2Ugc2F3IGVhcmx5IHJldHVybnMgdGhlbiB3ZQorICAgICAgICAvLyBuZWVkIHR3byB0aGluZ3M6
ICgxKSB0aGUgY29udGludWF0aW9uIG9mIHRoZSBjYWxsIG5lZWRzIHRvIGJlIGEgbmV3CisgICAg
ICAgIC8vIGJhc2ljIGJsb2NrLCBhbmQgKDIpIHdlIG5lZWQgdG8gbGluayB0aGUgZWFybHkgcmV0
dXJucyB0byB0aGlzIG5ldworICAgICAgICAvLyBibG9jay4KKyAgICAgICAgVmVjdG9yPEJsb2Nr
SW5kZXg+IG1fZWFybHlSZXR1cm5zOworICAgICAgICAKKyAgICAgICAgSW5saW5lU3RhY2tFbnRy
eSogbV9jYWxsZXI7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2Rl
UGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4
IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpOworICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0
ZXIgbGFzdEFyZyk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBt
X2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3Ag
PSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaW50IHJlbWFwT3BlcmFu
ZChpbnQgb3BlcmFuZCkKQEAgLTc1Niw2ICs4NDIsMTA4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZU1pbk1heChib29sIHUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQs
IGludCByZXN1bHRPcGVyYW5kLCBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uLCBpbnQgZmly
c3RBcmcsIGludCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KQoreworICAgIC8vIEZpcnN0
LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0
aW9uPworICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChleHBlY3RlZEZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZXhw
ZWN0ZWRGdW5jdGlvbi0+anNFeGVjdXRhYmxlKCk7CisgICAgCisgICAgLy8gRG9lcyB0aGUgbnVt
YmVyIG9mIGFyZ3VtZW50cyB3ZSdyZSBwYXNzaW5nIG1hdGNoIHRoZSBhcml0eSBvZiB0aGUgdGFy
Z2V0PyBXZSBjb3VsZAorICAgIC8vIGlubGluZSBhcml0eSBjaGVjayBmYWlsdXJlcywgYnV0IGZv
ciBzaW1wbGljaXR5IHdlIGN1cnJlbnRseSBkb24ndC4KKyAgICBpZiAoZXhlY3V0YWJsZS0+cGFy
YW1ldGVyQ291bnQoKSAhPSBsYXN0QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3RhY2sgZGVwdGgs
IG9yIGFyZSB3ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/CisgICAgLy8gSWYg
ZWl0aGVyIG9mIHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUuCisgICAgdW5z
aWduZWQgZGVwdGggPSAwOworICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lu
bGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKKyAgICAgICAg
KytkZXB0aDsKKyAgICAgICAgaWYgKGRlcHRoID4gSGV1cmlzdGljczo6bWF4aW11bUlubGluaW5n
RGVwdGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERlcHRoIGV4Y2VlZGVkLgorICAg
ICAgICAKKyAgICAgICAgaWYgKGVudHJ5LT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0YWJsZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVjdXJzaW9uIGRldGVjdGVkLgorICAgIH0KKyAg
ICAKKyAgICAvLyBEb2VzIHRoZSBjb2RlIGJsb2NrJ3Mgc2l6ZSBhbmQgb3Bjb2RlIHNldCBtYXRj
aCB0aGUgaGV1cmlzdGljcy9yZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAgLy8gYW4gaW5saW5l
IGNhbmRpZGF0ZT8KKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBleHBlY3RlZEZ1bmN0
aW9uLT5wcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFjYW5Jbmxp
bmVGdW5jdGlvbkZvckNhbGwocHJvZmlsZWRCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxk
IGRlZmluaXRlbHkgaW5saW5lIHRoaXMgY29kZS4gUHJvY2VlZAorICAgIC8vIHdpdGggcGFyc2lu
ZyB0aGUgY29kZSB0byBnZXQgYnl0ZWNvZGUsIHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhl
IGJ5dGVjb2RlLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBp
cyBpbnRlbmRlZCB0byBkaWUgYWZ0ZXIgaGFuZGxlSW5saW5pbmcoKQorICAgIC8vIHJldHVybnMu
CisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxv
Y2sgPSBleGVjdXRhYmxlLT5wcm9kdWNlQ29kZUJsb2NrRm9yKHByb2ZpbGVkQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCBleHBlY3RlZEZ1bmN0aW9uLT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRp
b24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIAorICAgIC8vIE5v
dyB3ZSBrbm93IHdpdGhvdXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5p
bmcuIFNvIGJlZ2luIHRoZSBwcm9jZXNzCisgICAgLy8gYnkgbWFraW5nIHN1cmUgdGhhdCBhcmd1
bWVudHMgYW5kIHRoZSBjYWxsZWUgYXJlIGZsdXNoZWQuCisgICAgZmx1c2goY2FsbFRhcmdldCk7
CisgICAgZm9yIChpbnQgYXJnID0gZmlyc3RBcmc7IGFyZyA8PSBsYXN0QXJnOyArK2FyZykKKyAg
ICAgICAgZmx1c2goYXJnKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSB1
c2VkIGJ5IHRoZSBjYWxsIGZyYW1lIGlzIHJlc2VydmVkLgorICAgIGZvciAoaW50IGFyZyA9IGxh
c3RBcmcgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBhcmctLSA+IGxh
c3RBcmcgKyAxOykKKyAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChhcmcpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KKyAgICB1bnNpZ25lZCBu
ZXdOdW1Mb2NhbHMgPSBsYXN0QXJnICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSArIGNvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmIChuZXdOdW1Mb2Nh
bHMgPiBtX251bUxvY2FscykgeworICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2FsczsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CisgICAgfQorCisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5
KHRoaXMsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkg
LSAxLCBjYWxsVGFyZ2V0LCB1c2VzUmVzdWx0ID8gcmVzdWx0T3BlcmFuZCA6IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIsIGxhc3RBcmcpOworICAgIAorICAgIHBhcnNlQ29kZUJsb2NrKCk7CisgICAg
CisgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2ljIGJsb2Nr
cywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCisgICAgaWYgKGlubGluZVN0YWNrRW50cnku
Y2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7CisgICAg
ICAgIEFTU0VSVCghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7
CisgICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkuY2Fs
bHNpdGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Mp
OworICAgICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7
CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRC
bG9ja3MuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1
dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YK
KyAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdl
J3JlIGluIHJpZ2h0IG5vdy4KKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2Vhcmx5UmV0dXJu
cy5pc0VtcHR5KCkgJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgLy8gSWYgdGhlIGxhc3QgYmFzaWMgYmxvY2sgZG9lcyBub3Qg
aGF2ZSBhIHRlcm1pbmFsLCB0aGVuIGFkZCBhIGp1bXAuCisgICAgaWYgKCFtX2dyYXBoLmxhc3Qo
KS5pc1Rlcm1pbmFsKCkpIHsKKyAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3Jh
cGguc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRv
IHRoZSBiYXNpYyBibG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmxpbmVTdGFja0VudHJ5Lm1fZWFybHlSZXR1cm5zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3Rh
Y2tFbnRyeS5tX2Vhcmx5UmV0dXJuc1tpXV0tPmVuZCAtIDFdOworICAgICAgICBBU1NFUlQobm9k
ZS5vcCA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0luZGV4KCkgPT0g
Tm9CbG9jayk7CisgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFz
aWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8
QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBt
X2dyYXBoLnNpemUoKSwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fs
cykpOworICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CisgICAgbV9ncmFwaC5tX2Js
b2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50
IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwg
YnV0CisgICAgLy8gaW4gdGhlIG5ldyBiYXNpYyBibG9jay4KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwg
aW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50
IGxhc3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBzd2l0Y2ggKGludHJp
bnNpYykgewpAQCAtMTYyMSwxMCArMTgwOSwyOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKKyAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICAgICAgICAgIHNldChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
SW5kZXggKyBPUENPREVfTEVOR1RIKG5hbWUpID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChKdW1wLCBPcEluZm8oTm9CbG9jaykpOworICAgICAgICAgICAgICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2Vhcmx5UmV0dXJucy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkg
LSAxKTsKKyAgICAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwg
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAg
ICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgICAgICBzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2RpZFJldHVybiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChuYW1lKSA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoSnVtcCwgT3BJbmZvKE5vQmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9lYXJseVJldHVybnMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4s
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9lbmQpOwogCkBAIC0xNjQwLDYgKzE4NDYsMTQgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxUYXJn
ZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBl
bnVtIHsgQ29uc3RhbnRGdW5jdGlvbiwgTGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9
IGNhbGxUeXBlOwogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5pc0xp
bmtlZCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgaXQgaGFkIGJlZW4gbGlua2VkIHRoZW4gbWF5YmUgd2Ugd291bGQgaGF2ZSBp
bmxpbmVkIGl0LiBJZiB3ZSBhbGxvdyB0aGlzCisgICAgICAgICAgICAgICAgLy8gY29kZSB0byBl
eGVjdXRlIHRoZW4gd2UgbWlnaHQgZ2V0IHN0dWNrIGV4ZWN1dGluZyBhIHNsb3cgY2FsbCB3aXRo
b3V0IGFueQorICAgICAgICAgICAgICAgIC8vIGhvcGUgb2YgcmVvcHRpbWl6aW5nLgorICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29k
ZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50
RnVuY3Rpb247CiAgICAgICAgICAgICBlbHNlIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkuaXNMaW5rZWQoKSAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZSht
X2N1cnJlbnRJbmRleCkpCkBAIC0xNjU1LDI1ICsxODY5LDM4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBEbyB3ZSBoYXZlIGEg
cmVzdWx0PwogICAgICAgICAgICAgICAgIGJvb2wgdXNlc1Jlc3VsdCA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxlciBoYXBweQor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbCk7CiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dElu
c3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
ICAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsK
ICAgICAgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdE9wZXJhbmQgPSBwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICAgICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBwcmVk
aWN0aW9uID0gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG5leHRPZmZzZXQpOworICAgICAgICAgICAg
ICAgICAgICBuZXh0T2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0KTsK
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRG
dW5jdGlvbjsKICAgICAgICAgICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24pCi0gICAgICAgICAg
ICAgICAgICAgIGludHJpbnNpYyA9IG1fZ3JhcGgudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobV9j
b2RlQmxvY2ssIGNhbGxUYXJnZXQpLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOwotICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0
ZWRGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5j
dGlvbikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52
YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCk7CisgICAgICAg
ICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVjdGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+
aW50cmluc2ljKCk7CisgICAgICAgICAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVu
Y3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChjYWxsVHlwZSA9PSBMaW5rZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAg
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmNhbGxlZS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW50cmluc2ljID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmlu
c2ljKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5m
byhmdW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1
bmN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0lu
Zm8obV9jdXJyZW50SW5kZXgpLmNhbGxlZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50
cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKKyAg
ICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAo
aGFuZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmly
c3RBcmcsIGxhc3RBcmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJp
bnNpYyAhPSBOb0ludHJpbnNpYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRhaW5B
Ym91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmlu
c2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RB
cmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09E
RSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGNhbGxUYXJnZXQsIHJlc3Vs
dE9wZXJhbmQsIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zmc2V0
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNp
ZGUgYnJhY2VzLgogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0xNzg0LDcgKzIwMTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
Ojpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZh
bHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYm
IHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CisgICAgICAgICAgICBBU1NFUlQobV9n
cmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9w
ID09IEZsdXNoIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1l
bnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBo
W3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAK
QEAgLTE4ODIsMjIgKzIxMDksMjUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YnVpbGRPcGVyYW5k
TWFwc0lmTgogICAgIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMgPSB0cnVlOwogfQogCi1CeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNl
ciogYnl0ZUNvZGVQYXJzZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWVWUikKK0J5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwg
VmlydHVhbFJlZ2lzdGVyIGxhc3RBcmcpCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2Rl
UGFyc2VyKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJs
b2NrKHByb2ZpbGVkQmxvY2spCiAgICAgLCBtX2NhbGxzaXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxv
Y2tIZWFkKQotICAgICwgbV9jYWxsZWUoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3Ap
CisgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCisgICAgLCBtX2RpZFJldHVybihm
YWxzZSkKKyAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQog
ewotICAgIGlmIChtX2NhbGxlZSkgeworICAgIGlmIChtX2NhbGxlcikgewogICAgICAgICAvLyBJ
bmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChsYXN0QXJnICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAg
ICAgIAogICAgICAgICBJbmxpbmVDYWxsRnJhbWUgaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7
Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IG1fY2FsbGVlLT5tX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFj
a09mZnNldCA9IGxhc3RBcmcgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVlVlIgPSBjYWxsZWVWUjsKICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLmNhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdp
bigpOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUubnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA9
IGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzOwpAQCAtMTkyNyw2ICsyMTU3LDggQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAvLyBNYWNoaW5lIGNv
ZGUgYmxvY2sgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBieXRlQ29kZVBhcnNl
ci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgPT0gSW52YWxpZFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQobGFzdEFyZyA9PSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkID09IE5vQmxvY2spOwog
CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gMDsKQEAgLTE5NTQsMTAgKzIxODYsMTIgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogCiAgICAgICAgIC8vIExvb3Ag
dW50aWwgd2UgcmVhY2ggdGhlIGN1cnJlbnQgbGltaXQgKGkuZS4gbmV4dCBqdW1wIHRhcmdldCku
CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX2dyYXBoLnNpemUoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrLmdldCgpOwotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOwotICAgICAgICAgICAgbV9ncmFw
aC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGlmICghbV9j
dXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sg
PSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5zaXplKCks
IG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOworICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrID0gYmxvY2suZ2V0KCk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghcGFyc2VCbG9jayhsaW1pdCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk2NSw2ICsyMTk5LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudElu
ZGV4IDw9IGxpbWl0KTsKIAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3Jh
cGguc2l6ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwogICAgICAgICB9IHdo
aWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDk3NjYwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2lmIEVOQUJMRShERkdfSklUKQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9j
ayogY29kZUJsb2NrKQordGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQp
PgorYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIElu
dGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnBy
ZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC00Myw3ICs0NCw3IEBAIGJvb2wgY2FuQ29tcGlsZU9w
Y29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewog
I2RlZmluZSBERUZJTkVfT1Aob3Bjb2RlLCBsZW5ndGgpICAgICAgICAgICBcCiAgICAgICAgIGNh
c2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghY2Fu
Q29tcGlsZU9wY29kZShvcGNvZGUpKSAgXAorICAgICAgICAgICAgaWYgKCFjYW5IYW5kbGVPcGNv
ZGUob3Bjb2RlKSkgIFwKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCiAgICAg
ICAgICAgICBicmVhazsKQEAgLTU4LDYgKzU5LDE2IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMo
Q29kZUJsb2NrKiBjb2RlQmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBjYW5Db21waWxl
T3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bj
b2RlczxjYW5Db21waWxlT3Bjb2RlPihjb2RlQmxvY2spOworfQorCitib29sIGNhbklubGluZU9w
Y29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29k
ZXM8Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxvY2spOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5oCShyZXZpc2lvbiA5NzY2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNp
Zm5kZWYgREZHQ2FwYWJpbGl0aWVzX2gKICNkZWZpbmUgREZHQ2FwYWJpbGl0aWVzX2gKIAorI2lu
Y2x1ZGUgIkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUg
IkludHJpbnNpY3MuaCIKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgIkRG
R05vZGUuaCIKQEAgLTM2LDEwICszOCwzMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAjaWYgRU5BQkxFKERGR19KSVQpCiAvLyBGYXN0IGNoZWNrIGZ1bmN0aW9uczsgaWYgdGhl
eSByZXR1cm4gdHJ1ZSBpdCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8KIC8vIGNoZWNrIG9wY29kZXMu
Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7
IH0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4g
dHJ1ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9j
ayopIHsgcmV0dXJuIHRydWU7IH0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBib29sIG1pZ2h0
Q29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1FdmFsT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGls
ZVByb2dyYW0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1Qcm9ncmFtT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGls
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9u
Rm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUg
Ym9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlz
dGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK30KKworaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNh
bGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1JbmxpbmVGdW5jdGlvbkZvckNhbGxD
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5j
dGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KIAog
Ly8gT3Bjb2RlIGNoZWNraW5nLgogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJ
RCBvcGNvZGVJRCkKQEAgLTE0NiwxNCArMTY5LDQ1IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVP
cGNvZGUoT3Bjb2RlSUQgb3AKICAgICB9CiB9CiAKK2lubGluZSBib29sIGNhbklubGluZU9wY29k
ZShPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAg
IAorICAgIC8vIFRoZXNlIG9wY29kZXMgd291bGQgYmUgZWFzeSB0byBzdXBwb3J0IHdpdGggaW5s
aW5pbmcsIGJ1dCB3ZSBjdXJyZW50bHkgZG9uJ3QgZG8gaXQuCisgICAgLy8gVGhlIGlzc3VlIGlz
IHRoYXQgdGhlIHNjb3BlIGNoYWluIHdpbGwgbm90IGJlIHNldCBjb3JyZWN0bHkuCisgICAgY2Fz
ZSBvcF9nZXRfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOgorICAgIGNh
c2Ugb3BfcmVzb2x2ZToKKyAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZToKKyAgICBjYXNlIG9wX3Jl
c29sdmVfZ2xvYmFsOgorICAgICAgICAKKyAgICAvLyBUcml2aWFsIHRvIHN1cHBvcnQgd2l0aCB0
aGUgY29weSBwcm9wYWdhdGlvbiBtYWNoaW5lIHdlIGFscmVhZHkgaGF2ZSwgYnV0IHRoZSBnbHVl
CisgICAgLy8gaXNuJ3QgdGhlcmUsIHlldC4KKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAg
ICAgIAorICAgIC8vIElubGluaW5nIGRvZXNuJ3QgY29ycmVjdGx5IHJlbWFwIHJlZ3VsYXIgZXhw
cmVzc2lvbiBvcGVyYW5kcy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBp
bGVPcGNvZGUob3Bjb2RlSUQpOworICAgIH0KK30KKwogYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhD
b2RlQmxvY2sqKTsKK2Jvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqKTsKICNlbHNlIC8v
IEVOQUJMRShERkdfSklUKQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sq
KSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2Rl
QmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDYWxsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdo
dENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CisKIGlubGluZSBib29s
IGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9v
bCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9v
bCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5l
IGJvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlRXZhbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKQEAgLTE3Niw2ICsyMzAsMTYgQEAgaW5saW5lIGJvb2wgY2FuQ29t
cGlsZUZ1bmN0aW9uRm9yQ29uc3RydQogICAgIHJldHVybiBtaWdodENvbXBpbGVGdW5jdGlvbkZv
ckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CiB9
CiAKK2lubGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2Nr
KSAmJiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7Cit9CisKK2lubGluZSBib29sIGNhbklu
bGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykgJiYgY2FuSW5s
aW5lT3Bjb2Rlcyhjb2RlQmxvY2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBERkdDYXBhYmlsaXRpZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDk3Njc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAg
ICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhpLCAwKSBc
CisgICAgbWFjcm8oRmx1c2gsIDAsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
TWFya2VyIGZvciBhcmd1bWVudHMgYmVpbmcgc2V0LiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVu
dCwgMCkgXApAQCAtODM1LDcgKzgzNiw3IEBAIHN0cnVjdCBOb2RlIHsKIAogICAgIGJvb2wgc2hv
dWxkR2VuZXJhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0g
UGhpOworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGkgJiYgb3AgIT0gRmx1
c2g7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcmVmQ291bnQoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gOTc2NjApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE4ICs2
NCwzMSBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2Nh
bHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6
ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsK
KyAgICAgICAgbV9sb2NhbHMucmVzaXplKHNpemUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
b2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHNb
aV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldExv
Y2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKGlkeCA+
PSBtX2xvY2Fscy5zaXplKCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2Nh
bHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOwotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgZW5zdXJlTG9jYWxzKGlkeCArIDEpOwogICAgICAgICAKICAgICAg
ICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOwogICAgIH0KICAgICAKKyAgICBUIGdldExvY2FsKHNp
emVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICByZXR1cm4g
bV9sb2NhbHNbaWR4XTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGlt
ZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2Fy
Z3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NzY2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3Nyw2ICs1NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJldHVybjoKICAg
ICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAg
Y2FzZSBGbHVzaDoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA5NzY2MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDYsMTEgKzQwNiwxMSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpj
b21waWxlT3B0CiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRl
KiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2luZCBj
b21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5k
LCBKU09iamVjdComIGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1
bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2lu
ZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25L
aW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKIHsKICAgICBleGNlcHRpb24gPSAwOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwotICAg
IFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJz
ZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIDAsIG1f
c291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmlj
dCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlO
b2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihn
bG9iYWxPYmplY3QsIDAsIDAsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0
TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOwogICAg
IGlmICghYm9keSkgewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC00NDIsNyArNDQyLDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6Y29tcGlsZUZvcgogI2VuZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4
Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHBy
b2R1Y2VDb2RlQmxvY2tGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JD
YWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNh
bGwsIGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxv
Y2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2Nv
cGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9u
IDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFu
ZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKQEAgLTUwMiw3ICs1MDIs
NyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgCiAgICAg
QVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJs
b2NrRm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGltaXppbmdD
b21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2VwdGlv
bik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNl
Q29kZUJsb2NrRm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2NvcGVDaGFpbk5vZGUs
ICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJz
dENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOwogICAgIGlmICghbmV3
Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NzY2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYyLDcgKzQ2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICpt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGFz
c093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTR2xvYmFPYmplY3QqLCBTY29wZUNoYWluTm9k
ZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBl
eGNlcHRpb24pOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUq
IGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVB
cmdzRXhlYyA9IDApCiAgICAgICAgIHsKQEAgLTYxNyw2ICs2MTcsMjMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAg
IH0KICAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIHN0YXJ0OworICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAg
ICAgICAgICAgc3RhcnQgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
KyAgICAgICAgICAgICAgICBzdGFydCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUgPSBzdGFydC0+YWx0
ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgIGlmIChhbHRlcm5hdGl2ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYWx0ZXJuYXRpdmU7CisgICAgICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVG
bGFnczsKICAgICAgICAgdW5zaWduZWQgbV9udW1DYXB0dXJlZFZhcmlhYmxlcyA6IDMxOwogICAg
ICAgICBib29sIG1fZm9yY2VVc2VzQXJndW1lbnRzIDogMTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiA5NzY2MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3Rp
Y3MgewogCit1bnNpZ25lZCBtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZv
ckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2ln
bmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50
OworCit1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsKKwogaW50MzJfdCBleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwogaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGludDMyX3QgZXhlY3V0aW9uQ291
bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247CkBAIC05OSw2ICsxMDgsMTggQEAg
dm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYQogCiB2b2lkIGluaXRpYWxp
emVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhNRTogTXVzdCByZXZpc2l0IHRoZXNlIGhldXJp
c3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGltaXppbmcgY29tcGlsZXIsIG1heQorICAgIC8v
IHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1Z2UgY29kZSBibG9ja3MuIFRo
ZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAvLyB0aGlzIGlzIHRvIHJlZnVzZSB0byBvcHRp
bWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMjApOworICAgIAorICAgIFNFVChtYXhpbXVtSW5saW5p
bmdEZXB0aCwgMik7CisKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVB
ZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9y
T3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRl
clZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
MzJfdD46Om1pbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJp
c3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVy
aXN0aWNzLmgJKHJldmlzaW9uIDk3NjYwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGV1cmlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCitleHRlcm4gdW5zaWduZWQgbWF4
aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworZXh0ZXJuIHVu
c2lnbmVkIG1heGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25G
b3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRl
cm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7CisKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVw
dGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0
Yy4KKwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
QWZ0ZXJMb25nV2FybVVwOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9y
RG9udE9wdGltaXplQW55dGltZVNvb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111413</attachid>
            <date>2011-10-18 02:40:17 -0700</date>
            <delta_ts>2011-10-18 16:48:30 -0700</delta_ts>
            <desc>work in progress (almost done)</desc>
            <filename>inlining_patch_2.diff</filename>
            <type>text/plain</type>
            <size>66689</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc3MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAK
KzIwMTEtMTAtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGhhdmUgaW5saW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY5OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNTLiBQcm9iYWJseSBkb2Vzbid0
IGNvbXBpbGUgeWV0LCBidXQgYWxsIG9mIHRoZSBtYWluIHBpZWNlcworICAgICAgICBhcmUgaW4g
cGxhY2UuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEluc3RydWN0aW9uQ291bnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lRGVwdGgpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3Rh
Y2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RG
R0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmJl
Z2luQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNp
Y0Jsb2NrOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2RlUGFyc2VyKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6fklubGluZVN0YWNrRW50cnkpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAg
ICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbkhhbmRs
ZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVPcGNvZGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJp
bGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRXZhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkRGRzo6bWln
aHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
SW5saW5lRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5j
dGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpwcmludFdoaXRlU3BhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpkZWNvZGVkQ29kZU1hcEZvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAgICAg
KEpTQzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJh
bmRzOjpnZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICogcnVudGltZS9F
eGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNl
Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxl
Rm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpjb21w
aWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5o
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9y
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9maWxlZENvZGVCbG9ja0Zv
cik6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmNwcDoKKyAgICAgICAgKEpTQzo6SGV1
cmlzdGljczo6aW5pdGlhbGl6ZUhldXJpc3RpY3MpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlz
dGljcy5oOgorCiAyMDExLTEwLTE4ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBQYXJhbGxlbEpvYnM6IG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgc2hv
dWxkIGJlIGRldGVybWluZWQgZHluYW1pY2FsbHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiAr
MjUwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4g
cmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0K
ICAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJu
YXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZlOyB9CiAgICAgICAgIAorICAgICAg
ICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENv
ZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UncmUg
aW4gdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgdGhlIGJhc2VsaW5lIHZlcnNpb24uCisgICAgICAg
ICAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBz
dGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwpAQCAtMzc1LDEwICszODcsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyBy
ZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7
IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7IH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAgICAgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25Db3VudDsgfQog
ICAgICAgICB2b2lkIHNldEluc3RydWN0aW9uQ291bnQodW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3Vu
dCkgeyBtX2luc3RydWN0aW9uQ291bnQgPSBpbnN0cnVjdGlvbkNvdW50OyB9Ci0jZW5kaWYKIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBj
b2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhBcml0eUNoZWNrKQpAQCAtOTQ0LDkg
Kzk1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwotI2lm
bmRlZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbkNvdW50OwotI2VuZGlm
CiAKICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1bWVudHNS
ZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwzNSBAQCBzdHJ1Y3QgQ29k
ZU9yaWdpbiB7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBi
eXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQor
ICAgIAorICAgIC8vIFRoZSBpbmxpbmUgZGVwdGggaXMgdGhlIGRlcHRoIG9mIHRoZSBpbmxpbmUg
c3RhY2ssIHNvIDEgPSBub3QgaW5saW5lZCwKKyAgICAvLyAyID0gaW5saW5lZCBvbmUgZGVlcCwg
ZXRjLgorICAgIHVuc2lnbmVkIGlubGluZURlcHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHJlc3VsdCA9IDE7CisgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50
ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhl
ci5ieXRlY29kZUluZGV4CisgICAgICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIu
aW5saW5lQ2FsbEZyYW1lOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gR2V0
IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1
Z2dpbmcgb25seS4KKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVmVjdG9yPENvZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0aCk7Cisg
ICAgICAgIHJlc3VsdC5sYXN0KCkgPSAqdGhpczsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBy
ZXN1bHQuc2l6ZSgpIC0gMTsKKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQg
PSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmVzdWx0W2luZGV4LS1dID0gY3VycmVudC0+Y2Fs
bGVyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgogfTsKIAogc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CkBAIC02Myw3ICs5Miw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJh
bWUgewogICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0OwogICAgIHVuc2lnbmVkIGNhbGxlZVZSOwog
ICAgIENvZGVPcmlnaW4gY2FsbGVyOwotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c0luY2x1ZGlu
Z1RoaXM7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA6IDMxOworICAg
IGJvb2wgaXNDYWxsIDogMTsKIH07CiAKIHN0cnVjdCBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zm
c2V0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDQsOSArMTQ0LDkgQEAgSlNPYmplY3QqIEJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSgpCiAKICAgICBtX3Njb3BlTm9kZS0+ZW1pdEJ5dGVjb2RlKCp0aGlzKTsKIAotI2lm
bmRlZiBOREVCVUcKICAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1Y3Rpb25Db3VudChtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAorI2lmbmRlZiBOREVCVUcKICAgICBpZiAo
c19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29kZUJsb2NrLT5kdW1wKG1fc2NvcGVD
aGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDk3
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdp
bkJhc2ljQmxvY2soQmFzaQogICAgIAogICAgIEFTU0VSVCghbV9ibG9jayk7CiAgICAgCisgICAg
QVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJh
c2ljQmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NFUlQoYmFz
aWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+
dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNB
dFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBiYXNpY0Jsb2NrLT5lbmQgLSBiYXNpY0Jsb2NrLT5iZWdpbjsgKytpKQogICAgICAgICBtX25v
ZGVzW2ldLmNsZWFyKCk7CiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhl
YWQ7CkBAIC02MDgsNiArNjEyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKE5vZGVJ
bmRleCBubwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgorICAg
IGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBCcmVh
a3BvaW50OgpAQCAtNjYyLDYgKzY2Nyw3IEBAIGlubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlU3RhdGVBdFQKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICBjYXNlIFBoaToKICAgICBj
YXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIC8vIFRoZSBibG9jayB0
cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAgICBzb3VyY2UgPSAm
aW5WYXJpYWJsZTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMTQg
QEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscykKICAgICB7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxz
KHVuc2lnbmVkIG5ld051bUxvY2FscykKKyAgICB7CisgICAgICAgIHZhcmlhYmxlc0F0SGVhZC5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3Vy
ZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVt
TG9jYWxzKTsKKyAgICB9CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBm
b3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MK
ICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRC
bG9jaykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fY3VycmVudEJsb2Nr
KDApCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3BhcnNlRmFpbGVk
KGZhbHNlKQogICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgpCkBAIC03Nyw3
ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICBi
b29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2Rl
VHlwZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCi0gICAgLy8gSGFuZGxl
IGludHJpbnNpYyBmdW5jdGlvbnMuCisgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1
ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgorICAg
IGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgaW50
IHJlc3VsdE9wZXJhbmQsIEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCB1
bnNpZ25lZCBuZXh0T2Zmc2V0KTsKKyAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4g
UmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEg
Y2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1
bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFzaWMgYmxvY2sgb2Yg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCk7CkBAIC0xMDUsMTAgKzEwOCw4IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIC8vIEdl
dC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAg
IE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCisgICAgTm9kZUluZGV4IGdldERpcmVjdChpbnQg
b3BlcmFuZCkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3Rh
bnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQgLSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleDsKQEAgLTEyMywxMCArMTI0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNpZ25lZClvcGVy
YW5kKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkK
KyAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdl
dERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOworICAgIH0K
KyAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsK
LSAgICAgICAgb3BlcmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5k
KTsKLSAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlm
IChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgc2V0QXJndW1lbnQo
b3BlcmFuZCwgdmFsdWUpOwpAQCAtMTM2LDE4ICsxMzksMzUgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCwg
dmFsdWUpOwogICAgIH0KKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CisgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3Nl
dCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9k
ZUluZGV4IGdldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVy
YW5kKTsKLQorICAgICAgICAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9n
cmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEZsdXNoKSB7
CisgICAgICAgICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sg
d2FudHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKKyAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5v
dCBsb2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KKyAgICAg
ICAgICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICAgICAgTm9k
ZSYgZmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOworICAgICAgICAgICAg
ICAgIGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9j
YWwob3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1
c2hDaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBH
ZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAgICAg
QVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gQ2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAt
MTc5LDIxICsxOTksMzQgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogCiAg
ICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0QXJn
dW1lbnQpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlSW5kZXhd
OworICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEZsdXNoKSB7CisgICAgICAgICAgICAg
ICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2Fs
IHRvIGJlIGxpdmUKKyAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZh
bHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KKyAgICAgICAgICAgICAgICAvLyB3
aGljaCBjYXNlIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9
IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOworICAgICAgICAgICAgICAgIGlmIChmbHVzaENo
aWxkLm9wID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5m
byh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBu
b2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBTZXRBcmd1bWVudCkgewog
ICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0
IGJhc2ljIGJsb2NrOyBsaW5rCiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRo
ZSBTZXRBcmd1bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5sb2NhbCgpID09IHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+bG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAg
ICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+
dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4
OwogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAgICAg
ICAgaWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNl
dExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAg
QVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2Rl
UHRyLT5jaGlsZDEoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFu
ZCk7CkBAIC0yMTQsNiArMjQ3LDUxIEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGZsdXNoKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgb3Bl
cmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwor
ICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleDsKKyAgICAgICAgaW50IGluZGV4
OworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAg
IGluZGV4ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBub2RlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsKKyAgICAgICAgICAgIG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwor
ICAgICAgICBpZiAobm9kZS5vcCA9PSBGbHVzaCB8fCBub2RlLm9wID09IFNldEFyZ3VtZW50KSB7
CisgICAgICAgICAgICAvLyBJZiBhIGxvY2FsIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCwgb3Ig
aWYgaXQncyBhbiBhcmd1bWVudCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGZpcnN0IGJhc2ljIGJs
b2NrLCB0aGVuIHRoZXJlIGlzIHJlYWxseSBubyBuZWVkIHRvIGZsdXNoIGl0LiBJbiBmYWN0Cisg
ICAgICAgICAgICAvLyBlbWl0dGluZyBhIEZsdXNoIGluc3RydWN0aW9uIGNvdWxkIGp1c3QgY29u
ZnVzZSB0aGluZ3MsIHNpbmNlIHRoZQorICAgICAgICAgICAgLy8gZ2V0QXJndW1lbnQoKSBjb2Rl
IGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBzZWUgYSBGbHVzaCBvZiBhIFNldEFyZ3VtZW50LgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwgbm9kZUluZGV4
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9w
cmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7CisgICAg
ICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSkpOworICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEZsdXNoLCBwaGkpOworICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIG1fYXJn
dW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBp
bmRleCkpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChpbmRleCkgPSBub2RlSW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlSW5kZXgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFj
a0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUo
aW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBHZXQgYW4gb3Bl
cmFuZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCiAg
ICAgTm9kZUluZGV4IGdldFRvSW50MzIoaW50IG9wZXJhbmQpCkBAIC02OTIsMTMgKzc3MCwyNSBA
QCBwcml2YXRlOgogICAgICAgICAvLyBhbnkgYmxvY2tzIGluIG1fdW5saW5rZWRCbG9ja3MgdG8g
anVtcCBiYWNrIGludG8gdGhpcyBibG9jay4KICAgICAgICAgQmxvY2tJbmRleCBtX2NhbGxzaXRl
QmxvY2tIZWFkOwogICAgICAgICAKLSAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZWU7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBtX3JldHVyblZhbHVlOworICAgICAgICAKKyAgICAg
ICAgLy8gRGlkIHdlIHNlZSBhbnkgcmV0dXJucz8gV2UgbmVlZCB0byBoYW5kbGUgdGhlICh1bmNv
bW1vbiBidXQgbmVjZXNzYXJ5KQorICAgICAgICAvLyBjYXNlIHdoZXJlIGEgcHJvY2VkdXJlIHRo
YXQgZG9lcyBub3QgcmV0dXJuIHdhcyBpbmxpbmVkLgorICAgICAgICBib29sIG1fZGlkUmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gTGlzdCBvZiBlYXJseSByZXR1cm5zIHRoYXQgd2Ugc2F3
LiBJZiB3ZSBzYXcgZWFybHkgcmV0dXJucyB0aGVuIHdlCisgICAgICAgIC8vIG5lZWQgdHdvIHRo
aW5nczogKDEpIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGNhbGwgbmVlZHMgdG8gYmUgYSBuZXcK
KyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIGFuZCAoMikgd2UgbmVlZCB0byBsaW5rIHRoZSBlYXJs
eSByZXR1cm5zIHRvIHRoaXMgbmV3CisgICAgICAgIC8vIGJsb2NrLgorICAgICAgICBWZWN0b3I8
QmxvY2tJbmRleD4gbV9lYXJseVJldHVybnM7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFj
a0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVl
VlIpOworICAgICAgICBJbmxpbmVTdGFja0VudHJ5KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAg
ICAgIElubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxS
ZWdpc3RlciBjYWxsZWVWUiwgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxS
ZWdpc3RlciBsYXN0QXJnKTsKICAgICAgICAgCiAgICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCkK
ICAgICAgICAgewotICAgICAgICAgICAgbV9ieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1Rv
cCA9IG1fY2FsbGVlOworICAgICAgICAgICAgbV9ieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFj
a1RvcCA9IG1fY2FsbGVyOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQgcmVtYXBP
cGVyYW5kKGludCBvcGVyYW5kKQpAQCAtNzU2LDYgKzg0NiwxMDggQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRh
cmdldCwgaW50IHJlc3VsdE9wZXJhbmQsIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGlu
dCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5leHRPZmZzZXQpCit7CisgICAgLy8g
Rmlyc3QsIHRoZSByZWFsbHkgc2ltcGxlIGNoZWNrczogZG8gd2UgaGF2ZSBhbiBhY3R1YWwgSlMg
ZnVuY3Rpb24/CisgICAgaWYgKCFleHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBleHBlY3RlZEZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKKyAgICAKKyAgICAvLyBEb2VzIHRo
ZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRo
ZSB0YXJnZXQ/IFdlIGNvdWxkCisgICAgLy8gaW5saW5lIGFyaXR5IGNoZWNrIGZhaWx1cmVzLCBi
dXQgZm9yIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5IGRvbid0LgorICAgIGlmIChleGVjdXRhYmxl
LT5wYXJhbWV0ZXJDb3VudCgpICE9IGxhc3RBcmcgLSBmaXJzdEFyZyArIDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBIYXZlIHdlIGV4Y2VlZGVkIGlubGluZSBzdGFjayBk
ZXB0aCwgb3IgYXJlIHdlIHRyeWluZyB0byBpbmxpbmUgYSByZWN1cnNpdmUgY2FsbD8KKyAgICAv
LyBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGRldGVjdGVkLCB0aGVuIGRvbid0IGlubGluZS4KKyAg
ICB1bnNpZ25lZCBkZXB0aCA9IDA7CisgICAgZm9yIChJbmxpbmVTdGFja0VudHJ5KiBlbnRyeSA9
IG1faW5saW5lU3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5tX2NhbGxlcikgeworICAg
ICAgICArK2RlcHRoOworICAgICAgICBpZiAoZGVwdGggPiBIZXVyaXN0aWNzOjptYXhpbXVtSW5s
aW5pbmdEZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGVwdGggZXhjZWVkZWQu
CisgICAgICAgIAorICAgICAgICBpZiAoZW50cnktPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxl
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWN1cnNpb24gZGV0ZWN0ZWQuCisgICAg
fQorICAgIAorICAgIC8vIERvZXMgdGhlIGNvZGUgYmxvY2sncyBzaXplIGFuZCBvcGNvZGUgc2V0
IG1hdGNoIHRoZSBoZXVyaXN0aWNzL3JlcXVpcmVtZW50cyBmb3IgYmVpbmcKKyAgICAvLyBhbiBp
bmxpbmUgY2FuZGlkYXRlPworICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGV4cGVjdGVk
RnVuY3Rpb24tPnByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVGb3JDYWxsKTsKKyAgICBpZiAoIWNh
bklubGluZUZ1bmN0aW9uRm9yQ2FsbChwcm9maWxlZEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gaXQgbG9va3MgbGlrZSB3ZSBz
aG91bGQgZGVmaW5pdGVseSBpbmxpbmUgdGhpcyBjb2RlLiBQcm9jZWVkCisgICAgLy8gd2l0aCBw
YXJzaW5nIHRoZSBjb2RlIHRvIGdldCBieXRlY29kZSwgc28gdGhhdCB3ZSBjYW4gdGhlbiBwYXJz
ZSB0aGUgYnl0ZWNvZGUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBjb2RlIGJsb2NrIHdlIGdldCBo
ZXJlIGlzIGludGVuZGVkIHRvIGRpZSBhZnRlciBoYW5kbGVJbmxpbmluZygpCisgICAgLy8gcmV0
dXJucy4KKyAgICBKU09iamVjdCogZXhjZXB0aW9uOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNv
ZGVCbG9jayA9IGV4ZWN1dGFibGUtPnByb2R1Y2VDb2RlQmxvY2tGb3IocHJvZmlsZWRCbG9jay0+
Z2xvYmFsT2JqZWN0KCksIGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCksIE9wdGltaXppbmdDb21w
aWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgCisgICAg
Ly8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBp
bmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKKyAgICAvLyBieSBtYWtpbmcgc3VyZSB0aGF0
IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZSBhcmUgZmx1c2hlZC4KKyAgICBmbHVzaChjYWxsVGFy
Z2V0KTsKKyAgICBmb3IgKGludCBhcmcgPSBmaXJzdEFyZzsgYXJnIDw9IGxhc3RBcmc7ICsrYXJn
KQorICAgICAgICBmbHVzaChhcmcpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBh
cmVhIHVzZWQgYnkgdGhlIGNhbGwgZnJhbWUgaXMgcmVzZXJ2ZWQuCisgICAgZm9yIChpbnQgYXJn
ID0gbGFzdEFyZyArIDEgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2Rl
QmxvY2stPm1fbnVtVmFyczsgYXJnLS0gPiBsYXN0QXJnICsgMTspCisgICAgICAgIG1fcHJlc2Vy
dmVkVmFycy5zZXQobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGFyZykpOworICAgIAor
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KKyAgICB1bnNpZ25l
ZCBuZXdOdW1Mb2NhbHMgPSBsYXN0QXJnICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArIGNvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmIChuZXdOdW1M
b2NhbHMgPiBtX251bUxvY2FscykgeworICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2Fs
czsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgfQorCisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0Vu
dHJ5KHRoaXMsIGNvZGVCbG9jaywgcHJvZmlsZWRCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCkgLSAxLCBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbFRhcmdldCksIG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh1c2VzUmVzdWx0ID8gcmVzdWx0T3BlcmFuZCA6IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLCBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQobGFz
dEFyZykpOworICAgIAorICAgIHBhcnNlQ29kZUJsb2NrKCk7CisgICAgCisgICAgLy8gSWYgdGhl
IGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZl
IGxpbmtpbmcgdG8gZG8uCisgICAgaWYgKGlubGluZVN0YWNrRW50cnkuY2FsbHNpdGVCbG9ja0hl
YWQgIT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7CisgICAgICAgIEFTU0VSVCghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgICAgIGxpbmtC
bG9jayhtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkuY2FsbHNpdGVCbG9ja0hlYWRd
LmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgICAgICBsaW5r
QmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7CisgICAgfSBlbHNlCisg
ICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgp
KTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1
cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YKKyAgICAvLyB0aGUgY2Fs
bGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5v
dy4KKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2Vhcmx5UmV0dXJucy5pc0VtcHR5KCkgJiYg
aW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgLy8gSWYgdGhlIGxhc3QgYmFzaWMgYmxvY2sgZG9lcyBub3QgaGF2ZSBhIHRlcm1pbmFs
LCB0aGVuIGFkZCBhIGp1bXAuCisgICAgaWYgKCFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkp
IHsKKyAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCkpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3JhcGguc2l6ZSgpOworICAg
IH0KKyAgICAKKyAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9j
ayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxp
bmVTdGFja0VudHJ5Lm1fZWFybHlSZXR1cm5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW21fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2Vhcmx5
UmV0dXJuc1tpXV0tPmVuZCAtIDFdOworICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBKdW1wKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7CisgICAg
ICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAg
ICB9CisgICAgCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRo
ZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX2dyYXBoLnNpemUoKSwg
bV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOworICAgIG1fY3Vy
cmVudEJsb2NrID0gYmxvY2suZ2V0KCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxv
Y2sucmVsZWFzZSgpKTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHJldHVybiBhbmQg
Y29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwgYnV0CisgICAgLy8gaW4g
dGhlIG5ldyBiYXNpYyBibG9jay4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJh
bmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewpAQCAtMTYy
MSwxMCArMTgxMywyOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3JldDoKKyAgICAgICAgICAgIGlmIChtX2lu
bGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIHNldERp
cmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
ZGlkUmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG5hbWUpID09IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1w
LCBPcEluZm8oTm9CbG9jaykpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2Vhcmx5UmV0dXJucy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X3JldCk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2RpZFJldHVybiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChuYW1lKSA9PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSnVtcCwgT3BJbmZvKE5vQmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV9lYXJseVJldHVybnMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0g
MSk7CisgICAgICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9lbmQpOwogCkBAIC0xNjQwLDYgKzE4NTAsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxUYXJnZXQg
PSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBlbnVt
IHsgQ29uc3RhbnRGdW5jdGlvbiwgTGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9IGNh
bGxUeXBlOwogICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5pc0xpbmtl
ZCgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgaXQgaGFkIGJlZW4gbGlua2VkIHRoZW4gbWF5YmUgd2Ugd291bGQgaGF2ZSBpbmxp
bmVkIGl0LiBJZiB3ZSBhbGxvdyB0aGlzCisgICAgICAgICAgICAgICAgLy8gY29kZSB0byBleGVj
dXRlIHRoZW4gd2UgbWlnaHQgZ2V0IHN0dWNrIGV4ZWN1dGluZyBhIHNsb3cgY2FsbCB3aXRob3V0
IGFueQorICAgICAgICAgICAgICAgIC8vIGhvcGUgb2YgcmVvcHRpbWl6aW5nLgorICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJs
b2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50RnVu
Y3Rpb247CiAgICAgICAgICAgICBlbHNlIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkuaXNMaW5rZWQoKSAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkpCkBAIC0xNjU1LDI1ICsxODczLDM4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBEbyB3ZSBoYXZlIGEgcmVz
dWx0PwogICAgICAgICAgICAgICAgIGJvb2wgdXNlc1Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxlciBoYXBweQorICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbCk7CiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3Ry
dWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKICAg
ICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsKICAg
ICAgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9u
LT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdE9wZXJhbmQgPSBwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICAgICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyBPUENP
REVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG5leHRPZmZzZXQpOworICAgICAgICAgICAgICAg
ICAgICBuZXh0T2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5j
dGlvbjsKICAgICAgICAgICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7Ci0gICAgICAg
ICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24pCi0gICAgICAgICAgICAg
ICAgICAgIGludHJpbnNpYyA9IG1fZ3JhcGgudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIGNhbGxUYXJnZXQpLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOwotICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRG
dW5jdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlv
bikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1
ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCk7CisgICAgICAgICAg
ICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVjdGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50
cmluc2ljKCk7CisgICAgICAgICAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rp
b24gPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChjYWxsVHlwZSA9PSBMaW5rZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmNhbGxlZS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaW50cmluc2ljID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2lj
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhm
dW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0
aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8o
bV9jdXJyZW50SW5kZXgpLmNhbGxlZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50cmlu
c2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaGFu
ZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RB
cmcsIGxhc3RBcmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRhaW5BYm91
dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmluc2lj
KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcs
IHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgp
IGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGNhbGxUYXJnZXQsIHJlc3VsdE9w
ZXJhbmQsIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zmc2V0KSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNpZGUg
YnJhY2VzLgogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNzMyLDcgKzE5NjMsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgLy8gYXJlIGNvbXBhdGlibGUuCiAgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2NrQmVnaW4sIG1fY3VycmVudEluZGV4ID09IGJsb2Nr
QmVnaW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+aXNPU1JU
YXJnZXQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmV2ZXIgZG8gT1NSIGludG8gYW4gaW5s
aW5lZCBjb2RlIGJsb2NrLiBUaGF0IGNvdWxkIG5vdCBoYXBwZW4sIHNpbmNlIE9TUgorICAgICAg
ICAgICAgLy8gbG9va3MgdXAgdGhlIGNvZGUgYmxvY2sgdGhhdCBpcyB0aGUgcmVwbGFjZW1lbnQg
Zm9yIHRoZSBiYXNlbGluZSBKSVQgY29kZQorICAgICAgICAgICAgLy8gYmxvY2suIEhlbmNlLCBt
YWNoaW5lIGNvZGUgYmxvY2sgPSB0cnVlIGNvZGUgYmxvY2sgPSBub3QgaW5saW5lIGNvZGUgYmxv
Y2suCisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyKQorICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaGludCk7CiAgICAgICAgIH0KQEAg
LTE3ODQsNyArMjAxOSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygp
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0g
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2Nh
bCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3Vt
ZW50UGhpU3RhY2spKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFBoaSB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gRmx1c2ggfHwgKG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0g
QXJndW1lbnRQaGlTdGFjaykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIApAQCAtMTg4MiwyNSArMjExNywy
OSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOCiAgICAgbV9oYXZl
QnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRl
eCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSKQorQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIq
IGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2Fs
bGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgbGFz
dEFyZykKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2Nv
ZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykK
ICAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9ja0hlYWQpCi0gICAgLCBtX2Nh
bGxlZShieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKKyAgICAsIG1fcmV0dXJuVmFs
dWUocmV0dXJuVmFsdWVWUikKKyAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQorICAgICwgbV9jYWxs
ZXIoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3ApCiB7Ci0gICAgaWYgKG1fY2FsbGVl
KSB7CisgICAgaWYgKG1fY2FsbGVyKSB7CiAgICAgICAgIC8vIElubGluZSBjYXNlLgogICAgICAg
ICBBU1NFUlQoY29kZUJsb2NrICE9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAgICAg
ICAgIEFTU0VSVChjYWxsZWVWUiAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAg
QVNTRVJUKGxhc3RBcmcgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VS
VChjYWxsc2l0ZUJsb2NrSGVhZCAhPSBOb0Jsb2NrKTsKICAgICAgICAgCiAgICAgICAgIElubGlu
ZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVj
dXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICAgICAgaW5saW5lQ2Fs
bEZyYW1lLnN0YWNrT2Zmc2V0ID0gbV9jYWxsZWUtPm1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJl
Z2lzdGVyczsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gbGFzdEFyZyAr
IDEgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlubGluZUNh
bGxGcmFtZS5jYWxsZWVWUiA9IGNhbGxlZVZSOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2Fs
bGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIGlubGlu
ZUNhbGxGcmFtZS5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzID0gY29kZUJsb2NrLT5tX251bVBh
cmFtZXRlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0NhbGwgPSB0cnVlOwogICAgICAg
ICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5hcHBlbmQo
aW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAmYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkubGFzdCgpOwogICAgICAgICAK
QEAgLTE5MjcsNiArMjE2Niw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmUKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNhc2UuCiAgICAgICAgIEFTU0VS
VChjb2RlQmxvY2sgPT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsKICAgICAgICAgQVNT
RVJUKGNhbGxlZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQo
cmV0dXJuVmFsdWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJU
KGxhc3RBcmcgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVChjYWxs
c2l0ZUJsb2NrSGVhZCA9PSBOb0Jsb2NrKTsKIAogICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9
IDA7CkBAIC0xOTU0LDEwICsyMTk1LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29k
ZUJsb2NrKCkKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxp
bWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBP
d25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJl
bnRJbmRleCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9j
dXJyZW50SW5kZXgsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMp
KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOworICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFw
cGVuZChibG9jay5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
IXBhcnNlQmxvY2sobGltaXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5
NjUsNiArMjIwOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8PSBsaW1pdCk7CiAKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5lbmQgPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gMDsKICAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAotYm9v
bCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3RlbXBsYXRlPGJvb2wg
KCpjYW5IYW5kbGVPcGNvZGUpKE9wY29kZUlEKT4KK2Jvb2wgY2FuSGFuZGxlT3Bjb2RlcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2Rl
QmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtNDMs
NyArNDQsNyBAQCBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsCiAgICAg
ICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2luW2J5
dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIHsKICNkZWZpbmUgREVGSU5FX09QKG9wY29kZSwgbGVu
Z3RoKSAgICAgICAgICAgXAogICAgICAgICBjYXNlIG9wY29kZTogICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBpbGVPcGNvZGUob3Bjb2RlKSkgIFwKKyAg
ICAgICAgICAgIGlmICghY2FuSGFuZGxlT3Bjb2RlKG9wY29kZSkpICBcCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJ5dGVjb2RlT2Zm
c2V0ICs9IGxlbmd0aDsgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7CkBAIC01OCw2ICs1OSwx
NiBAQCBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuQ29tcGlsZU9wY29kZT4oY29kZUJs
b2NrKTsKK30KKworYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbklubGluZU9wY29kZT4oY29kZUJsb2Nr
KTsKK30KKwogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTc3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIERGR0NhcGFiaWxpdGllc19oCiAjZGVm
aW5lIERGR0NhcGFiaWxpdGllc19oCiAKKyNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCiAjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJJbnRyaW5zaWNzLmgiCiAjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CiAKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC0zNiwxMCArMzgsMzEgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogI2lmIEVOQUJMRShERkdfSklUKQogLy8g
RmFzdCBjaGVjayBmdW5jdGlvbnM7IGlmIHRoZXkgcmV0dXJuIHRydWUgaXQgaXMgc3RpbGwgbmVj
ZXNzYXJ5IHRvCiAvLyBjaGVjayBvcGNvZGVzLgotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZh
bChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQ
cm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KLWlubGluZSBib29sIG1pZ2h0Q29t
cGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUg
Ym9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVy
biB0cnVlOyB9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVy
aXN0aWNzOjptYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0
aWNzOjptYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JD
b25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0
cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CisKK2lubGluZSBi
b29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjpt
YXhpbXVtSW5saW5lRnVuY3Rpb25Gb3JDYWxsQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30K
K2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIE9wY29kZSBjaGVja2luZy4KIGlubGluZSBi
b29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC0xNDYsMTQgKzE2OSw0
NSBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgfQogfQog
CitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAg
c3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAKKyAgICAvLyBUaGVzZSBvcGNvZGVzIHdvdWxk
IGJlIGVhc3kgdG8gc3VwcG9ydCB3aXRoIGlubGluaW5nLCBidXQgd2UgY3VycmVudGx5IGRvbid0
IGRvIGl0LgorICAgIC8vIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBzY29wZSBjaGFpbiB3aWxsIG5v
dCBiZSBzZXQgY29ycmVjdGx5LgorICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6CisgICAgY2Fz
ZSBvcF9wdXRfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9wX3Jlc29sdmU6CisgICAgY2FzZSBvcF9y
ZXNvbHZlX2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKKyAgICAgICAgCisgICAg
Ly8gVHJpdmlhbCB0byBzdXBwb3J0IHdpdGggdGhlIGNvcHkgcHJvcGFnYXRpb24gbWFjaGluZSB3
ZSBhbHJlYWR5IGhhdmUsIGJ1dCB0aGUgZ2x1ZQorICAgIC8vIGlzbid0IHRoZXJlLCB5ZXQuCisg
ICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgICAgICAKKyAgICAvLyBJbmxpbmluZyBkb2Vzbid0
IGNvcnJlY3RseSByZW1hcCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCisgICAgY2FzZSBv
cF9uZXdfcmVnZXhwOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKTsKKyAgICB9Cit9
CisKIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKik7Citib29sIGNhbklubGluZU9w
Y29kZXMoQ29kZUJsb2NrKik7CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIGlubGluZSBib29s
IG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBi
b29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlu
bGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVy
biBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
Q29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVu
Y3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKSB7IHJldHVybiBmYWxzZTsgfQoraW5s
aW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJl
dHVybiBmYWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEKSB7
IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEKSB7
IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2Nr
KikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJs
b2NrKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogaW5s
aW5lIGJvb2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0xNzYsNiAr
MjMwLDE2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnUKICAgICBy
ZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5D
b21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5j
dGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5s
aW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5saW5lT3Bjb2Rlcyhjb2RlQmxv
Y2spOworfQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNv
bnN0cnVjdChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gREZHQ2FwYWJpbGl0aWVzX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5Nzcy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSw2ICs3OSw0NSBAQCBjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVB
Y2Nlc3NECiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNl
KHVuc2lnbmVkIGFtb3VudCkgeworICAgIHdoaWxlIChhbW91bnQtLSA+IDApCisgICAgICAgIHBy
aW50ZigiICIpOworfQorCit2b2lkIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIGlmICghbm9kZUluZGV4KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgTm9kZSAmY3VycmVudE5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgTm9kZSAmcHJl
dmlvdXNOb2RlID0gbV9ncmFwaFtub2RlSW5kZXggLSAxXTsKKyAgICBpZiAocHJldmlvdXNOb2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPENvZGVPcmln
aW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVT
dGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5saW5lU3RhY2sgPSBjdXJy
ZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgdW5zaWduZWQgY29tbW9uU2l6
ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3Rh
Y2suc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgeworICAgICAg
ICBpZiAocHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUgIT0gY3VycmVudElu
bGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaW5kZXhPZkRpdmVy
Z2VuY2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgLy8gUHJpbnQgdGhlIHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxp
bmVTdGFjay5zaXplKCk7IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykgeworICAgICAgICBwcmlu
dFdoaXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYoIjwtLSAlcFxuIiwgcHJldmlvdXNJ
bmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpOworICAgIH0KKyAgICAK
KyAgICAvLyBQcmludCB0aGUgcHVzaGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4T2ZE
aXZlcmdlbmNlOyBpIDwgY3VycmVudElubGluZVN0YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAg
IHByaW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50ZigiLS0+ICVwXG4iLCBjdXJy
ZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9Cit9
CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC05MSw2ICsxMzAs
OSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIEFT
U0VSVChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIGR1
bXBDb2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAgcHJpbnRXaGl0ZVNwYWNlKChub2RlLmNvZGVP
cmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0
aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNiArMTExLDEwIEBAIHB1
YmxpYzoKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRp
b25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAg
ICAgdm9pZCBkdW1wKENvZGVCbG9jayogPSAwKTsKICAgICB2b2lkIGR1bXAoTm9kZUluZGV4LCBD
b2RlQmxvY2sqID0gMCk7CisKKyAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2
ZW4gbm9kZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCisgICAgLy8gcHJl
Y2VkaW5nIG5vZGUuCisgICAgdm9pZCBkdW1wQ29kZU9yaWdpbihOb2RlSW5kZXgpOwogI2VuZGlm
CiAKICAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8Qmxv
Y2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTc3Mjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NS
RXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnksIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCkKK3ZvaWQgSklUQ29tcGlsZXI6OmV4
aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNv
dmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogICAgIGV4aXQu
bV9jaGVjay5saW5rKHRoaXMpOwpAQCAtNDgyLDE0ICs0ODIsNDQgQEAgdm9pZCBKSVRDb21waWxl
cjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQg
IT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6
Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAotICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZS4K
KyAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUocykuCiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkp
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsK
ICAgICAKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJh
bWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2spOworICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAg
ICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6
OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFw
LnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bWFwcGluZyk7CisgICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0
dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2xp
bmVDb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNv
ZGVPZmZzZXQpOworCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWlubGluZUNhbGxGcmFtZS0+Y2FsbGVlVlIpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAg
ICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGFkZFB0cihJbW0zMihpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAgIGNhbGxlckZy
YW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY2Fs
bGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKKyAgICAgICAgCisgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBhZGRyZXNzRm9y
KChWaXJ0dWFsQWRkcmVzcykoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVy
RmlsZTo6Q29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMiwgYWRk
cmVzc0ZvcigoVmlydHVhbEFkZHJlc3MpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBS
ZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSk7CisgICAgICAgIHN0b3JlUHRyKGNhbGxlckZyYW1l
R1BSLCBhZGRyZXNzRm9yKChWaXJ0dWFsQWRkcmVzcykoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAgICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1YWxBZGRyZXNzKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpKTsKKyAg
ICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5s
aW5lQ2FsbEZyYW1lLT5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzKSkpLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsQWRkcmVzcykoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAgIH0KKyAgICAKICAgICAvLyAxNCkgSnVtcCBp
bnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAotICAgIEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVj
b2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwg
ZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGV4aXQuY29kZU9yaWdpbikpOworICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2ln
bmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRD
b2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVChtYXBwaW5nKTsKICAgICBBU1NFUlQobWFw
cGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKQEAgLTUwNiwy
MCArNTM2LDI4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNl
bmRpZgogfQogCi12b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQm
IHNwZWN1bGF0aXZlKQorVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBp
bGVyOjpkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVkQ29kZU1hcDsKLSAgICBBU1NFUlQo
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0
ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBB
U1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKSk7Ci0gICAgY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRDb2Rl
TWFwKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrID09IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICAKKyAg
ICBzdGQ6OnBhaXI8SGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiA+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRk
KGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CiAgICAgCisg
ICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5k
ZWNvZGUocmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAgIAorICAgIHJldHVybiByZXN1bHQuZmly
c3QtPnNlY29uZDsKK30KKwordm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0
aXZlSklUJiBzcGVjdWxhdGl2ZSkKK3sKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0
c0l0ZXIgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmJlZ2luKCk7CiAgICAgT1NSRXhpdFZlY3Rv
cjo6SXRlcmF0b3IgZXhpdHNFbmQgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmVuZCgpOwogICAg
IAogICAgIHdoaWxlIChleGl0c0l0ZXIgIT0gZXhpdHNFbmQpIHsKICAgICAgICAgY29uc3QgT1NS
RXhpdCYgZXhpdCA9ICpleGl0c0l0ZXI7Ci0gICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1Io
ZXhpdCwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRl
eCksIGRlY29kZWRDb2RlTWFwKTsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0
LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7
CiAgICAgICAgICsrZXhpdHNJdGVyOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Mjcs
OCArNDI3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQg
bGluayhMaW5rQnVmZmVyJik7CiAKLSAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29u
c3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgbGlu
a09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJik7CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAg
ICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlOworICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pOworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihjb2RlLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBD
b2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCkgPT0gY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpOworICAgIH0KKyAgICAKKyAgICBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2spOwogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNz
IGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFs
RGF0YTsKQEAgLTQzOCw3ICs0NTEsOSBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIGNvZGVCbG9j
ayBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVkLCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBz
dWNoIGFzIGNvbnN0YW50IHZhbHVlcywgaW1tZWRpYXRlcy4KICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwotCisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiA+IG1fZGVjb2RlZENvZGVNYXBzOworICAgIAogICAgIC8vIFZlY3Rv
ciBvZiBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBoYW5kbGVy
IGluZm9ybWF0aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMg
d2l0aCBleGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTc3MjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjE1LDYgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MK
ICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKKyAgICBtYWNybyhGbHVzaCwgMCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBz
ZXQuICovXAogICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCkBAIC04MzUsNyArODM2LDcgQEAg
c3RydWN0IE5vZGUgewogCiAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGk7CisgICAgICAgIHJldHVybiBtX3JlZkNv
dW50ICYmIG9wICE9IFBoaSAmJiBvcCAhPSBGbHVzaDsKICAgICB9CiAKICAgICB1bnNpZ25lZCBy
ZWZDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShy
ZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0LDMxIEBAIHB1YmxpYzoKICAgICBUJiBsb2Nh
bChzaXplX3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgY29uc3QgVCYgbG9j
YWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIAorICAg
IHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUg
PD0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVf
dCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOworICAgICAgICBtX2xvY2Fscy5yZXNpemUoc2l6
ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9sb2NhbHMuc2l6ZSgp
OyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7
CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFs
dWUpCiAgICAgewotICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNpemUoKSkgewotICAgICAg
ICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXplKCk7Ci0gICAgICAgICAgICBtX2xv
Y2Fscy5yZXNpemUoaWR4ICsgMSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6
ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fbG9jYWxzW2ld
ID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKLSAgICAgICAgfQorICAgICAgICBlbnN1cmVMb2Nh
bHMoaWR4ICsgMSk7CiAgICAgICAgIAogICAgICAgICBtX2xvY2Fsc1tpZHhdID0gdmFsdWU7CiAg
ICAgfQogICAgIAorICAgIFQgZ2V0TG9jYWwoc2l6ZV90IGlkeCkKKyAgICB7CisgICAgICAgIGlm
IChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFRyYWl0czo6ZGVm
YXVsdFZhbHVlKCk7CisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tpZHhdOworICAgIH0KKyAgICAK
ICAgICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVl
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0gPT0gVHJhaXRzOjpkZWZh
dWx0VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDYgKzU3Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNlIFRo
cm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIGNhc2UgRm9y
Y2VPU1JFeGl0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0Niw3
ICs4NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4
ZWN1dGVkIiB0aGUKICAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBO
b2RlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCiAgICAgICAgIC8vIGJ5dGVjb2RlIGlu
ZGV4IGFzIHRoZSBTZXRMb2NhbC4KLSAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2Nv
ZGVPcmlnaW5Gb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luKTsKICAgICAgICAgTm9kZSYgbmV4dE5v
ZGUgPSBhdChtX2NvbXBpbGVJbmRleCArIDEpOwogICAgICAgICAKICAgICAgICAgLy8gT2RkbHks
IGl0J3MgcG9zc2libGUgZm9yIHRoZSBieXRlY29kZSBpbmRleCBmb3IgdGhlIG5leHQgbm9kZSB0
byBiZQpAQCAtODU5LDcgKzg1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgLy8gc3RhdGVtZW50KSB3b3VsZCBiZSBkZWFkIGFueXdheSAtIHNv
IHRoZSBmYWN0IHRoYXQgREZHIHdvdWxkIGhhdmUKICAgICAgICAgLy8gYWxyZWFkeSBtYWRlIHRo
ZSBhc3NpZ25tZW50LCBhbmQgYmFrZWQgaXQgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSBkdXJpbmcK
ICAgICAgICAgLy8gT1NSIGV4aXQsIHdvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIHRoZSBvbGQgSklU
IGluIGFueSB3YXkuCi0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5leHROb2RlLmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbmV4
dE5vZGUuY29kZU9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAgICAg
ICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
OTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5
OjpkdW1wKEZJTEUqIG91dCkgY29ucwogT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkK
ICAgICA6IG1fY2hlY2soY2hlY2spCiAgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUlu
ZGV4KQotICAgICwgbV9ieXRlY29kZUluZGV4KGppdC0+bV9ieXRlY29kZUluZGV4Rm9yT1NSKQor
ICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9yZWNv
dmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1l
bnRzLnNpemUoKSkKICAgICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQog
ICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7Ci0gICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpOworICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CiAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50
KQogICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKICAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCkBA
IC0yOTAsMTEgKzI5MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxv
Y2smCiAgICAgfQogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwotICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2Rl
T3JpZ2luKCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9jay5lbmQ7ICsrbV9j
b21waWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4KTsK
LSAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXg7CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5vZGUuY29kZU9yaWdpbjsKICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHNr
aXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50KW1f
Y29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQuZGVidWdP
ZmZzZXQoKSk7CkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkK
IHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBtX2J5dGVjb2RlSW5kZXhGb3JP
U1IgPSAwOworICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IENvZGVPcmlnaW4oMCk7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAgICBt
X2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKICAgICBOb2RlSW5kZXggbV9u
b2RlSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luOwogICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAgICAK
QEAgLTU2NCw3ICs1NjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4g
bV9hcmd1bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKICAg
ICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKLSAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JP
U1I7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JPU1I7CiAgICAgCiAgICAgQWJzdHJh
Y3RTdGF0ZSBtX3N0YXRlOwogICAgIApAQCAtNzk5LDcgKzc5OSw2IEBAIGlubGluZSBTcGVjdWxh
dGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkKICAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxv
Y2soKS0+bV9udW1QYXJhbWV0ZXJzKQogICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9s
b2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpCi0gICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpKQogICAgICwgbV9zdGF0ZShtX2ppdC5jb2RlQmxvY2soKSwgbV9q
aXQuZ3JhcGgoKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3
ICs5Miw3IEBAIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWVTbG8KICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtYWNoaW5lQ2FsbGVyLT5jb2RlQmxvY2soKS0+Y29kZU9y
aWdpbkZvclJldHVybihyZXR1cm5QQygpKTsKICAgICAKICAgICBmb3IgKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNh
bGxGcmFtZTspIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0SW5saW5lQ2FsbEZyYW1l
ID0gaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIAogICAgICAgICBD
YWxsRnJhbWUqIGlubGluZWRDYWxsZXIgPSBtYWNoaW5lQ2FsbGVyICsgaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDEx
ICs0MDYsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogICAg
IHJldHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rp
b25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5k
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBl
eGNlcHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU2Nv
cGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25L
aW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3Qq
JiBleGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5
Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJh
bWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9y
bWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGds
b2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsT2JqZWN0LCAw
LCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFy
c2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWJvZHkpIHsK
ICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
NDQyLDcgKzQ0Miw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IK
ICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkp
ID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAg
T3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2Nr
Rm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXpp
bmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24p
OworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNv
ZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5Ob2RlLCAh
IW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGls
YXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQog
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01MDIsNyArNTAyLDcgQEAgSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAogICAgIEFTU0VSVCgoaml0VHlw
ZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3IoZXhlYywgc2NvcGVDaGFpbk5v
ZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBG
aXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOworICAgIE93blB0
cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0Zvcihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwg
Q29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0NjIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVj
ZUNvZGVCbG9ja0ZvcihKU0dsb2JhT2JqZWN0KiwgU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlv
bktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKIAog
ICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKQog
ICAgICAgICB7CkBAIC02MTcsNiArNjE3LDI5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgQ29kZUJsb2NrKiByZXN1bHQ7Cisg
ICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVz
dWx0KTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVu
IHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIG1f
bnVtQ2FwdHVyZWRWYXJpYWJsZXMgOiAzMTsKICAgICAgICAgYm9vbCBtX2ZvcmNlVXNlc0FyZ3Vt
ZW50cyA6IDE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0
aWNzLmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IZXVyaXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTUgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVyaXN0aWNzIHsKIAordW5zaWduZWQgbWF4aW11bUV2
YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQgbWF4aW11
bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQg
bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQ7Cit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5k
aWRhdGVJbnN0cnVjdGlvbkNvdW50OworCit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUlubGlu
aW5nRGVwdGg7CisKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXA7CiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFu
eXRpbWVTb29uOwpAQCAtOTksNiArMTA4LDE4IEBAIHZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlh
YmxlLCBjb25zdCBjaGEKIAogdm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCiB7CisgICAgLy8g
RklYTUU6IE11c3QgcmV2aXNpdCB0aGVzZSBoZXVyaXN0aWNzISBUaGUgREZHLCBiZWluZyBhbiBv
cHRpbWl6aW5nIGNvbXBpbGVyLCBtYXkKKyAgICAvLyB0YWtlIGEgbG9uZyB0aW1lIGZvciBwYXRo
b2xvZ2ljYWxseSBodWdlIGNvZGUgYmxvY2tzLiBUaGUgYmVzdCB3YXkgdG8gY29wZSB3aXRoCisg
ICAgLy8gdGhpcyBpcyB0byByZWZ1c2UgdG8gb3B0aW1pemUgdGhlbS4KKyAgICBTRVQobWF4aW11
bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAgICAg
ICAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11
bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAg
ICAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11
bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAg
ICAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11
bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAKKyAgICBTRVQo
bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDIw
KTsKKyAgICAKKyAgICBTRVQobWF4aW11bUlubGluaW5nRGVwdGgsIDIpOworCiAgICAgU0VUKGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CiAg
ICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAt
NTAwMCk7CiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRp
bWVTb29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiA5NzcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVy
aXN0aWNzIHsKIAorZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11
bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Citl
eHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlv
bkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWdu
ZWQgbWF4aW11bUlubGluaW5nRGVwdGg7IC8vIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9
IG5vIGlubGluaW5nLCAyID0gb25lIGxldmVsLCBldGMuCisKIGV4dGVybiBpbnQzMl90IGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBl
eGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGV4dGVybiBp
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111528</attachid>
            <date>2011-10-18 16:48:30 -0700</date>
            <delta_ts>2011-10-18 19:20:38 -0700</delta_ts>
            <desc>work in progress - almost done</desc>
            <filename>inlining_patch_3.diff</filename>
            <type>text/plain</type>
            <size>80982</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDExLTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscyBvciBldmVuIGNyYXppZXIgdGhpbmdz
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRJbnN0
cnVjdGlvbkNvdW50KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAg
IChKU0M6OkNvZGVPcmlnaW46OmlubGluZURlcHRoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJh
c2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJlTG9j
YWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpVbmxpbmtlZEJsb2NrOjpVbmxpbmtlZEJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0
YWNrRW50cnk6On5JbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVN1Y2Nl
c3Nvcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmRldGVybWluZVJlYWNo
YWJpbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxl
T3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2Rlcyk6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGls
ZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZVByb2dyYW0pOgorICAgICAg
ICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdo
dElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Jbmxp
bmVPcGNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAg
ICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuSW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpH
ZXRCeXRlY29kZUJlZ2luRm9yQmxvY2s6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVj
dWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpkZWNvZGVk
Q29kZU1hcEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0
cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkR2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjplbnN1cmVMb2NhbHMp
OgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmdldExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rp
b25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWVTbG93KToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2ZpbGVk
Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0
ZXJDb3VudCk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGV1cmlzdGljczo6aW5pdGlhbGl6ZUhldXJpc3RpY3MpOgorICAgICAgICAqIHJ1bnRpbWUv
SGV1cmlzdGljcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorCiAyMDExLTEw
LTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBcnJheS5wcm90b3R5cGUgbWV0aG9kcyBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk3
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRl
cm5hdGl2ZS5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZl
OyB9CiAgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyBUaGlz
IGNhbiBoYXBwZW4gaWYgd2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgdGhlIGJhc2Vs
aW5lIHZlcnNpb24uCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwpAQCAtMzc1
LDEwICszODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgdm9p
ZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7IH0KIAotI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25Db3VudDsgfQogICAgICAgICB2b2lkIHNldEluc3RydWN0aW9uQ291bnQodW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCkgeyBtX2luc3RydWN0aW9uQ291bnQgPSBpbnN0cnVjdGlv
bkNvdW50OyB9Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0SklU
Q29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhB
cml0eUNoZWNrKQpAQCAtOTQ0LDkgKzk1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+
IG1faW5zdHJ1Y3Rpb25zOwotI2lmbmRlZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgbV9pbnN0
cnVjdGlvbkNvdW50OwotI2VuZGlmCiAKICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAg
ICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIENvZGVPcmlnaW5faAogCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTU2LDYgKzU3LDE3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCisgICAgLy8gVGhlIGlubGluZSBkZXB0aCBp
cyB0aGUgZGVwdGggb2YgdGhlIGlubGluZSBzdGFjaywgc28gMSA9IG5vdCBpbmxpbmVkLAorICAg
IC8vIDIgPSBpbmxpbmVkIG9uZSBkZWVwLCBldGMuCisgICAgdW5zaWduZWQgaW5saW5lRGVwdGgo
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3Ro
ZXIpIGNvbnN0OworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAvLyBHZXQgdGhlIGlubGluZSBz
dGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5Lgor
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OworI2VuZGlmCiB9Owog
CiBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKQEAgLTYzLDcgKzc1LDggQEAgc3RydWN0IElubGlu
ZUNhbGxGcmFtZSB7CiAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7CiAgICAgdW5zaWduZWQgY2Fs
bGVlVlI7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRz
SW5jbHVkaW5nVGhpczsKKyAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzIDog
MzE7CisgICAgYm9vbCBpc0NhbGwgOiAxOwogfTsKIAogc3RydWN0IENvZGVPcmlnaW5BdENhbGxS
ZXR1cm5PZmZzZXQgewpAQCAtNzEsNiArODQsMzMgQEAgc3RydWN0IENvZGVPcmlnaW5BdENhbGxS
ZXR1cm5PZmZzZXQgewogICAgIHVuc2lnbmVkIGNhbGxSZXR1cm5PZmZzZXQ7CiB9OwogCitpbmxp
bmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGgoKSBjb25zdAoreworICAgIHVuc2ln
bmVkIHJlc3VsdCA9IDE7CisgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxp
bmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICByZXN1bHQrKzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAor
aW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5ieXRlY29kZUlu
ZGV4CisgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7
Cit9CisgICAgCisjaWZuZGVmIE5ERUJVRworLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMg
aXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KK2lubGluZSBWZWN0
b3I8Q29kZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhY2soKSBjb25zdAoreworICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiByZXN1bHQoaW5saW5lRGVwdGgoKSk7CisgICAgcmVzdWx0Lmxhc3Qo
KSA9ICp0aGlzOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVzdWx0LnNpemUoKSAtIDI7CisgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXN1
bHRbaW5kZXgtLV0gPSBjdXJyZW50LT5jYWxsZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNl
bmRpZgorCiBpbmxpbmUgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldEZvckNvZGVPcmlnaW4o
Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZGF0YSkKIHsKICAgICByZXR1cm4gZGF0YS0+
Y2FsbFJldHVybk9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NzcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOSArMTQ0LDkgQEAgSlNPYmplY3QqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAKICAgICBtX3Njb3BlTm9kZS0+ZW1pdEJ5dGVjb2RlKCp0
aGlzKTsKIAotI2lmbmRlZiBOREVCVUcKICAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1Y3Rpb25D
b3VudChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAorI2lmbmRlZiBOREVC
VUcKICAgICBpZiAoc19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29kZUJsb2NrLT5k
dW1wKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBBYnN0cmFj
dFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIAogICAgIEFTU0VSVCghbV9ibG9jayk7
CiAgICAgCisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0g
YmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VSVChi
YXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5lbmQgLSBiYXNpY0Jsb2NrLT5iZWdpbjsgKytpKQog
ICAgICAgICBtX25vZGVzW2ldLmNsZWFyKCk7CiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2Nr
LT52YWx1ZXNBdEhlYWQ7CkBAIC02MDgsNiArNjEyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKE5vZGVJbmRleCBubwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNjYyLDYgKzY2Nyw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICBjYXNl
IFBoaToKICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIC8v
IFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAg
ICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTIgKzQ2LDI0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICAgICAgLCBpc09TUlRhcmdl
dChmYWxzZSkKICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNo
b3VsZFJldmlzaXQoZmFsc2UpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIGlzTGlu
a2VkKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCiAgICAgICAg
ICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZh
cmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBlbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQorICAgIHsKKyAgICAgICAgdmFyaWFibGVz
QXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0SGVhZC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMpOworICAgIH0KIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRl
cm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFu
aW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCkBAIC02
Miw2ICs3NCwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgYm9vbCBpc09TUlRhcmdldDsK
ICAgICBib29sIGNmYUhhc1Zpc2l0ZWQ7CiAgICAgYm9vbCBjZmFTaG91bGRSZXZpc2l0OworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIGlzTGlua2VkOworI2VuZGlmCisgICAgYm9vbCBp
c1JlYWNoYWJsZTsKICAgICAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAg
ICAgCkBAIC03Miw2ICs4OCwyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwogfTsKIAorc3RydWN0IFVubGlua2VkQmxvY2sg
eworICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIGJvb2wgbV9uZWVkc05vcm1hbExp
bmtpbmc7CisgICAgYm9vbCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nOworICAgIAorICAgIFVu
bGlua2VkQmxvY2soKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBVbmxpbmtlZEJsb2NrKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgOiBtX2Jsb2NrSW5kZXgoYmxvY2tJbmRleCkKKyAg
ICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQorICAgICAgICAsIG1fbmVlZHNFYXJs
eVJldHVybkxpbmtpbmcoZmFsc2UpCisgICAgeworICAgIH0KK307CisgICAgCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2N1cnJlbnRCbG9j
aygwKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCiAgICAgICAgICwgbV9wYXJzZUZhaWxl
ZChmYWxzZSkKICAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKFVJTlRfTUFYKQpAQCAtNzcs
MTUgKzc4LDE5IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAg
ICBib29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBO
b2RlVHlwZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCi0gICAgLy8gSGFu
ZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuCisgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgor
ICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwg
Tm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNl
cnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGlu
dCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KTsKKyAgICAvLyBIYW5kbGUgaW50cmluc2lj
IGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVk
IHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1
bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RB
cmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFz
aWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCk7Ci0gICAgLy8gU2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdy
YXBoJ3MgQmFzaWNCbG9ja3MuCi0gICAgdm9pZCBzZXR1cFByZWRlY2Vzc29ycygpOworICAgIC8v
IEZpbmQgcmVhY2hhYmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBn
cmFwaCdzIEJhc2ljQmxvY2tzLgorICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7Cisg
ICAgLy8gRW5xdWV1ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBuZWNlc3NhcnkuCisg
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBMaW5rIGJsb2NrIHN1
Y2Nlc3NvcnMuCi0gICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJsb2Nr
SW5kZXg+JiB1bmxpbmtlZEJsb2Nrcyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayos
IFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtC
bG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2Nrcyk7CiAgICAgLy8gTGlu
ayBHZXRMb2NhbCAmIFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdl
bmVyYXRlZC4KICAgICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ss
CkBAIC0xMDUsMTAgKzExMCw4IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIC8vIEdldC9T
ZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5v
ZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCisgICAgTm9kZUluZGV4IGdldERpcmVjdChpbnQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/
CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQgLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleDsKQEAgLTEyMywxMCArMTI2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11
c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNpZ25lZClvcGVyYW5k
KTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKKyAg
ICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldERp
cmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOworICAgIH0KKyAg
ICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsKLSAg
ICAgICAgb3BlcmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKTsK
LSAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgc2V0QXJndW1lbnQob3Bl
cmFuZCwgdmFsdWUpOwpAQCAtMTM2LDE4ICsxNDEsMzUgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCwgdmFs
dWUpOwogICAgIH0KKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChv
cGVyYW5kKSwgdmFsdWUpOworICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdl
dC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAg
IE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0g
Jm1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVz
aCkgeworICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJs
b2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhh
cyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisg
ICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAg
IE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoZmx1c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZUluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0g
JmZsdXNoQ2hpbGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ag
PT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2Rl
LmNoaWxkMSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsK
KyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywK
QEAgLTE3OSwyMSArMjAxLDM0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
IAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNl
dEFyZ3VtZW50KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUlu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVzaCkgeworICAgICAgICAg
ICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBs
b2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0
cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisgICAgICAgICAgICAgICAg
Ly8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hp
bGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICBpZiAoZmx1
c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQp
ID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hpbGQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gU2V0QXJndW1lbnQp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBm
aXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0
byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9
PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAg
ICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHIt
PmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAg
ICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGVQ
dHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJ
bmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9
PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOwpAQCAtMjE0LDYgKzI0OSw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gYWRkVG9HcmFwaChT
ZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CisgICAgICAgIGludCBp
bmRleDsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAg
ICAgICBpbmRleCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7CisgICAgICAgICAgICBub2Rl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBGbHVzaCB8fCBub2RlLm9wID09IFNldEFyZ3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgYSBsb2NhbCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQsIG9yIGlmIGl0
J3MgYW4gYXJndW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gZmlyc3QgYmFzaWMgYmxv
Y2ssIHRoZW4gdGhlcmUgaXMgcmVhbGx5IG5vIG5lZWQgdG8gZmx1c2ggaXQuIEluIGZhY3QKKyAg
ICAgICAgICAgICAgICAvLyBlbWl0dGluZyBhIEZsdXNoIGluc3RydWN0aW9uIGNvdWxkIGp1c3Qg
Y29uZnVzZSB0aGluZ3MsIHNpbmNlIHRoZQorICAgICAgICAgICAgICAgIC8vIGdldEFyZ3VtZW50
KCkgY29kZSBhc3N1bWVzIHRoYXQgd2UgbmV2ZXIgc2VlIGEgRmx1c2ggb2YgYSBTZXRBcmd1bWVu
dC4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoRmx1
c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBu
b2RlSW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlSW5kZXgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVu
dEJsb2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRl
eCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZv
cm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCiAgICAgTm9kZUluZGV4IGdl
dFRvSW50MzIoaW50IG9wZXJhbmQpCkBAIC02NjMsOCArNzQzLDYgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTY+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTY+IG1fbG9jYWxQaGlTdGFjazsKICAgICAKLSAgICBWZWN0b3I8Tm9k
ZSosIDE2PiBtX3JldXNhYmxlTm9kZVN0YWNrOwotICAgIAogICAgIHN0cnVjdCBJbmxpbmVTdGFj
a0VudHJ5IHsKICAgICAgICAgQnl0ZUNvZGVQYXJzZXIqIG1fYnl0ZUNvZGVQYXJzZXI7CiAgICAg
ICAgIApAQCAtNjg0LDcgKzc2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEJsb2NrcyBpbnRy
b2R1Y2VkIGJ5IHRoaXMgY29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4K
ICAgICAgICAgLy8gTWF5IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVk
ZXMgdGhlIGNvbnRpbnVhdGlvbiBhZnRlcgogICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhl
IGNhbGxlci4KLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fdW5saW5rZWRCbG9ja3M7Cisg
ICAgICAgIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiBtX3VubGlua2VkQmxvY2tzOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgdGhlIGNhbGxzaXRlJ3MgYmFzaWMgYmxvY2sgd2FzIHNwbGl0IGludG8g
dHdvLCB0aGVuIHRoaXMgd2lsbCBiZQogICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgY2FsbHNp
dGUgYmxvY2suIEl0IG5lZWRzIGl0cyBzdWNjZXNzb3JzIGxpbmtlZCB0byB0aGUKQEAgLTY5Miwx
NiArNzcwLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGFueSBibG9ja3MgaW4gbV91bmxpbmtl
ZEJsb2NrcyB0byBqdW1wIGJhY2sgaW50byB0aGlzIGJsb2NrLgogICAgICAgICBCbG9ja0luZGV4
IG1fY2FsbHNpdGVCbG9ja0hlYWQ7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5
KiBtX2NhbGxlZTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fcmV0dXJuVmFsdWU7CisgICAg
ICAgIAorICAgICAgICAvLyBEaWQgd2Ugc2VlIGFueSByZXR1cm5zPyBXZSBuZWVkIHRvIGhhbmRs
ZSB0aGUgKHVuY29tbW9uIGJ1dCBuZWNlc3NhcnkpCisgICAgICAgIC8vIGNhc2Ugd2hlcmUgYSBw
cm9jZWR1cmUgdGhhdCBkb2VzIG5vdCByZXR1cm4gd2FzIGlubGluZWQuCisgICAgICAgIGJvb2wg
bV9kaWRSZXR1cm47CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2Rl
UGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4
IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpOworICAgICAgICAv
LyBEaWQgd2UgaGF2ZSBhbnkgZWFybHkgcmV0dXJucz8KKyAgICAgICAgYm9vbCBtX2RpZEVhcmx5
UmV0dXJuOworICAgICAgICAKKyAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZXI7Cisg
ICAgICAgIAorICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tI
ZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1
ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgbGFzdEFyZyk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5l
U3RhY2tFbnRyeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1f
aW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXIt
Pm1faW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKQEAgLTc1Niw2ICs4
NDMsMTM1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUlu
ZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
LCBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJn
LCB1bnNpZ25lZCBuZXh0T2Zmc2V0KQoreworICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBs
ZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPworICAgIGlmICghZXhw
ZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChleHBlY3RlZEZ1
bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZXhwZWN0ZWRGdW5jdGlvbi0+anNF
eGVjdXRhYmxlKCk7CisgICAgCisgICAgLy8gRG9lcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB3
ZSdyZSBwYXNzaW5nIG1hdGNoIHRoZSBhcml0eSBvZiB0aGUgdGFyZ2V0PyBXZSBjb3VsZAorICAg
IC8vIGlubGluZSBhcml0eSBjaGVjayBmYWlsdXJlcywgYnV0IGZvciBzaW1wbGljaXR5IHdlIGN1
cnJlbnRseSBkb24ndC4KKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihleGVjdXRhYmxlLT5wYXJh
bWV0ZXJDb3VudCgpKSArIDEgIT0gbGFzdEFyZyAtIGZpcnN0QXJnICsgMSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIEhhdmUgd2UgZXhjZWVkZWQgaW5saW5lIHN0YWNrIGRl
cHRoLCBvciBhcmUgd2UgdHJ5aW5nIHRvIGlubGluZSBhIHJlY3Vyc2l2ZSBjYWxsPworICAgIC8v
IElmIGVpdGhlciBvZiB0aGVzZSBhcmUgZGV0ZWN0ZWQsIHRoZW4gZG9uJ3QgaW5saW5lLgorICAg
IHVuc2lnbmVkIGRlcHRoID0gMDsKKyAgICBmb3IgKElubGluZVN0YWNrRW50cnkqIGVudHJ5ID0g
bV9pbmxpbmVTdGFja1RvcDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm1fY2FsbGVyKSB7CisgICAg
ICAgICsrZGVwdGg7CisgICAgICAgIGlmIChkZXB0aCA+IEhldXJpc3RpY3M6Om1heGltdW1Jbmxp
bmluZ0RlcHRoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4K
KyAgICAgICAgCisgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICB9
CisgICAgCisgICAgLy8gRG9lcyB0aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJp
c3RpY3MvcmVxdWlyZW1lbnRzIGZvciBiZWluZworICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/
CisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2Rl
QmxvY2tGb3IoQ29kZUZvckNhbGwpOworICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNh
bGwocHJvZmlsZWRCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBJ
ZiB3ZSBnZXQgaGVyZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5s
aW5lIHRoaXMgY29kZS4gUHJvY2VlZAorICAgIC8vIHdpdGggcGFyc2luZyB0aGUgY29kZSB0byBn
ZXQgYnl0ZWNvZGUsIHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhlIGJ5dGVjb2RlLgorICAg
IC8vIE5vdGUgdGhhdCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBpcyBpbnRlbmRlZCB0byBk
aWUgYWZ0ZXIgaGFuZGxlSW5saW5pbmcoKQorICAgIC8vIHJldHVybnMuCisgICAgSlNPYmplY3Qq
IGV4Y2VwdGlvbjsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBleGVjdXRhYmxl
LT5wcm9kdWNlQ29kZUJsb2NrRm9yKHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBleHBl
Y3RlZEZ1bmN0aW9uLT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIENvZGVGb3JDYWxs
LCBleGNlcHRpb24pOworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgQVNTRVJUKCFleGNlcHRpb24pOworICAgIAorICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUg
dGhlIGJ5dGVjb2RlLCBjaGVjayBpZiB3ZSByZWFsbHkgY2FuIGlubGluZSBpdC4gVGhpcyBtYXkg
ZmFpbAorICAgIC8vIGlmIHRoZSBjb2RlIGJsb2NrIGNvbnRhaW5zIHNvbWUgbmFzdHkgb3Bjb2Rl
cy4KKyAgICBpZiAoIWNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2suZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgd2l0aG91dCBh
IGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBpbmxpbmluZy4gU28gYmVnaW4gdGhlIHBy
b2Nlc3MKKyAgICAvLyBieSBjaGVja2luZyB0aGUgY2FsbGVlIChpZiBuZWNlc3NhcnkpIGFuZCBt
YWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZQorICAgIC8vIGFyZSBmbHVz
aGVkLgorICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgYWRk
VG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJn
ZXROb2RlSW5kZXgpOworICAgIAorICAgIGZsdXNoKGNhbGxUYXJnZXQpOworICAgIGZvciAoaW50
IGFyZyA9IGZpcnN0QXJnICsgMTsgYXJnIDw9IGxhc3RBcmc7ICsrYXJnKQorICAgICAgICBmbHVz
aChhcmcpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhcmVhIHVzZWQgYnkgdGhl
IGNhbGwgZnJhbWUgaXMgcmVzZXJ2ZWQuCisgICAgZm9yIChpbnQgYXJnID0gbGFzdEFyZyArIDEg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtVmFy
czsgYXJnLS0gPiBsYXN0QXJnICsgMTspCisgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQobV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGFyZykpOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KKyAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMg
PSBsYXN0QXJnICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgaWYgKG5ld051bUxvY2FscyA+IG1fbnVt
TG9jYWxzKSB7CisgICAgICAgIG1fbnVtTG9jYWxzID0gbmV3TnVtTG9jYWxzOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2ldLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsK
KyAgICB9CisKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29k
ZUJsb2NrLmdldCgpLCBwcm9maWxlZEJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEs
IChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxUYXJn
ZXQpLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh1c2Vz
UmVzdWx0ID8gcmVzdWx0T3BlcmFuZCA6IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLCAoVmlydHVh
bFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChsYXN0QXJnKSk7CisgICAg
CisgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5z
LgorICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgbV9jdXJyZW50
SW5kZXggPSAwOworICAgIHBhcnNlQ29kZUJsb2NrKCk7CisgICAgbV9jdXJyZW50SW5kZXggPSBv
bGRJbmRleDsKKyAgICAKKyAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBu
ZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KKyAgICBpZiAoaW5s
aW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpIC0gMSkgeworICAgICAgICBBU1NFUlQoIWlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJs
b2Nrcy5pc0VtcHR5KCkpOworICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxp
bmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3MpOworICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2Nh
bGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IGlubGluZVN0YWNr
RW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0Vu
dHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlua2lu
Zyk7CisgICAgICAgIGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3Mu
bGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgIGxpbmtCbG9ja3Mo
aW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
QVNTRVJUKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAg
IAorICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMsIHRo
ZW4gd2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgorICAgIC8vIHRoZSBjYWxsZXIgdG8g
Y29udGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93LgorICAg
IGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNrRW50
cnkubV9kaWRSZXR1cm4pIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzLmxhc3QoKS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IC8vIElmIHRoZSBsYXN0IGJhc2ljIGJsb2NrIGRvZXMgbm90IGhhdmUgYSB0ZXJtaW5hbCwgdGhl
biBhZGQgYSBqdW1wLgorICAgIGlmICghbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKSB7Cisg
ICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5lbmQgPSBtX2dyYXBoLnNpemUoKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gTGluayB0aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMgYmxvY2sgd2Un
cmUgYWJvdXQgdG8gY3JlYXRlLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lU3Rh
Y2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtp
bmcpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Js
b2NrSW5kZXhdLmdldCgpOworICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CisgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAxXTsKKyAgICAgICAgQVNTRVJU
KG5vZGUub3AgPT0gSnVtcCk7CisgICAgICAgIEFTU0VSVChub2RlLnRha2VuQmxvY2tJbmRleCgp
ID09IE5vQmxvY2spOworICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKSk7CisgICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nr
c1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gZmFsc2U7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlmCisgICAgfQorICAg
IAorICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGlu
dWF0aW9uIGF0IHRoZSBjYWxsZXIuCisgICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRv
cHRQdHIobmV3IEJhc2ljQmxvY2sobmV4dE9mZnNldCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscykpOworICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7
CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5k
KFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICBtX2dyYXBoLm1f
YmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIAorICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2UgcmV0dXJuIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgY2FsbGVy
LCBidXQKKyAgICAvLyBpbiB0aGUgbmV3IGJhc2ljIGJsb2NrLgorICAgIHJldHVybiB0cnVlOwor
fQorCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IGZpcnN0QXJnLCBp
bnQgbGFzdEFyZywgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogewogICAgIHN3aXRjaCAoaW50
cmluc2ljKSB7CkBAIC0xNjIxLDEwICsxODM3LDI1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgorICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0
cnVlOworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQp
IDw9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhOb0Jsb2NrKSk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAx
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fZGlkRWFybHlSZXR1cm4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2VuZCk7CiAKQEAgLTE2NDAsNiArMTg3MSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVudW0geyBDb25z
dGFudEZ1bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmlzTGlua2VkKCkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtl
bHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBpdCBoYWQgYmVlbiBsaW5rZWQgdGhlbiBtYXliZSB3ZSB3b3VsZCBoYXZlIGlubGluZWQgaXQu
IElmIHdlIGFsbG93IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjb2RlIHRvIGV4ZWN1dGUgdGhl
biB3ZSBtaWdodCBnZXQgc3R1Y2sgZXhlY3V0aW5nIGEgc2xvdyBjYWxsIHdpdGhvdXQgYW55Cisg
ICAgICAgICAgICAgICAgLy8gaG9wZSBvZiByZW9wdGltaXppbmcuCisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNh
bGxUYXJnZXQpKQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRGdW5jdGlvbjsK
ICAgICAgICAgICAgIGVsc2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5pc0xpbmtlZCgpICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudElu
ZGV4KSkKQEAgLTE2NTUsMjUgKzE4OTQsMzggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSByZXN1bHQ/CiAg
ICAgICAgICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
aW50IHJlc3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVyIGhhcHB5CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKTsKICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24g
PSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogICAgICAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAg
ICAgdXNlc1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfY2FsbCkpOworICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbihtX2dyYXBoLnNpemUoKSwgbmV4dE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIG5l
eHRPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uOwog
ICAgICAgICAgICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYzsKLSAgICAgICAgICAgICAg
ICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywg
Y2FsbFRhcmdldCktPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
OworICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFudEZ1bmN0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2dyYXBoLnZhbHVlT2ZGdW5j
dGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaW50cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMo
KTsKKyAgICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNhbGxUeXBlID09IExpbmtlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENh
bGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkuY2FsbGVlLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICBpbnRyaW5zaWMgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9u
KSwgY2FsbFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJl
bnRJbmRleCkuY2FsbGVlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBl
eHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAgICAg
ICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRy
aW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFz
dEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50cmluc2ljICE9IE5v
SW50cmluc2ljKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0
ZWRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5j
dGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jl
c3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZywgcHJlZGlj
dGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRv
IGJlIGluc2lkZSBicmFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5j
dGlvbiwgZXhwZWN0ZWRGdW5jdGlvbiwgZmlyc3RBcmcsIGxhc3RBcmcsIG5leHRPZmZzZXQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJlIGluc2lkZSBi
cmFjZXMuCiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE3MzIsNyArMTk4NCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJsZS4KICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXggPT0gYmxvY2tC
ZWdpbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRh
cmdldCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZXZlciBkbyBPU1IgaW50byBhbiBpbmxp
bmVkIGNvZGUgYmxvY2suIFRoYXQgY291bGQgbm90IGhhcHBlbiwgc2luY2UgT1NSCisgICAgICAg
ICAgICAvLyBsb29rcyB1cCB0aGUgY29kZSBibG9jayB0aGF0IGlzIHRoZSByZXBsYWNlbWVudCBm
b3IgdGhlIGJhc2VsaW5lIEpJVCBjb2RlCisgICAgICAgICAgICAvLyBibG9jay4gSGVuY2UsIG1h
Y2hpbmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBpbmxpbmUgY29kZSBibG9j
ay4KKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIpCisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAgICAgfQpAQCAt
MTc4NCw3ICsyMDQwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBt
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2Fs
IHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjaykpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0g
UGhpIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBGbHVzaCB8fCAobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBB
cmd1bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCkBAIC0xODI1LDkgKzIwODEsMTAg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICB9CiB9CiAKLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPEJs
b2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxv
Y2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJn
ZXRzKQogewogICAgIEFTU0VSVChibG9jay0+ZW5kICE9IE5vTm9kZSk7CisgICAgQVNTRVJUKCFi
bG9jay0+aXNMaW5rZWQpOwogICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAx
XTsKICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwogICAgIApAQCAtMTg0NCwyNyArMjEw
MSw1MyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlmCit9CisKK3ZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcykK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykg
eworICAgICAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3Nb
aV0ubV9ibG9ja0luZGV4XS5nZXQoKSwgdW5saW5rZWRCbG9ja3MpOworICAgICAgICAgICAgdW5s
aW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJ
bmRleD4mIHVubGlua2VkQmxvY2tzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlua0Jsb2NrKG1fZ3Jh
cGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV1dLmdldCgpLCB1bmxpbmtlZEJsb2Nrcyk7Cisg
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1tzdWNjZXNzb3JJbmRl
eF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAgIHN1
Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3Vj
Y2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3Jz
LmFwcGVuZChibG9ja0luZGV4KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVk
ZWNlc3NvcnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkK
IHsKLSAgICBmb3IgKEJsb2NrSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2luZGV4KSB7CisgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlz
dDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoMCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNS
ZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+ZW5kICE9
IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NF
UlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5pc0p1
bXAoKSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgo
KV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwot
ICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+
bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODgyLDI1ICsyMTY1LDMwIEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICBtX2hhdmVCdWlsdE9wZXJhbmRN
YXBzID0gdHJ1ZTsKIH0KIAotQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxv
Y2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpCitCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQYXJz
ZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2Nr
SW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwgVmlydHVh
bFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBsYXN0QXJnKQogICAgIDog
bV9ieXRlQ29kZVBhcnNlcihieXRlQ29kZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVC
bG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICwgbV9jYWxs
c2l0ZUJsb2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVhZCkKLSAgICAsIG1fY2FsbGVlKGJ5dGVDb2Rl
UGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQorICAgICwgbV9yZXR1cm5WYWx1ZShyZXR1cm5WYWx1
ZVZSKQorICAgICwgbV9kaWRSZXR1cm4oZmFsc2UpCisgICAgLCBtX2RpZEVhcmx5UmV0dXJuKGZh
bHNlKQorICAgICwgbV9jYWxsZXIoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3ApCiB7
Ci0gICAgaWYgKG1fY2FsbGVlKSB7CisgICAgaWYgKG1fY2FsbGVyKSB7CiAgICAgICAgIC8vIElu
bGluZSBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrICE9IGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVChjYWxsZWVWUiAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKGxhc3RBcmcgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cik7CiAgICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCAhPSBOb0Jsb2NrKTsKICAgICAg
ICAgCiAgICAgICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS5leGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsK
LSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gbV9jYWxsZWUtPm1fY29kZUJs
b2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNr
T2Zmc2V0ID0gbGFzdEFyZyArIDEgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7
CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZWVWUiA9IGNhbGxlZVZSOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuY2FsbGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2lu
KCk7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzID0g
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0Nh
bGwgPSB0cnVlOwogICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNh
bGxGcmFtZXMoKS5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUgPSAmYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCku
bGFzdCgpOwogICAgICAgICAKQEAgLTE5MjcsNiArMjIxNSw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNh
c2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJs
b2NrKTsKICAgICAgICAgQVNTRVJUKGNhbGxlZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OworICAgICAgICBBU1NFUlQocmV0dXJuVmFsdWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KTsKKyAgICAgICAgQVNTRVJUKGxhc3RBcmcgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAg
ICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCA9PSBOb0Jsb2NrKTsKIAogICAgICAgICBt
X2lubGluZUNhbGxGcmFtZSA9IDA7CkBAIC0xOTU0LDEwICsyMjQ0LDEyIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJl
YWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBk
byB7Ci0gICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcg
QmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscykpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQo
KTsKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5k
KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Mu
YXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIo
bmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3Vt
ZW50cywgbV9udW1Mb2NhbHMpKTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJs
b2NrLmdldCgpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRC
bG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIXBhcnNlQmxvY2sobGltaXQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5NjUsNiArMjI1Nyw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJl
bnRJbmRleCA8PSBsaW1pdCk7CiAKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5lbmQgPSBt
X2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gMDsKICAgICAgICAg
fSB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7CiAgICAgfQogCkBAIC0xOTc5LDEyICsy
MjcyLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5n
IGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKICAgICAKLSAgICBJ
bmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJv
ZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSW5saW5l
U3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVk
QmxvY2ssIE5vQmxvY2ssIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2Nr
KCk7CiAKICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7
Ci0gICAgc2V0dXBQcmVkZWNlc3NvcnMoKTsKKyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsK
ICAgICBwcm9jZXNzUGhpU3RhY2s8TG9jYWxQaGlTdGFjaz4oKTsKICAgICBwcm9jZXNzUGhpU3Rh
Y2s8QXJndW1lbnRQaGlTdGFjaz4oKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVO
QUJMRShERkdfSklUKQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJs
b2NrKQordGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQpPgorYm9vbCBj
YW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CkBAIC00Myw3ICs0NCw3IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29k
ZUJsb2NrKiBjb2RlQmwKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQo
aW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBE
RUZJTkVfT1Aob3Bjb2RlLCBsZW5ndGgpICAgICAgICAgICBcCiAgICAgICAgIGNhc2Ugb3Bjb2Rl
OiAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZU9w
Y29kZShvcGNvZGUpKSAgXAorICAgICAgICAgICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUob3Bjb2Rl
KSkgIFwKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgXAogICAg
ICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCiAgICAgICAgICAgICBi
cmVhazsKQEAgLTU4LDYgKzU5LDE2IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2Nr
KiBjb2RlQmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5D
b21waWxlT3Bjb2RlPihjb2RlQmxvY2spOworfQorCitib29sIGNhbklubGluZU9wY29kZXMoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuSW5s
aW5lT3Bjb2RlPihjb2RlQmxvY2spOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5oCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2Fw
YWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIwICsyNiw0MiBAQAogI2lmbmRlZiBE
RkdDYXBhYmlsaXRpZXNfaAogI2RlZmluZSBERkdDYXBhYmlsaXRpZXNfaAogCisjaW5jbHVkZSAi
REZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkhldXJpc3Rp
Y3MuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgogCi0jaW5jbHVkZSAiREZHTm9kZS5oIgotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0
aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rl
cy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1
ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVy
biB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJs
b2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgbWln
aHRDb21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUV2YWxPcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bVByb2dyYW1PcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBj
b2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rp
b25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGlu
ZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVy
aXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworfQorCitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1
bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQog
CiAvLyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29k
ZUlEIG9wY29kZUlEKQpAQCAtMTQ2LDE0ICsxNjgsNDUgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGls
ZU9wY29kZShPcGNvZGVJRCBvcAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bj
b2RlKE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAg
ICAgCisgICAgLy8gVGhlc2Ugb3Bjb2RlcyB3b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQgd2l0aCBp
bmxpbmluZywgYnV0IHdlIGN1cnJlbnRseSBkb24ndCBkbyBpdC4KKyAgICAvLyBUaGUgaXNzdWUg
aXMgdGhhdCB0aGUgc2NvcGUgY2hhaW4gd2lsbCBub3QgYmUgc2V0IGNvcnJlY3RseS4KKyAgICBj
YXNlIG9wX2dldF9zY29wZWRfdmFyOgorICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CisgICAg
Y2FzZSBvcF9yZXNvbHZlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgorICAgIGNhc2Ugb3Bf
cmVzb2x2ZV9nbG9iYWw6CisgICAgICAgIAorICAgIC8vIFRyaXZpYWwgdG8gc3VwcG9ydCB3aXRo
IHRoZSBjb3B5IHByb3BhZ2F0aW9uIG1hY2hpbmUgd2UgYWxyZWFkeSBoYXZlLCBidXQgdGhlIGds
dWUKKyAgICAvLyBpc24ndCB0aGVyZSwgeWV0LgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAg
ICAgICAgCisgICAgLy8gSW5saW5pbmcgZG9lc24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBl
eHByZXNzaW9uIG9wZXJhbmRzLgorICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gY2FuQ29t
cGlsZU9wY29kZShvcGNvZGVJRCk7CisgICAgfQorfQorCiBib29sIGNhbkNvbXBpbGVPcGNvZGVz
KENvZGVCbG9jayopOworYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2Ug
Ly8gRU5BQkxFKERGR19KSVQpCiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9j
ayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENv
ZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5j
dGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1p
Z2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNl
OyB9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KKwogaW5saW5lIGJv
b2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBi
b29sIGNhbklubGluZU9wY29kZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBi
b29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9Citpbmxp
bmUgYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIGlubGluZSBib29sIGNhbkNvbXBpbGVFdmFsKENv
ZGVCbG9jayogY29kZUJsb2NrKQpAQCAtMTc2LDYgKzIyOSwxNiBAQCBpbmxpbmUgYm9vbCBjYW5D
b21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1CiAgICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KGNvZGVCbG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsK
IH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIHJldHVybiBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxv
Y2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKK30KKworaW5saW5lIGJvb2wgY2Fu
SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
cmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5J
bmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmIC8vIERGR0NhcGFiaWxpdGllc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNDUgQEAgY29u
c3QgY2hhciogR3JhcGg6Om5hbWVPZlZhcmlhYmxlQWNjZXNzRAogICAgIHJldHVybiBidWY7CiB9
CiAKK3N0YXRpYyB2b2lkIHByaW50V2hpdGVTcGFjZSh1bnNpZ25lZCBhbW91bnQpIHsKKyAgICB3
aGlsZSAoYW1vdW50LS0gPiAwKQorICAgICAgICBwcmludGYoIiAiKTsKK30KKwordm9pZCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoIW5vZGVJ
bmRleCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5vZGUgJmN1cnJlbnROb2RlID0gYXQo
bm9kZUluZGV4KTsKKyAgICBOb2RlICZwcmV2aW91c05vZGUgPSBhdChub2RlSW5kZXggLSAxKTsK
KyAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJl
bnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05v
ZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJy
ZW50SW5saW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7Cisg
ICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6
ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleE9mRGl2
ZXJnZW5jZSA9IGNvbW1vblNpemU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1v
blNpemU7ICsraSkgeworICAgICAgICBpZiAocHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVD
YWxsRnJhbWUgIT0gY3VycmVudElubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgeworICAg
ICAgICAgICAgaW5kZXhPZkRpdmVyZ2VuY2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHJpbnQgdGhlIHBvcHMuCisgICAgZm9yICh1bnNp
Z25lZCBpID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7IGktLSA+IGluZGV4T2ZEaXZlcmdl
bmNlOykgeworICAgICAgICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYo
IjwtLSAlcFxuIiwgcHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUpOworICAgIH0KKyAgICAKKyAgICAvLyBQcmludCB0aGUgcHVzaGVzLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNlOyBpIDwgY3VycmVudElubGluZVN0YWNrLnNp
emUoKTsgKytpKSB7CisgICAgICAgIHByaW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHBy
aW50ZigiLS0+ICVwXG4iLCBjdXJyZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7CkBAIC05MSw2ICsxMzAsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgICAgIEFTU0VSVChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVmQ291bnQ7
CiAgICAgfQorICAgIAorICAgIGR1bXBDb2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAgcHJpbnRX
aGl0ZVNwYWNlKChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CiAKICAg
ICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8K
QEAgLTI0MCw3ICsyODIsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsK
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKLSAgICAgICAg
cHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29k
ZUJlZ2luLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CisgICAg
ICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5
dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9j
ay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIHByaW50Zigi
ICB2YXJzOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzEx
MSwxMyBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFs
bG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIg
bmFtZXMpLgogICAgIHZvaWQgZHVtcChDb2RlQmxvY2sqID0gMCk7CiAgICAgdm9pZCBkdW1wKE5v
ZGVJbmRleCwgQ29kZUJsb2NrKiA9IDApOworCisgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4g
b2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQor
ICAgIC8vIHByZWNlZGluZyBub2RlLgorICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4
KTsKICNlbmRpZgogCi0gICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOworICAg
IEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJs
b2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAogICAgIGJvb2wgcHJlZGlj
dEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikK
ICAgICB7CkBAIC0yNDgsMTggKzI1MiwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAK
LSAgICB1bnNpZ25lZCBvcGVyYXRvcigpKEJsb2NrSW5kZXgqIGJsb2NrSW5kZXgpIGNvbnN0Cisg
ICAgdW5zaWduZWQgb3BlcmF0b3IoKShVbmxpbmtlZEJsb2NrKiB1bmxpbmtlZEJsb2NrKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhdLT5i
eXRlY29kZUJlZ2luOworICAgICAgICByZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJs
b2NrLT5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOwogICAgIH0KIAogcHJpdmF0ZToKICAg
ICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKLWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVk
IGJ5dGVjb2RlQmVnaW4pCitpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRl
Y29kZUJlZ2luKQogewotICAgIHJldHVybiAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxC
bG9ja0luZGV4LCB1bnNpZ25lZD4oYmxvY2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCksIGJ5dGVj
b2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5G
b3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiBXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9y
PFVubGlua2VkQmxvY2ssIHVuc2lnbmVkPihibG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNpemUoKSwg
Ynl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlNdXN0QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0ZWNvZGVC
ZWdpbkZvckJsb2NrKCp0aGlzKSktPm1fYmxvY2tJbmRleDsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEzICszOSwyMCBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRT
cGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVy
eSogcmVjb3ZlcnksIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29k
ZU1hcCkKK3ZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NS
RXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkg
UHJvLWZvcm1hIHN0dWZmLgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9y
IE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAiLCAoaW50KWV4aXQubV9ub2Rl
SW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBmcHJpbnRm
KHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwgKGludClleGl0Lm1fbm9kZUluZGV4
KTsKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7
IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwor
ICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICIpIGF0
IEpJVCBvZmZzZXQgMHgleCAgIiwgZGVidWdPZmZzZXQoKSk7CiAgICAgZXhpdC5kdW1wKHN0ZGVy
cik7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkK
QEAgLTQ4MiwxNyArNDg5LDUwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdp
dGhPU1IKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
KTsKICAgICAKLSAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxs
IGZyYW1lKHMpLgogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CiAgICAgCisgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
KTsKKyAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2Rl
TWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAgICB1bnNp
Z25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNv
ZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+
KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAg
IEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRK
SVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKworICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVZSKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9zY29wZUNoYWluKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIGNhbGxlckZy
YW1lR1BSOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKSB7CisgICAgICAgICAgICBhZGRQdHIoSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIu
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86
OnJlZ1QzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CisgICAgICAgIAorICAgICAgICBzdG9yZVB0cihUcnVz
dGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sp
KSk7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4pKSk7CisgICAgICAgIHN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxlckZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGp1
bXBUYXJnZXQpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBzdG9yZVB0
cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUt
Pm51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDEsIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6Q2FsbGVlKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsK
KyAgICAKICAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJ
VCBjb2RlLgogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJp
bmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCks
IGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIFZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29kZWRDb2Rl
TWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKSk7CisgICAgCisg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAu
c2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBBU1NF
UlQobWFwcGluZyk7Ci0gICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0
Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9
PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICB2b2lkKiBqdW1w
VGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBt
YXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKICAgICAKQEAgLTUwNiwyMCArNTQ2LDI4IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNlbmRpZgogfQogCi12
b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZl
KQorVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVk
Q29kZU1hcEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBWZWN0b3I8Qnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVkQ29kZU1hcDsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+
Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoY29kZUJs
b2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKSk7Ci0gICAgY29kZUJsb2NrKCktPmFs
dGVybmF0aXZlKCktPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRDb2RlTWFwKTsKKyAgICBB
U1NFUlQoY29kZUJsb2NrID09IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgIEFT
U0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Cisg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICAKKyAgICBzdGQ6OnBhaXI8
SGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+Ojpp
dGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CisgICAgCisgICAgaWYgKHJlc3Vs
dC5zZWNvbmQpCisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0
LmZpcnN0LT5zZWNvbmQpOwogICAgIAorICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsK
K30KKwordm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVj
dWxhdGl2ZSkKK3sKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVj
dWxhdGl2ZS5vc3JFeGl0cygpLmJlZ2luKCk7CiAgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3Ig
ZXhpdHNFbmQgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmVuZCgpOwogICAgIAogICAgIHdoaWxl
IChleGl0c0l0ZXIgIT0gZXhpdHNFbmQpIHsKICAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhpdCA9
ICpleGl0c0l0ZXI7Ci0gICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3Vs
YXRpdmUuc3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCksIGRlY29kZWRD
b2RlTWFwKTsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2
ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CiAgICAgICAgICsr
ZXhpdHNJdGVyOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsOCArNDI3LDIxIEBA
IHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQgbGluayhMaW5rQnVm
ZmVyJik7CiAKLSAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYs
IFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYg
ZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBP
U1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgbGlua09TUkV4aXRzKFNw
ZWN1bGF0aXZlSklUJik7CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhl
Y3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlOworICAgICAg
ICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmRnVu
Y3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9y
Q29uc3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCkgPT0gY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgcmV0
dXJuIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKiBj
b2RlQmxvY2spOwogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0
YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
QEAgLTQzOCw3ICs0NTEsOSBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBjdXJy
ZW50bHkgYmVpbmcgZ2VuZXJhdGVkLCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBzdWNoIGFz
IGNvbnN0YW50IHZhbHVlcywgaW1tZWRpYXRlcy4KICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OwotCisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiA+IG1fZGVjb2RlZENvZGVNYXBzOworICAgIAogICAgIC8vIFZlY3RvciBvZiBj
YWxscyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBoYW5kbGVyIGluZm9y
bWF0aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBl
eGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYg
KzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MKICAgICBt
YWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhQaGksIDApIFwKKyAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIFwKICAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBzZXQuICovXAog
ICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCkBAIC00ODQsNiArNDg1LDcgQEAgc3RydWN0IE5v
ZGUgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
ODM1LDcgKzgzNyw3IEBAIHN0cnVjdCBOb2RlIHsKIAogICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0gUGhpOworICAgICAg
ICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGkgJiYgb3AgIT0gRmx1c2g7CiAgICAgfQog
CiAgICAgdW5zaWduZWQgcmVmQ291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmFuZHMuaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE4ICs2NCwzMSBAQCBwdWJs
aWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQog
ICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lk
eF07IH0KICAgICAKKyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgbV9s
b2NhbHMucmVzaXplKHNpemUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8
IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6
OmRlZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBp
ZHgsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5z
aXplKCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOwot
ICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOwotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgZW5zdXJlTG9jYWxzKGlkeCArIDEpOwogICAgICAgICAKICAgICAgICAgbV9sb2NhbHNb
aWR4XSA9IHZhbHVlOwogICAgIH0KICAgICAKKyAgICBUIGdldExvY2FsKHNpemVfdCBpZHgpCisg
ICAgeworICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaWR4
XTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4
LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhd
ID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Nyw2
ICs1NzcsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBGbHVzaDoK
ICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgog
ICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAvLyB0byB0aGUgKm5leHQqIGluc3RydWN0aW9uLCBzaW5jZSB3
ZSd2ZSBhbHJlYWR5ICJleGVjdXRlZCIgdGhlCiAgICAgICAgIC8vIFNldExvY2FsIGFuZCB3aGF0
ZXZlciBvdGhlciBERkcgTm9kZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZQogICAgICAg
ICAvLyBieXRlY29kZSBpbmRleCBhcyB0aGUgU2V0TG9jYWwuCi0gICAgICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXhGb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICBBU1NFUlQobV9jb2RlT3JpZ2luRm9yT1NSID09IG5vZGUuY29kZU9yaWdpbik7CiAgICAg
ICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXggKyAxKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgYnl0ZWNvZGUgaW5kZXggZm9y
IHRoZSBuZXh0IG5vZGUgdG8gYmUKQEAgLTg1OSw3ICs4NTksNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHN0YXRlbWVudCkgd291bGQgYmUg
ZGVhZCBhbnl3YXkgLSBzbyB0aGUgZmFjdCB0aGF0IERGRyB3b3VsZCBoYXZlCiAgICAgICAgIC8v
IGFscmVhZHkgbWFkZSB0aGUgYXNzaWdubWVudCwgYW5kIGJha2VkIGl0IGludG8gdGhlIHJlZ2lz
dGVyIGZpbGUgZHVyaW5nCiAgICAgICAgIC8vIE9TUiBleGl0LCB3b3VsZCBub3QgYmUgdmlzaWJs
ZSB0byB0aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JP
U1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisgICAgICAgIG1fY29kZU9y
aWdpbkZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAgIAogICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewpAQCAtMjM0MSw2ICsyMzQxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMyArMTA4LDEzIEBAIHZvaWQgVmFsdWVSZWNv
dmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnMKIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBp
bGVJbmRleCkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9T
UikKKyAgICAsIG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKICAgICAsIG1f
cmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2Fy
Z3VtZW50cy5zaXplKCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUo
KSkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewotICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpKTsKKyAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOwogICAgIGZvciAodW5z
aWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1
bWVudCkKICAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25l
ZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxl
KQpAQCAtMjU5LDYgKzI1OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBp
bGVJbmRleCA9PSBibG9jay5iZWdpbik7CisgICAgCisgICAgaWYgKCFibG9jay5pc1JlYWNoYWJs
ZSkgeworICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAogICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKICAgICAgICAgbV9qaXQubm90
aWNlT1NSRW50cnkoYmxvY2spOwpAQCAtMjkwLDExICsyOTUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVy
YW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5dGVjb2RlSW5k
ZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgbV9j
b2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUlu
ZGV4IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUg
PSBhdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1Ig
PSBub2RlLmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7
CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZz
ZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwpAQCAtMzY1LDcgKzM3MCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0g
ICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBD
b2RlT3JpZ2luKDApOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5z
aXplKCk7ICsraSkKICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
UmVnaXN0ZXJGaWxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcg
QEAgc3RydWN0IE9TUkV4aXQgewogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hl
Y2s7CiAgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICAKICAgICB1bnNpZ25lZCBt
X3JlY292ZXJ5SW5kZXg7CiAgICAgCkBAIC01NjQsNyArNTY0LDcgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVNvdXJj
ZSwgMD4gbV92YXJpYWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Ci0gICAgdWludDMy
X3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9y
T1NSOwogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKQEAgLTc5OSw3ICs3
OTksNiBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBt
X2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKICAgICAsIG1fdmFy
aWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9ieXRlY29kZUluZGV4Rm9y
T1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAsIG1fc3RhdGUo
bV9qaXQuY29kZUJsb2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gOTc3
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBDYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1
ZUNhbGxlckZyYW1lU2xvCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbWFjaGluZUNhbGxl
ci0+Y29kZUJsb2NrKCktPmNvZGVPcmlnaW5Gb3JSZXR1cm4ocmV0dXJuUEMoKSk7CiAgICAgCiAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFt
ZSogbmV4dElubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0
SW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
OwogICAgICAgICAKICAgICAgICAgQ2FsbEZyYW1lKiBpbmxpbmVkQ2FsbGVyID0gbWFjaGluZUNh
bGxlciArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk3
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4NCw2ICszODQsMjQgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6
Y2xlYXJDb2RlVmlydHVhbAogICAgIEJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoKTsKIH0KIAorQ29k
ZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxs
LmdldCgpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7Cisg
ICAgfQorICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAocmVz
dWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZl
KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxs
ZWVBcmdzRXhlYykKIHsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9i
YWxPYmplY3QpOwpAQCAtNDA2LDExICs0MjQsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZU9wdAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4
ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlv
bktpbmQgY29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxh
dGlvbktpbmQgY29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsK
ICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0
YTsKLSAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNl
ci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAw
LCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFy
c2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rp
b25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5
Tm9kZT4oZ2xvYmFsT2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBp
c1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9u
KTsKICAgICBpZiAoIWJvZHkpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNDIwLDggKzQzOCw2IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVy
cywgbV9uYW1lKTsKICAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXND
YXB0dXJlZFZhcmlhYmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAK
LSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2Jh
bE9iamVjdC5nZXQoKTsKLQogICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0Owog
ICAgIEFTU0VSVCgoY29tcGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFjb2Rl
QmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSk7CiAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3
IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3Vy
Y2UoKS5wcm92aWRlcigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlvbktp
bmQgPT0gQ29kZUZvckNvbnN0cnVjdCkpOwpAQCAtNDQyLDcgKzQ1OCw3IEBAIEpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlw
ZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwog
ICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBu
ZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAh
IW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGls
YXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRp
b24pOwogICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwog
CkBAIC01MDIsNyArNTE4LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvcgogICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklU
KCkpID09ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlv
bjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VD
b2RlQmxvY2tGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29u
c3RydWN0LCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29k
ZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0Nv
bXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9u
KTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNp
b24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxv
Y2tGb3IoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVj
dCosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVG
b3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBF
eGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCkKICAgICAgICAgewpAQCAtNTc0LDkgKzU3NCwx
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29k
ZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpOworICAgICAgICAKKyAg
ICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
a0ZvcihraW5kKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgY29uc3QgSWRlbnRpZmll
ciYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBKU1N0cmluZyogbmFtZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KLSAgICAgICAgc2l6ZV90IHBh
cmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0gLy8g
SW5jbHVkaW5nICd0aGlzJyEKKyAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0gLy8gRXhjbHVkaW5nICd0aGlzJyEKICAg
ICAgICAgdW5zaWduZWQgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9u
dW1DYXB0dXJlZFZhcmlhYmxlczsgfQogICAgICAgICBVU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29u
c3Q7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3ltYm9sVGFibGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwx
NSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCit1bnNpZ25l
ZCBtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNp
Z25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Cit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1GdW5j
dGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCit1bnNpZ25lZCBt
YXhpbXVtSW5saW5pbmdEZXB0aDsKKwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9u
dE9wdGltaXplQW55dGltZVNvb247CkBAIC05OSw2ICsxMDgsMTggQEAgdm9pZCBzZXRIZXVyaXN0
aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYQogCiB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNzKCkK
IHsKKyAgICAvLyBGSVhNRTogTXVzdCByZXZpc2l0IHRoZXNlIGhldXJpc3RpY3MhIFRoZSBERkcs
IGJlaW5nIGFuIG9wdGltaXppbmcgY29tcGlsZXIsIG1heQorICAgIC8vIHRha2UgYSBsb25nIHRp
bWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1Z2UgY29kZSBibG9ja3MuIFRoZSBiZXN0IHdheSB0byBj
b3BlIHdpdGgKKyAgICAvLyB0aGlzIGlzIHRvIHJlZnVzZSB0byBvcHRpbWl6ZSB0aGVtLgorICAg
IFNFVChtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAg
ICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAg
IFNFVChtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQs
ICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAg
IFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAg
IFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAg
IAorICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCwgMjApOworICAgIAorICAgIFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgMik7CisK
ICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAg
IC0xMDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxv
bmdXYXJtVXAsIC01MDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHJldmlz
aW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEhldXJpc3RpY3MgewogCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUV2YWxPcHRpbWl6
YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1Q
cm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNp
Z25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRp
bWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4
aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK2V4
dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0
YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KKwogZXh0ZXJuIGlu
dDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKIGV4dGVy
biBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
OwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55
dGltZVNvb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5oCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBWUHRySGFja0V4ZWN1dGFibGU7CiAgICAgbmFtZXNwYWNlIERGRyB7CiAg
ICAgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKKyAgICBjbGFzcyBKSVRDb21waWxlcjsKICAgICB9
CiAKICAgICBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwpAQCAtNDksNiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBKU0Z1bmN0aW9uIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAg
ICBmcmllbmQgY2xhc3MgSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOworICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb21waWxlcjsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKIAogICAgIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111552</attachid>
            <date>2011-10-18 19:20:38 -0700</date>
            <delta_ts>2011-10-19 21:51:12 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>inlining_patch_4.diff</filename>
            <type>text/plain</type>
            <size>85575</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDExLTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscyBvciBldmVuIGNyYXppZXIgdGhpbmdz
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YmFzZWxpbmVWZXJzaW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRJbnN0
cnVjdGlvbkNvdW50KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAg
IChKU0M6OkNvZGVPcmlnaW46OmlubGluZURlcHRoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrKToK
KyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJh
c2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmV4ZWN1dGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAg
ICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9j
azo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZW5zdXJlTG9j
YWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpVbmxpbmtlZEJsb2NrOjpVbmxpbmtlZEJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldERpcmVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0
YWNrRW50cnk6On5JbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6cmVtYXBPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6bGlua0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVN1Y2Nl
c3Nvcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmRldGVybWluZVJlYWNo
YWJpbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5IYW5kbGVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Db21waWxl
T3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2Rlcyk6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGls
ZUV2YWwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZVByb2dyYW0pOgorICAgICAg
ICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdo
dElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5Jbmxp
bmVPcGNvZGUpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAg
ICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2FuSW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIGRmZy9ERkdHcmFw
aC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6ZHVtcENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpH
ZXRCeXRlY29kZUJlZ2luRm9yQmxvY2s6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmV4aXRTcGVj
dWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpkZWNvZGVk
Q29kZU1hcEZvcik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0
cyk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29tcGlsZXI6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkR2VuZXJhdGUpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjplbnN1cmVMb2NhbHMp
OgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmdldExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRvci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rp
b25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWVTbG93KToKKyAgICAgICAg
KiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFi
bGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2ZpbGVk
Q29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJhbWV0
ZXJDb3VudCk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SGV1cmlzdGljczo6aW5pdGlhbGl6ZUhldXJpc3RpY3MpOgorICAgICAgICAqIHJ1bnRpbWUv
SGV1cmlzdGljcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorCiAyMDExLTEw
LTE4ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBcnJheS5wcm90b3R5cGUgbWV0aG9kcyBtaXNzaW5nIGV4Y2VwdGlvbiBjaGVja3MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk3
NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBQ
YXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRl
cm5hdGl2ZS5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRBbHRlcm5hdGl2ZShQYXNzT3du
UHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9IGFsdGVybmF0aXZl
OyB9CiAgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVyc2lvbigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFjZW1lbnQoKTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiAwOyAvLyBUaGlz
IGNhbiBoYXBwZW4gaWYgd2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgdGhlIGJhc2Vs
aW5lIHZlcnNpb24uCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwpAQCAtMzc1
LDEwICszODcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9u
PiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KICAgICAgICAgdm9p
ZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7IH0KIAotI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgpIHsgcmV0dXJuIG1f
aW5zdHJ1Y3Rpb25Db3VudDsgfQogICAgICAgICB2b2lkIHNldEluc3RydWN0aW9uQ291bnQodW5z
aWduZWQgaW5zdHJ1Y3Rpb25Db3VudCkgeyBtX2luc3RydWN0aW9uQ291bnQgPSBpbnN0cnVjdGlv
bkNvdW50OyB9Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIHZvaWQgc2V0SklU
Q29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVdpdGhB
cml0eUNoZWNrKQpAQCAtOTQ0LDkgKzk1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+
IG1faW5zdHJ1Y3Rpb25zOwotI2lmbmRlZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgbV9pbnN0
cnVjdGlvbkNvdW50OwotI2VuZGlmCiAKICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAg
ICAgICBpbnQgbV9hcmd1bWVudHNSZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjZGVmaW5lIENvZGVPcmlnaW5faAogCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTU2LDYgKzU3LDE3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCisgICAgLy8gVGhlIGlubGluZSBkZXB0aCBp
cyB0aGUgZGVwdGggb2YgdGhlIGlubGluZSBzdGFjaywgc28gMSA9IG5vdCBpbmxpbmVkLAorICAg
IC8vIDIgPSBpbmxpbmVkIG9uZSBkZWVwLCBldGMuCisgICAgdW5zaWduZWQgaW5saW5lRGVwdGgo
KSBjb25zdDsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3Ro
ZXIpIGNvbnN0OworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAvLyBHZXQgdGhlIGlubGluZSBz
dGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5Lgor
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OworI2VuZGlmCiB9Owog
CiBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKQEAgLTYzLDcgKzc1LDggQEAgc3RydWN0IElubGlu
ZUNhbGxGcmFtZSB7CiAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7CiAgICAgdW5zaWduZWQgY2Fs
bGVlVlI7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgdW5zaWduZWQgbnVtQXJndW1lbnRz
SW5jbHVkaW5nVGhpczsKKyAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzIDog
MzE7CisgICAgYm9vbCBpc0NhbGwgOiAxOwogfTsKIAogc3RydWN0IENvZGVPcmlnaW5BdENhbGxS
ZXR1cm5PZmZzZXQgewpAQCAtNzEsNiArODQsMzMgQEAgc3RydWN0IENvZGVPcmlnaW5BdENhbGxS
ZXR1cm5PZmZzZXQgewogICAgIHVuc2lnbmVkIGNhbGxSZXR1cm5PZmZzZXQ7CiB9OwogCitpbmxp
bmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGgoKSBjb25zdAoreworICAgIHVuc2ln
bmVkIHJlc3VsdCA9IDE7CisgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxp
bmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2Fs
bEZyYW1lKQorICAgICAgICByZXN1bHQrKzsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAor
aW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5ieXRlY29kZUlu
ZGV4CisgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVDYWxsRnJhbWU7
Cit9CisgICAgCisjaWZuZGVmIE5ERUJVRworLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMg
aXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KK2lubGluZSBWZWN0
b3I8Q29kZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhY2soKSBjb25zdAoreworICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiByZXN1bHQoaW5saW5lRGVwdGgoKSk7CisgICAgcmVzdWx0Lmxhc3Qo
KSA9ICp0aGlzOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVzdWx0LnNpemUoKSAtIDI7CisgICAg
Zm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXN1
bHRbaW5kZXgtLV0gPSBjdXJyZW50LT5jYWxsZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNl
bmRpZgorCiBpbmxpbmUgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldEZvckNvZGVPcmlnaW4o
Q29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZGF0YSkKIHsKICAgICByZXR1cm4gZGF0YS0+
Y2FsbFJldHVybk9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NzcyOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOSArMTQ0LDkgQEAgSlNPYmplY3QqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAKICAgICBtX3Njb3BlTm9kZS0+ZW1pdEJ5dGVjb2RlKCp0
aGlzKTsKIAotI2lmbmRlZiBOREVCVUcKICAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1Y3Rpb25D
b3VudChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAorI2lmbmRlZiBOREVC
VUcKICAgICBpZiAoc19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29kZUJsb2NrLT5k
dW1wKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBBYnN0cmFj
dFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIAogICAgIEFTU0VSVCghbV9ibG9jayk7
CiAgICAgCisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxv
Y2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0g
YmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VSVChi
YXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5lbmQgLSBiYXNpY0Jsb2NrLT5iZWdpbjsgKytpKQog
ICAgICAgICBtX25vZGVzW2ldLmNsZWFyKCk7CiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2Nr
LT52YWx1ZXNBdEhlYWQ7CkBAIC02MDgsNiArNjEyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKE5vZGVJbmRleCBubwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAg
ICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNjYyLDYgKzY2Nyw3IEBAIGlubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICBjYXNl
IFBoaToKICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIC8v
IFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgogICAgICAg
ICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTIgKzQ2LDI0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICAgICAgLCBpc09TUlRhcmdl
dChmYWxzZSkKICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAsIGNmYVNo
b3VsZFJldmlzaXQoZmFsc2UpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIGlzTGlu
a2VkKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCiAgICAgICAg
ICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZh
cmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9pZCBlbnN1
cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQorICAgIHsKKyAgICAgICAgdmFyaWFibGVz
QXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YXJpYWJsZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0SGVhZC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFsdWVzQXRUYWlsLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMpOworICAgIH0KIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNlZCBpbnRl
cm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3RseSBtZWFu
aW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcuCkBAIC02
Miw2ICs3NCwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgYm9vbCBpc09TUlRhcmdldDsK
ICAgICBib29sIGNmYUhhc1Zpc2l0ZWQ7CiAgICAgYm9vbCBjZmFTaG91bGRSZXZpc2l0OworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIGlzTGlua2VkOworI2VuZGlmCisgICAgYm9vbCBp
c1JlYWNoYWJsZTsKICAgICAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CiAg
ICAgCkBAIC03Miw2ICs4OCwyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwogfTsKIAorc3RydWN0IFVubGlua2VkQmxvY2sg
eworICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIGJvb2wgbV9uZWVkc05vcm1hbExp
bmtpbmc7CisgICAgYm9vbCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nOworICAgIAorICAgIFVu
bGlua2VkQmxvY2soKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBVbmxpbmtlZEJsb2NrKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgOiBtX2Jsb2NrSW5kZXgoYmxvY2tJbmRleCkKKyAg
ICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQorICAgICAgICAsIG1fbmVlZHNFYXJs
eVJldHVybkxpbmtpbmcoZmFsc2UpCisgICAgeworICAgIH0KK307CisgICAgCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBt
X2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVk
QmxvY2spCiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2N1cnJlbnRCbG9j
aygwKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCiAgICAgICAgICwgbV9wYXJzZUZhaWxl
ZChmYWxzZSkKICAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKFVJTlRfTUFYKQpAQCAtNzcs
MTUgKzc4LDE5IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAg
ICBib29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBO
b2RlVHlwZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCi0gICAgLy8gSGFu
ZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuCisgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgor
ICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwg
Tm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNl
cnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGlu
dCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KTsKKyAgICAvLyBIYW5kbGUgaW50cmluc2lj
IGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVk
IHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1
bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RB
cmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5nbGUgYmFz
aWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VCbG9jayh1
bnNpZ25lZCBsaW1pdCk7Ci0gICAgLy8gU2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdy
YXBoJ3MgQmFzaWNCbG9ja3MuCi0gICAgdm9pZCBzZXR1cFByZWRlY2Vzc29ycygpOworICAgIC8v
IEZpbmQgcmVhY2hhYmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBn
cmFwaCdzIEJhc2ljQmxvY2tzLgorICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7Cisg
ICAgLy8gRW5xdWV1ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBuZWNlc3NhcnkuCisg
ICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3Qs
IEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBMaW5rIGJsb2NrIHN1
Y2Nlc3NvcnMuCi0gICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxCbG9ja0lu
ZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPEJsb2Nr
SW5kZXg+JiB1bmxpbmtlZEJsb2Nrcyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayos
IFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lkIGxpbmtC
bG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2Nrcyk7CiAgICAgLy8gTGlu
ayBHZXRMb2NhbCAmIFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMgYXJlIGdl
bmVyYXRlZC4KICAgICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhpU3RhY2ss
CkBAIC0xMDUsMTAgKzExMCw4IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIC8vIEdldC9T
ZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgotICAgIE5v
ZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCisgICAgTm9kZUluZGV4IGdldERpcmVjdChpbnQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/
CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSB7CiAg
ICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQgLSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleDsKQEAgLTEyMywxMCArMTI2LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11
c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNpZ25lZClvcGVyYW5k
KTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKKyAg
ICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldERp
cmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOworICAgIH0KKyAg
ICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsKLSAg
ICAgICAgb3BlcmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKTsK
LSAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgc2V0QXJndW1lbnQob3Bl
cmFuZCwgdmFsdWUpOwpAQCAtMTM2LDE4ICsxNDEsMzUgQEAgcHJpdmF0ZToKICAgICAgICAgLy8g
TXVzdCBiZSBhIGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCwgdmFs
dWUpOwogICAgIH0KKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChv
cGVyYW5kKSwgdmFsdWUpOworICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdl
dC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAg
IE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKICAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7
Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0g
Jm1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVz
aCkgeworICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJs
b2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhh
cyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisg
ICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAg
IE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAg
ICAgICAgICBpZiAoZmx1c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dy
YXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bm9kZUluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0g
JmZsdXNoQ2hpbGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ag
PT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAgICAgICAg
ICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2Rl
LmNoaWxkMSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsK
KyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJsb2NrcywK
QEAgLTE3OSwyMSArMjAxLDM0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsK
IAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNl
dEFyZ3VtZW50KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhbbm9kZUlu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVzaCkgeworICAgICAgICAg
ICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRzIHRoZSBs
b2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9hZGVkIGl0
cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisgICAgICAgICAgICAgICAg
Ly8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoQ2hp
bGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICBpZiAoZmx1
c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgp
OworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQp
ID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hpbGQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gU2V0QXJndW1lbnQp
IHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGluIHRoZSBm
aXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0
byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9
PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAgICAgICAg
ICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHIt
PmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CisgICAg
ICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGVQ
dHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJ
bmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAg
ICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9
PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4g
bm9kZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9w
ZXJhbmQpOwpAQCAtMjE0LDYgKzI0OSw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gYWRkVG9HcmFwaChT
ZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsK
ICAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CisgICAgICAgIGludCBp
bmRleDsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAg
ICAgICBpbmRleCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7CisgICAgICAgICAgICBub2Rl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBGbHVzaCB8fCBub2RlLm9wID09IFNldEFyZ3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgYSBsb2NhbCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQsIG9yIGlmIGl0
J3MgYW4gYXJndW1lbnQgaW4gdGhlCisgICAgICAgICAgICAgICAgLy8gZmlyc3QgYmFzaWMgYmxv
Y2ssIHRoZW4gdGhlcmUgaXMgcmVhbGx5IG5vIG5lZWQgdG8gZmx1c2ggaXQuIEluIGZhY3QKKyAg
ICAgICAgICAgICAgICAvLyBlbWl0dGluZyBhIEZsdXNoIGluc3RydWN0aW9uIGNvdWxkIGp1c3Qg
Y29uZnVzZSB0aGluZ3MsIHNpbmNlIHRoZQorICAgICAgICAgICAgICAgIC8vIGdldEFyZ3VtZW50
KCkgY29kZSBhc3N1bWVzIHRoYXQgd2UgbmV2ZXIgc2VlIGEgRmx1c2ggb2YgYSBTZXRBcmd1bWVu
dC4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAgICAgYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOworICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8o
dmFyaWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoRmx1
c2gsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5h
cHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBu
b2RlSW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlSW5kZXgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVu
dEJsb2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRl
eCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZv
cm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCiAgICAgTm9kZUluZGV4IGdl
dFRvSW50MzIoaW50IG9wZXJhbmQpCkBAIC02NjMsOCArNzQzLDYgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8UGhpU3RhY2tFbnRyeSwgMTY+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8
UGhpU3RhY2tFbnRyeSwgMTY+IG1fbG9jYWxQaGlTdGFjazsKICAgICAKLSAgICBWZWN0b3I8Tm9k
ZSosIDE2PiBtX3JldXNhYmxlTm9kZVN0YWNrOwotICAgIAogICAgIHN0cnVjdCBJbmxpbmVTdGFj
a0VudHJ5IHsKICAgICAgICAgQnl0ZUNvZGVQYXJzZXIqIG1fYnl0ZUNvZGVQYXJzZXI7CiAgICAg
ICAgIApAQCAtNjg0LDcgKzc2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEJsb2NrcyBpbnRy
b2R1Y2VkIGJ5IHRoaXMgY29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4K
ICAgICAgICAgLy8gTWF5IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVk
ZXMgdGhlIGNvbnRpbnVhdGlvbiBhZnRlcgogICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhl
IGNhbGxlci4KLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fdW5saW5rZWRCbG9ja3M7Cisg
ICAgICAgIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiBtX3VubGlua2VkQmxvY2tzOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgdGhlIGNhbGxzaXRlJ3MgYmFzaWMgYmxvY2sgd2FzIHNwbGl0IGludG8g
dHdvLCB0aGVuIHRoaXMgd2lsbCBiZQogICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgY2FsbHNp
dGUgYmxvY2suIEl0IG5lZWRzIGl0cyBzdWNjZXNzb3JzIGxpbmtlZCB0byB0aGUKQEAgLTY5Miwy
MiArNzcwLDM0IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGFueSBibG9ja3MgaW4gbV91bmxpbmtl
ZEJsb2NrcyB0byBqdW1wIGJhY2sgaW50byB0aGlzIGJsb2NrLgogICAgICAgICBCbG9ja0luZGV4
IG1fY2FsbHNpdGVCbG9ja0hlYWQ7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5
KiBtX2NhbGxlZTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fcmV0dXJuVmFsdWU7CiAgICAg
ICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2Nr
KiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFk
LCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpOworICAgICAgICAvLyBEaWQgd2Ugc2VlIGFueSBy
ZXR1cm5zPyBXZSBuZWVkIHRvIGhhbmRsZSB0aGUgKHVuY29tbW9uIGJ1dCBuZWNlc3NhcnkpCisg
ICAgICAgIC8vIGNhc2Ugd2hlcmUgYSBwcm9jZWR1cmUgdGhhdCBkb2VzIG5vdCByZXR1cm4gd2Fz
IGlubGluZWQuCisgICAgICAgIGJvb2wgbV9kaWRSZXR1cm47CisgICAgICAgIAorICAgICAgICAv
LyBEaWQgd2UgaGF2ZSBhbnkgZWFybHkgcmV0dXJucz8KKyAgICAgICAgYm9vbCBtX2RpZEVhcmx5
UmV0dXJuOworICAgICAgICAKKyAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZXI7Cisg
ICAgICAgIAorICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tI
ZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1
ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgbGFzdEFyZyk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5l
U3RhY2tFbnRyeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1f
aW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXIt
Pm1faW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAg
ICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFu
ZChpbnQgb3BlcmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXhdICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisgICAg
ICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgeworICAg
ICAgICAgICAgICAgIGludCByZXN1bHQgPSBtX2NvbnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID49
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gb3Bl
cmFuZCArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQpAQCAtNzU2
LDYgKzg0NiwxMzUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXRO
b2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVu
Y3Rpb24sIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxh
c3RBcmcsIHVuc2lnbmVkIG5leHRPZmZzZXQpCit7CisgICAgLy8gRmlyc3QsIHRoZSByZWFsbHkg
c2ltcGxlIGNoZWNrczogZG8gd2UgaGF2ZSBhbiBhY3R1YWwgSlMgZnVuY3Rpb24/CisgICAgaWYg
KCFleHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGV4cGVj
dGVkRnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9u
LT5qc0V4ZWN1dGFibGUoKTsKKyAgICAKKyAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1l
bnRzIHdlJ3JlIHBhc3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGNvdWxk
CisgICAgLy8gaW5saW5lIGFyaXR5IGNoZWNrIGZhaWx1cmVzLCBidXQgZm9yIHNpbXBsaWNpdHkg
d2UgY3VycmVudGx5IGRvbid0LgorICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUt
PnBhcmFtZXRlckNvdW50KCkpICsgMSAhPSBsYXN0QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3Rh
Y2sgZGVwdGgsIG9yIGFyZSB3ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/Cisg
ICAgLy8gSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUu
CisgICAgdW5zaWduZWQgZGVwdGggPSAwOworICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50
cnkgPSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsK
KyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgaWYgKGRlcHRoID4gSGV1cmlzdGljczo6bWF4aW11
bUlubGluaW5nRGVwdGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERlcHRoIGV4Y2Vl
ZGVkLgorICAgICAgICAKKyAgICAgICAgaWYgKGVudHJ5LT5leGVjdXRhYmxlKCkgPT0gZXhlY3V0
YWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVjdXJzaW9uIGRldGVjdGVkLgor
ICAgIH0KKyAgICAKKyAgICAvLyBEb2VzIHRoZSBjb2RlIGJsb2NrJ3Mgc2l6ZSBtYXRjaCB0aGUg
aGV1cmlzdGljcy9yZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAgLy8gYW4gaW5saW5lIGNhbmRp
ZGF0ZT8KKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBleGVjdXRhYmxlLT5wcm9maWxl
ZENvZGVCbG9ja0ZvcihDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFtaWdodElubGluZUZ1bmN0aW9u
Rm9yQ2FsbChwcm9maWxlZEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IC8vIElmIHdlIGdldCBoZXJlIHRoZW4gaXQgbG9va3MgbGlrZSB3ZSBzaG91bGQgZGVmaW5pdGVs
eSBpbmxpbmUgdGhpcyBjb2RlLiBQcm9jZWVkCisgICAgLy8gd2l0aCBwYXJzaW5nIHRoZSBjb2Rl
IHRvIGdldCBieXRlY29kZSwgc28gdGhhdCB3ZSBjYW4gdGhlbiBwYXJzZSB0aGUgYnl0ZWNvZGUu
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBjb2RlIGJsb2NrIHdlIGdldCBoZXJlIGlzIGludGVuZGVk
IHRvIGRpZSBhZnRlciBoYW5kbGVJbmxpbmluZygpCisgICAgLy8gcmV0dXJucy4KKyAgICBKU09i
amVjdCogZXhjZXB0aW9uOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGV4ZWN1
dGFibGUtPnByb2R1Y2VDb2RlQmxvY2tGb3IocHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCks
IGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCksIE9wdGltaXppbmdDb21waWxhdGlvbiwgQ29kZUZv
ckNhbGwsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgCisgICAgLy8gTm93IHRoYXQgd2Ug
aGF2ZSB0aGUgYnl0ZWNvZGUsIGNoZWNrIGlmIHdlIHJlYWxseSBjYW4gaW5saW5lIGl0LiBUaGlz
IG1heSBmYWlsCisgICAgLy8gaWYgdGhlIGNvZGUgYmxvY2sgY29udGFpbnMgc29tZSBuYXN0eSBv
cGNvZGVzLgorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jay5nZXQo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBOb3cgd2Uga25vdyB3aXRo
b3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBTbyBiZWdpbiB0
aGUgcHJvY2VzcworICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5lY2Vzc2FyeSkg
YW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCisgICAgLy8gYXJl
IGZsdXNoZWQuCisgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uKQorICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2Fs
bFRhcmdldE5vZGVJbmRleCk7CisgICAgCisgICAgZmx1c2goY2FsbFRhcmdldCk7CisgICAgZm9y
IChpbnQgYXJnID0gZmlyc3RBcmcgKyAxOyBhcmcgPD0gbGFzdEFyZzsgKythcmcpCisgICAgICAg
IGZsdXNoKGFyZyk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgdXNlZCBi
eSB0aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KKyAgICBmb3IgKGludCBhcmcgPSBsYXN0QXJn
ICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9u
dW1WYXJzOyBhcmctLSA+IGxhc3RBcmcgKyAxOykKKyAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNl
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoYXJnKSk7CisgICAgCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggbG9jYWxzLgorICAgIHVuc2lnbmVkIG5ld051bUxv
Y2FscyA9IGxhc3RBcmcgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsg
Y29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBpZiAobmV3TnVtTG9jYWxzID4g
bV9udW1Mb2NhbHMpIHsKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2FscyhuZXdOdW1Mb2Nh
bHMpOworICAgIH0KKworICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlz
LCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgp
IC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2Fs
bFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdpc3RlciksIChW
aXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGxhc3RBcmcpKTsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhh
cHBlbnMuCisgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBtX2N1
cnJlbnRJbmRleCA9IDA7CisgICAgcGFyc2VDb2RlQmxvY2soKTsKKyAgICBtX2N1cnJlbnRJbmRl
eCA9IG9sZEluZGV4OworICAgIAorICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBz
b21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgorICAgIGlm
IChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkgLSAxKSB7CisgICAgICAgIEFTU0VSVCghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlu
a2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tz
W2lubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0uZ2V0KCksIGlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrcyk7CisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gaW5saW5l
U3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkKTsKKyAgICAgICAgQVNTRVJUKGlubGluZVN0
YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxM
aW5raW5nKTsKKyAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJs
b2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgbGlua0Js
b2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgIH0gZWxzZQorICAg
ICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7
CisgICAgCisgICAgLy8gSWYgdGhlcmUgd2FzIGEgcmV0dXJuLCBidXQgbm8gZWFybHkgcmV0dXJu
cywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBwYXJzaW5nIG9mCisgICAgLy8gdGhlIGNhbGxl
ciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNpYyBibG9jayB3ZSdyZSBpbiByaWdodCBub3cu
CisgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fZGlkRWFybHlSZXR1cm4gJiYgaW5saW5lU3Rh
Y2tFbnRyeS5tX2RpZFJldHVybikgeworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3MubGFzdCgpLmdldCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgLy8gSWYgdGhlIGxhc3QgYmFzaWMgYmxvY2sgZG9lcyBub3QgaGF2ZSBhIHRlcm1pbmFs
LCB0aGVuIGFkZCBhIGp1bXAuCisgICAgaWYgKCFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkp
IHsKKyAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCkpKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3JhcGguc2l6ZSgpOworICAg
IH0KKyAgICAKKyAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9j
ayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxp
bmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJu
TGlua2luZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ld
Lm1fYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsK
KyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOworICAgICAgICBB
U1NFUlQobm9kZS5vcCA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CisjZW5kaWYKKyAgICB9
CisgICAgCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBj
b250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sg
PSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX2dyYXBoLnNpemUoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5n
ZXQoKTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5h
cHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOworICAgIG1fZ3Jh
cGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgCisgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSByZXR1cm4gYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBj
YWxsZXIsIGJ1dAorICAgIC8vIGluIHRoZSBuZXcgYmFzaWMgYmxvY2suCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNS
ZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgZmlyc3RB
cmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgc3dpdGNo
IChpbnRyaW5zaWMpIHsKQEAgLTg1Myw3ICsxMDcyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxv
Y2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8g
dXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFy
Z3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0
IGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1sw
XS5nZXQoKSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFw
aChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVudCAtIG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUpKSk7CkBAIC0xNjIxLDEwICsxODQwLDI1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgorICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0
cnVlOworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfcmV0KSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQp
IDw9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhOb0Jsb2NrKSk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAx
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fZGlkRWFybHlSZXR1cm4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworICAgICAgICAgICAgfQogICAgICAgICAgICAg
YWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7
CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2VuZCk7CiAKQEAgLTE2NDAsNiArMTg3NCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVudW0geyBDb25z
dGFudEZ1bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7
CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmlzTGlua2VkKCkKKyAg
ICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtl
bHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiBpdCBoYWQgYmVlbiBsaW5rZWQgdGhlbiBtYXliZSB3ZSB3b3VsZCBoYXZlIGlubGluZWQgaXQu
IElmIHdlIGFsbG93IHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjb2RlIHRvIGV4ZWN1dGUgdGhl
biB3ZSBtaWdodCBnZXQgc3R1Y2sgZXhlY3V0aW5nIGEgc2xvdyBjYWxsIHdpdGhvdXQgYW55Cisg
ICAgICAgICAgICAgICAgLy8gaG9wZSBvZiByZW9wdGltaXppbmcuCisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNh
bGxUYXJnZXQpKQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRGdW5jdGlvbjsK
ICAgICAgICAgICAgIGVsc2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5pc0xpbmtlZCgpICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudElu
ZGV4KSkKQEAgLTE2NTUsMjUgKzE4OTcsMzggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSByZXN1bHQ/CiAg
ICAgICAgICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
aW50IHJlc3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVyIGhhcHB5CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKTsKICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24g
PSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogICAgICAgICAg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwogICAgICAgICAg
ICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAg
ICAgdXNlc1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBn
ZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfY2FsbCkpOworICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbihtX2dyYXBoLnNpemUoKSwgbmV4dE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIG5l
eHRPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uOwog
ICAgICAgICAgICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYzsKLSAgICAgICAgICAgICAg
ICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywg
Y2FsbFRhcmdldCktPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
OworICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFudEZ1bmN0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2dyYXBoLnZhbHVlT2ZGdW5j
dGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaW50cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMo
KTsKKyAgICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGNhbGxUeXBlID09IExpbmtlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENh
bGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkuY2FsbGVlLmdldCgpOwotICAgICAgICAgICAgICAg
ICAgICBpbnRyaW5zaWMgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9u
KSwgY2FsbFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJl
bnRJbmRleCkuY2FsbGVlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBl
eHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAgICAg
ICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRy
aW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFz
dEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50cmluc2ljICE9IE5v
SW50cmluc2ljKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0
ZWRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5j
dGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jl
c3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZywgcHJlZGlj
dGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRv
IGJlIGluc2lkZSBicmFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5j
dGlvbiwgZXhwZWN0ZWRGdW5jdGlvbiwgZmlyc3RBcmcsIGxhc3RBcmcsIG5leHRPZmZzZXQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJlIGluc2lkZSBi
cmFjZXMuCiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE3MzIsNyArMTk4NywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJsZS4KICAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXggPT0gYmxvY2tC
ZWdpbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRh
cmdldCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZXZlciBkbyBPU1IgaW50byBhbiBpbmxp
bmVkIGNvZGUgYmxvY2suIFRoYXQgY291bGQgbm90IGhhcHBlbiwgc2luY2UgT1NSCisgICAgICAg
ICAgICAvLyBsb29rcyB1cCB0aGUgY29kZSBibG9jayB0aGF0IGlzIHRoZSByZXBsYWNlbWVudCBm
b3IgdGhlIGJhc2VsaW5lIEpJVCBjb2RlCisgICAgICAgICAgICAvLyBibG9jay4gSGVuY2UsIG1h
Y2hpbmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBpbmxpbmUgY29kZSBibG9j
ay4KKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIpCisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAgICAgfQpAQCAt
MTc4NCw3ICsyMDQzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBt
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2Fs
IHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFs
dWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjaykpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vz
c29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0g
UGhpIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBGbHVzaCB8fCAobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBB
cmd1bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCkBAIC0xODI1LDkgKzIwODQsMTAg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICB9CiB9CiAKLXZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPEJs
b2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdldHMpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxv
Y2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJn
ZXRzKQogewogICAgIEFTU0VSVChibG9jay0+ZW5kICE9IE5vTm9kZSk7CisgICAgQVNTRVJUKCFi
bG9jay0+aXNMaW5rZWQpOwogICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAx
XTsKICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwogICAgIApAQCAtMTg0NCwyNyArMjEw
NCw1MyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAgICAgZGVm
YXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlmCiB9CiAKLXZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPEJsb2NrSW5kZXg+JiB1bmxpbmtlZEJsb2NrcykKK3Zv
aWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxp
bmtlZEJsb2NrcykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tz
LnNpemUoKTsgKytpKQotICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtl
ZEJsb2Nrc1tpXV0uZ2V0KCksIHVubGlua2VkQmxvY2tzKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh1bmxpbmtl
ZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykgeworICAgICAgICAgICAgbGlua0Jsb2Nr
KG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQoKSwg
dW5saW5rZWRCbG9ja3MpOworICAgICAgICAgICAgdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05v
cm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3NvcnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCiB7Ci0gICAgZm9yIChCbG9ja0lu
ZGV4IGluZGV4ID0gMDsgaW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpbmRleCkg
eworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9IG1fZ3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29y
SW5kZXhdLmdldCgpOworICAgIGlmICghc3VjY2Vzc29yLT5pc1JlYWNoYWJsZSkgeworICAgICAg
ICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5k
KHN1Y2Nlc3NvckluZGV4KTsKKyAgICB9CisgICAgCisgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vz
c29ycy5hcHBlbmQoYmxvY2tJbmRleCk7Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmRldGVy
bWluZVJlYWNoYWJpbGl0eSgpCit7CisgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlz
dDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoMCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNS
ZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+ZW5kICE9
IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NF
UlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5pc0p1
bXAoKSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgo
KV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwot
ICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+
bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODc3LDMwICsyMTYzLDM1IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgbV9p
ZGVudGlmaWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKTsgKytpKQotICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29k
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KSksIGkpOworICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkgKyBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5k
TWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJs
b2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSKQorQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFy
c2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9j
a0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1
YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgbGFzdEFyZykKICAgICA6
IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1fY2Fs
bHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9ja0hlYWQpCi0gICAgLCBtX2NhbGxlZShieXRlQ29k
ZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKKyAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFs
dWVWUikKKyAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQorICAgICwgbV9kaWRFYXJseVJldHVybihm
YWxzZSkKKyAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQog
ewotICAgIGlmIChtX2NhbGxlZSkgeworICAgIGlmIChtX2NhbGxlcikgewogICAgICAgICAvLyBJ
bmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChsYXN0QXJnICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAg
ICAgIAogICAgICAgICBJbmxpbmVDYWxsRnJhbWUgaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7
Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IG1fY2FsbGVlLT5tX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFj
a09mZnNldCA9IGxhc3RBcmcgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVlVlIgPSBjYWxsZWVWUjsKICAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLmNhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdp
bigpOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUubnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA9
IGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzOworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuaXND
YWxsID0gdHJ1ZTsKICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVD
YWxsRnJhbWVzKCkuYXBwZW5kKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lID0gJmJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1lcygp
Lmxhc3QoKTsKICAgICAgICAgCkBAIC0xOTE4LDE1ICsyMjA5LDE5IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kp
IHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkg
KyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgICAgICBwYWlyPEpTVmFsdWVN
YXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFw
LmFkZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwg
Ym9vbD4gcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAg
ICBpZiAocmVzdWx0LnNlY29uZCkgewogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+YWRkQ29uc3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgIGJ5dGVDb2Rl
UGFyc2VyLT5tX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuZmlyc3QtPnNlY29u
ZDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9j
ayBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVChjYWxsZWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgIEFTU0VSVChsYXN0QXJnID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIp
OwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgPT0gTm9CbG9jayk7CiAKICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpAQCAtMTkzNyw5ICsyMjMyLDEyIEBAIEJ5dGVDb2Rl
UGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICAg
ICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpCi0gICAgICAg
ICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpOworICAgICAgICAgICAgbV9jb25zdGFudFJlbWFw
W2ldID0gaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwogICAgIH0KICAgICAKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZW1hcC5zaXplKCk7ICsraSkKKyAgICAg
ICAgQVNTRVJUKG1fY29uc3RhbnRSZW1hcFtpXSA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eCk7CisgICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwog
fQogCkBAIC0xOTU0LDEwICsyMjUyLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29k
ZUJsb2NrKCkKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxp
bWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBP
d25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJl
bnRJbmRleCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9j
dXJyZW50SW5kZXgsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMp
KTsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOworICAgICAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlu
a2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoIXBhcnNlQmxvY2sobGltaXQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTE5NjUsNiArMjI2NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
Q29kZUJsb2NrKCkKICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8PSBsaW1pdCk7
CiAKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5lbmQgPSBtX2dyYXBoLnNpemUoKTsKKyAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gMDsKICAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50
SW5kZXggPCBsaW1pdCk7CiAgICAgfQogCkBAIC0xOTc5LDEyICsyMjgwLDEyIEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAg
ICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKICAgICAKLSAgICBJbmxpbmVTdGFja0VudHJ5IGlu
bGluZVN0YWNrRW50cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9j
aywgSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVT
dGFja0VudHJ5KHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxvY2ssIElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxv
Y2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7Ci0gICAgc2V0dXBQcmVkZWNl
c3NvcnMoKTsKKyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBwcm9jZXNzUGhpU3Rh
Y2s8TG9jYWxQaGlTdGFjaz4oKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFj
az4oKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi1i
b29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQordGVtcGxhdGU8Ym9v
bCAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQpPgorYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENv
ZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNv
ZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC00
Myw3ICs0NCw3IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAg
ICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5b
Ynl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBERUZJTkVfT1Aob3Bjb2RlLCBs
ZW5ndGgpICAgICAgICAgICBcCiAgICAgICAgIGNhc2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZU9wY29kZShvcGNvZGUpKSAgXAor
ICAgICAgICAgICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUob3Bjb2RlKSkgIFwKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnl0ZWNvZGVP
ZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCiAgICAgICAgICAgICBicmVhazsKQEAgLTU4LDYgKzU5
LDE2IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3sKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Db21waWxlT3Bjb2RlPihjb2Rl
QmxvY2spOworfQorCitib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxv
Y2spOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5Nzcy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDIwICsyNiw0MiBAQAogI2lmbmRlZiBERkdDYXBhYmlsaXRpZXNfaAog
I2RlZmluZSBERkdDYXBhYmlsaXRpZXNfaAogCisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCisj
aW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaW5jbHVkZSAiREZH
Tm9kZS5oIgotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0aGV5IHJldHVybiB0cnVlIGl0
IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rlcy4KLWlubGluZSBib29sIG1p
Z2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5lIGJvb2wg
bWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUg
Ym9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1
ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJs
b2NrKikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNv
dW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50
KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxs
KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0
aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGls
ZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVy
biBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50Owor
fQorCitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0g
SGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0
KENvZGVCbG9jayopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiAvLyBPcGNvZGUgY2hlY2tp
bmcuCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQpAQCAt
MTQ2LDE0ICsxNjgsNDUgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBv
cAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29k
ZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgCisgICAgLy8gVGhlc2Ug
b3Bjb2RlcyB3b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQgd2l0aCBpbmxpbmluZywgYnV0IHdlIGN1
cnJlbnRseSBkb24ndCBkbyBpdC4KKyAgICAvLyBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgc2NvcGUg
Y2hhaW4gd2lsbCBub3QgYmUgc2V0IGNvcnJlY3RseS4KKyAgICBjYXNlIG9wX2dldF9zY29wZWRf
dmFyOgorICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CisgICAgY2FzZSBvcF9yZXNvbHZlOgor
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6Cisg
ICAgICAgIAorICAgIC8vIFRyaXZpYWwgdG8gc3VwcG9ydCB3aXRoIHRoZSBjb3B5IHByb3BhZ2F0
aW9uIG1hY2hpbmUgd2UgYWxyZWFkeSBoYXZlLCBidXQgdGhlIGdsdWUKKyAgICAvLyBpc24ndCB0
aGVyZSwgeWV0LgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICAgICAgCisgICAgLy8gSW5s
aW5pbmcgZG9lc24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBleHByZXNzaW9uIG9wZXJhbmRz
LgorICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJ
RCk7CisgICAgfQorfQorCiBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOworYm9v
bCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNl
OyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJu
IGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJs
b2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBt
aWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeyByZXR1cm4g
ZmFsc2U7IH0KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29k
ZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KKwogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29k
ZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29k
ZShPcGNvZGVJRCkgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNv
ZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjYW5JbmxpbmVP
cGNvZGVzKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiAKIGlubGluZSBib29sIGNhbkNvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2Nr
KQpAQCAtMTc2LDYgKzIyOSwxNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JD
b25zdHJ1CiAgICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVC
bG9jaykgJiYgY2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAoraW5saW5lIGJvb2wg
Y2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2spICYmIGNhbklubGluZU9w
Y29kZXMoY29kZUJsb2NrKTsKK30KKworaW5saW5lIGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JD
b25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5l
RnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVC
bG9jayk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIERGR0Nh
cGFiaWxpdGllc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNDYgQEAgY29uc3QgY2hhciogR3JhcGg6Om5h
bWVPZlZhcmlhYmxlQWNjZXNzRAogICAgIHJldHVybiBidWY7CiB9CiAKK3N0YXRpYyB2b2lkIHBy
aW50V2hpdGVTcGFjZSh1bnNpZ25lZCBhbW91bnQpCit7CisgICAgd2hpbGUgKGFtb3VudC0tID4g
MCkKKyAgICAgICAgcHJpbnRmKCIgIik7Cit9CisKK3ZvaWQgR3JhcGg6OmR1bXBDb2RlT3JpZ2lu
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKCFub2RlSW5kZXgpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBOb2RlJiBjdXJyZW50Tm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAg
Tm9kZSYgcHJldmlvdXNOb2RlID0gYXQobm9kZUluZGV4IC0gMSk7CisgICAgaWYgKHByZXZpb3Vz
Tm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSA9PSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFZlY3RvcjxDb2Rl
T3JpZ2luPiBwcmV2aW91c0lubGluZVN0YWNrID0gcHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5s
aW5lU3RhY2soKTsKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gY3VycmVudElubGluZVN0YWNrID0g
Y3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIHVuc2lnbmVkIGNvbW1v
blNpemUgPSBzdGQ6Om1pbihwcmV2aW91c0lubGluZVN0YWNrLnNpemUoKSwgY3VycmVudElubGlu
ZVN0YWNrLnNpemUoKSk7CisgICAgdW5zaWduZWQgaW5kZXhPZkRpdmVyZ2VuY2UgPSBjb21tb25T
aXplOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb21tb25TaXplOyArK2kpIHsKKyAg
ICAgICAgaWYgKHByZXZpb3VzSW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lICE9IGN1cnJl
bnRJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGluZGV4T2ZE
aXZlcmdlbmNlID0gaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIC8vIFByaW50IHRoZSBwb3BzLgorICAgIGZvciAodW5zaWduZWQgaSA9IHByZXZpb3Vz
SW5saW5lU3RhY2suc2l6ZSgpOyBpLS0gPiBpbmRleE9mRGl2ZXJnZW5jZTspIHsKKyAgICAgICAg
cHJpbnRXaGl0ZVNwYWNlKGkgKiAyKTsKKyAgICAgICAgcHJpbnRmKCI8LS0gJXBcbiIsIHByZXZp
b3VzSW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gUHJpbnQgdGhlIHB1c2hlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmRl
eE9mRGl2ZXJnZW5jZTsgaSA8IGN1cnJlbnRJbmxpbmVTdGFjay5zaXplKCk7ICsraSkgeworICAg
ICAgICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYoIi0tPiAlcFxuIiwg
Y3VycmVudElubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZSk7CisgICAg
fQorfQorCiB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOwpAQCAtOTEsNiAr
MTMxLDkgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAg
ICBBU1NFUlQocmVmQ291bnQpOwogICAgICAgICAtLXJlZkNvdW50OwogICAgIH0KKyAgICAKKyAg
ICBkdW1wQ29kZU9yaWdpbihub2RlSW5kZXgpOworICAgIHByaW50V2hpdGVTcGFjZSgobm9kZS5j
b2RlT3JpZ2luLmlubGluZURlcHRoKCkgLSAxKSAqIDIpOwogCiAgICAgLy8gRXhhbXBsZS9leHBs
YW5hdGlvbiBvZiBkYXRhZmxvdyBkdW1wIG91dHB1dAogICAgIC8vCkBAIC0yNDAsNyArMjgzLDcg
QEAgdm9pZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBmb3IgKHNp
emVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7Ci0gICAgICAgIHByaW50ZigiQmxvY2sgIyV1
IChiYyMldSk6ICAlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlz
T1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOworICAgICAgICBwcmludGYoIkJsb2Nr
ICMldSAoYmMjJXUpOiAlcyVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9j
ay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8g
IiAoT1NSIHRhcmdldCkiIDogIiIpOwogICAgICAgICBwcmludGYoIiAgdmFyczogIik7CiAgICAg
ICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhi
bG9jay0+dmFsdWVzQXRIZWFkLCBzdGRvdXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSw5ICsxMTEsMTMgQEAgcHVibGljOgog
ICAgIC8vIENvZGVCbG9jayBpcyBvcHRpb25hbCwgYnV0IG1heSBhbGxvdyBhZGRpdGlvbmFsIGlu
Zm9ybWF0aW9uIHRvIGJlIGR1bXBlZCAoZS5nLiBJZGVudGlmaWVyIG5hbWVzKS4KICAgICB2b2lk
IGR1bXAoQ29kZUJsb2NrKiA9IDApOwogICAgIHZvaWQgZHVtcChOb2RlSW5kZXgsIENvZGVCbG9j
ayogPSAwKTsKKworICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2Rl
IGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKKyAgICAvLyBwcmVjZWRpbmcg
bm9kZS4KKyAgICB2b2lkIGR1bXBDb2RlT3JpZ2luKE5vZGVJbmRleCk7CiAjZW5kaWYKIAotICAg
IEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxCbG9ja0luZGV4
PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKKyAgICBCbG9ja0luZGV4IGJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8VW5saW5rZWRCbG9jaz4mIGJsb2NrcywgdW5z
aWduZWQgYnl0ZWNvZGVCZWdpbik7CiAKICAgICBib29sIHByZWRpY3RHbG9iYWxWYXIodW5zaWdu
ZWQgdmFyTnVtYmVyLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewpAQCAtMjQ4LDE4
ICsyNTIsMTggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgb3Bl
cmF0b3IoKShCbG9ja0luZGV4KiBibG9ja0luZGV4KSBjb25zdAorICAgIHVuc2lnbmVkIG9wZXJh
dG9yKCkoVW5saW5rZWRCbG9jayogdW5saW5rZWRCbG9jaykgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2dyYXBoLm1fYmxvY2tzWypibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbjsKKyAg
ICAgICAgcmV0dXJuIG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9jay0+bV9ibG9ja0luZGV4
XS0+Ynl0ZWNvZGVCZWdpbjsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7
CiB9OwogCi1pbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KFZlY3RvcjxCbG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQor
aW5saW5lIEJsb2NrSW5kZXggR3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0
b3I8VW5saW5rZWRCbG9jaz4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbikKIHsKLSAg
ICByZXR1cm4gKldURjo6YmluYXJ5U2VhcmNoV2l0aEZ1bmN0b3I8QmxvY2tJbmRleCwgdW5zaWdu
ZWQ+KGJsb2Nrcy5iZWdpbigpLCBibG9ja3Muc2l6ZSgpLCBieXRlY29kZUJlZ2luLCBXVEY6Oktl
eU11c3RCZVByZXNlbnRJbkFycmF5LCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKTsK
KyAgICByZXR1cm4gV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxVbmxpbmtlZEJsb2NrLCB1
bnNpZ25lZD4oYmxvY2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdU
Rjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhp
cykpLT5tX2Jsb2NrSW5kZXg7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMyArMzksMjAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi12b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NS
KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit2b2lkIEpJVENv
bXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQogewogICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4K
ICAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVS
Qk9TRSkKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUp
IGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1fYnl0
ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhp
dCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXgg
ICIsIGRlYnVnT2Zmc2V0KCkpOwogICAgIGV4aXQuZHVtcChzdGRlcnIpOwogI2VuZGlmCiAjaWYg
REZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkBAIC00ODIsMTkgKzQ4OSw1
NSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgaWYgKGV4
aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQog
ICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8g
MTMpIEZpeCBjYWxsIGZyYW1lLgorICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZShzKS4KICAgICAK
ICAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKS0+YWx0ZXJuYXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3Rl
ckZpbGU6OkNvZGVCbG9jaykpOwogICAgIAorICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcik7
CisgICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1h
cCA9IGRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyKTsKKyAgICAg
ICAgdW5zaWduZWQgcmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
LmJ5dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29k
ZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJl
dHVybkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1hcHBpbmcpOwor
ICAgICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICAKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29k
ZU9mZnNldCk7CisKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVWUiksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgT0JKRUNUX09GRlNF
VE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAg
IEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlcjsKKyAgICAgICAgCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxp
bmVDb2RlQmxvY2spLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAg
ICAgICAgc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJh
bWUpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6UmV0dXJuUEMpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+bnVtQXJndW1lbnRzSW5j
bHVkaW5nVGhpcykpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAg
ICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7Cisg
ICAgfQorICAgIAorICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIGFkZFB0cihJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKKyAgICAKICAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJh
c2VsaW5lIEpJVCBjb2RlLgogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFw
cGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFw
LmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOwor
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihl
eGl0Lm1fY29kZU9yaWdpbik7CisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwor
ICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJj
aDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRD
b2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXgg
PT0gZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2Rl
SW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9p
ZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0
KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgdm9pZCoganVtcFRhcmdl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihi
YXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNo
aW5lQ29kZU9mZnNldCk7CiAgICAgCiAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKQEAgLTUwNiwyMCArNTQ5LDI4IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNlbmRpZgogfQogCi12b2lk
IEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQor
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVkQ29k
ZU1hcEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiBkZWNvZGVkQ29kZU1hcDsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFs
dGVybmF0aXZlKCkpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAgICBBU1NFUlQoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKSk7Ci0gICAgY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCktPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRDb2RlTWFwKTsKKyAgICBBU1NF
UlQoY29kZUJsb2NrID09IGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgIEFTU0VS
VChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAg
QVNTRVJUKGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICAKKyAgICBzdGQ6OnBhaXI8SGFz
aE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjppdGVy
YXRvciwgYm9vbD4gcmVzdWx0ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4oKSk7CisgICAgCisgICAgaWYgKHJlc3VsdC5z
ZWNvbmQpCisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0LmZp
cnN0LT5zZWNvbmQpOwogICAgIAorICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKK30K
Kwordm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxh
dGl2ZSkKK3sKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxh
dGl2ZS5vc3JFeGl0cygpLmJlZ2luKCk7CiAgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhp
dHNFbmQgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmVuZCgpOwogICAgIAogICAgIHdoaWxlIChl
eGl0c0l0ZXIgIT0gZXhpdHNFbmQpIHsKICAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhpdCA9ICpl
eGl0c0l0ZXI7Ci0gICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3VsYXRp
dmUuc3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCksIGRlY29kZWRDb2Rl
TWFwKTsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5z
cGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CiAgICAgICAgICsrZXhp
dHNJdGVyOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjcsOCArNDI3LDIxIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQgbGluayhMaW5rQnVmZmVy
Jik7CiAKLSAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYsIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVj
b2RlZENvZGVNYXApOworICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JF
eGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgbGlua09TUkV4aXRzKFNwZWN1
bGF0aXZlSklUJik7CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlOworICAgICAgICAg
ICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rp
b25FeGVjdXRhYmxlOjpzX2luZm8pOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29u
c3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCkgPT0gY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICAgICAgcmV0dXJu
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKik7CiAK
ICAgICAvLyBUaGUgZ2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMg
dGhlIHZQdHJzLgogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtNDM4LDcgKzQ1
MSw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgY29kZUJsb2NrIGN1cnJlbnRseSBiZWluZyBn
ZW5lcmF0ZWQsIHVzZWQgdG8gYWNjZXNzIGluZm9ybWF0aW9uIHN1Y2ggYXMgY29uc3RhbnQgdmFs
dWVzLCBpbW1lZGlhdGVzLgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7Ci0KKyAgICAKKyAg
ICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID4g
bV9kZWNvZGVkQ29kZU1hcHM7CisgICAgCiAgICAgLy8gVmVjdG9yIG9mIGNhbGxzIG91dCBmcm9t
IEpJVCBjb2RlLCBpbmNsdWRpbmcgZXhjZXB0aW9uIGhhbmRsZXIgaW5mb3JtYXRpb24uCiAgICAg
Ly8gQ291bnQgb2YgdGhlIG51bWJlciBvZiBDYWxsUmVjb3JkcyB3aXRoIGV4Y2VwdGlvbiBoYW5k
bGVycy4KICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNiArMjE1LDcgQEAgc3Rh
dGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwogICAgIG1hY3JvKFNldExvY2Fs
LCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFBoaSwgMCkgXAorICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAog
ICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4gKi9cCiAgICAgbWFjcm8oU2V0
QXJndW1lbnQsIDApIFwKQEAgLTQ4NCw2ICs0ODUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgUGhpOgogICAgICAgICBjYXNlIFNldEFyZ3Vt
ZW50OgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MzUsNyArODM3LDcg
QEAgc3RydWN0IE5vZGUgewogCiAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGk7CisgICAgICAgIHJldHVybiBtX3Jl
ZkNvdW50ICYmIG9wICE9IFBoaSAmJiBvcCAhPSBGbHVzaDsKICAgICB9CiAKICAgICB1bnNpZ25l
ZCByZWZDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5o
CShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFu
ZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0LDMxIEBAIHB1YmxpYzoKICAgICBUJiBs
b2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgY29uc3QgVCYg
bG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIAor
ICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKHNp
emUgPD0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNp
emVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOworICAgICAgICBtX2xvY2Fscy5yZXNpemUo
c2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9sb2NhbHMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVl
KCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlkeCwgY29uc3QgVCYg
dmFsdWUpCiAgICAgewotICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNpemUoKSkgewotICAg
ICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXplKCk7Ci0gICAgICAgICAgICBt
X2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xk
U2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG1fbG9jYWxz
W2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKLSAgICAgICAgfQorICAgICAgICBlbnN1cmVM
b2NhbHMoaWR4ICsgMSk7CiAgICAgICAgIAogICAgICAgICBtX2xvY2Fsc1tpZHhdID0gdmFsdWU7
CiAgICAgfQogICAgIAorICAgIFQgZ2V0TG9jYWwoc2l6ZV90IGlkeCkKKyAgICB7CisgICAgICAg
IGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIFRyYWl0czo6
ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tpZHhdOworICAgIH0KKyAg
ICAKICAgICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZh
bHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0gPT0gVHJhaXRzOjpk
ZWZhdWx0VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc3LDYgKzU3Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFu
Y2U6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICBjYXNl
IFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIGNhc2Ug
Rm9yY2VPU1JFeGl0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0
Niw3ICs4NDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkg
ImV4ZWN1dGVkIiB0aGUKICAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERG
RyBOb2RlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCiAgICAgICAgIC8vIGJ5dGVjb2Rl
IGluZGV4IGFzIHRoZSBTZXRMb2NhbC4KLSAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZv
ck9TUiA9PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIEFTU0VSVCht
X2NvZGVPcmlnaW5Gb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luKTsKICAgICAgICAgTm9kZSYgbmV4
dE5vZGUgPSBhdChtX2NvbXBpbGVJbmRleCArIDEpOwogICAgICAgICAKICAgICAgICAgLy8gT2Rk
bHksIGl0J3MgcG9zc2libGUgZm9yIHRoZSBieXRlY29kZSBpbmRleCBmb3IgdGhlIG5leHQgbm9k
ZSB0byBiZQpAQCAtODU5LDcgKzg1OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgLy8gc3RhdGVtZW50KSB3b3VsZCBiZSBkZWFkIGFueXdheSAt
IHNvIHRoZSBmYWN0IHRoYXQgREZHIHdvdWxkIGhhdmUKICAgICAgICAgLy8gYWxyZWFkeSBtYWRl
IHRoZSBhc3NpZ25tZW50LCBhbmQgYmFrZWQgaXQgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSBkdXJp
bmcKICAgICAgICAgLy8gT1NSIGV4aXQsIHdvdWxkIG5vdCBiZSB2aXNpYmxlIHRvIHRoZSBvbGQg
SklUIGluIGFueSB3YXkuCi0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5leHROb2Rl
LmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0g
bmV4dE5vZGUuY29kZU9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKICAg
ICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xODgxLDEx
ICsxODgxLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSku
cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCB0aGlzVmFsdWUpOworICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRo
aXNWYWx1ZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMzQxLDYgKzIzNDYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBQaGk6CisgICAgY2FzZSBGbHVzaDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKICAgICBjYXNlIEJyZWFrcG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA4LDEzICsxMDgsMTMgQEAgdm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91
dCkgY29ucwogT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fY2hlY2so
Y2hlY2spCiAgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQotICAgICwgbV9i
eXRlY29kZUluZGV4KGppdC0+bV9ieXRlY29kZUluZGV4Rm9yT1NSKQorICAgICwgbV9jb2RlT3Jp
Z2luKGppdC0+bV9jb2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292
ZXJ5SW5kZXgpCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1lbnRzLnNpemUoKSkKICAg
ICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7Ci0gICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpOworICAgIEFTU0VS
VChtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQogICAgICAgICBtX2Fy
Z3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9h
cmd1bWVudHNbYXJndW1lbnRdKTsKICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFy
aWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCkBAIC0yNTksNiArMjU5LDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHsKICAgICBBU1NF
UlQobV9jb21waWxlT2theSk7CiAgICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJl
Z2luKTsKKyAgICAKKyAgICBpZiAoIWJsb2NrLmlzUmVhY2hhYmxlKSB7CisgICAgICAgIG1fY29t
cGlsZUluZGV4ID0gYmxvY2suZW5kOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYg
KGJsb2NrLmlzT1NSVGFyZ2V0KQogICAgICAgICBtX2ppdC5ub3RpY2VPU1JFbnRyeShibG9jayk7
CkBAIC0yOTAsMTEgKzI5NSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiAgICAgfQogICAgIAogICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwotICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBD
b2RlT3JpZ2luKCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9jay5lbmQ7ICsr
bV9jb21waWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXg7CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5vZGUuY29kZU9yaWdpbjsK
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklU
IHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50
KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9qaXQuZGVi
dWdPZmZzZXQoKSk7CkBAIC0zNjUsNyArMzcwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShCYXNpY0Jsb2NrJgogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVz
KCkKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKLSAgICBtX2J5dGVjb2RlSW5kZXhG
b3JPU1IgPSAwOworICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IENvZGVPcmlnaW4oMCk7CiAKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQogICAgICAg
ICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICszMjgsNyBAQCBzdHJ1Y3QgT1NSRXhpdCB7
CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKICAgICBOb2RlSW5kZXgg
bV9ub2RlSW5kZXg7Ci0gICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIENvZGVPcmln
aW4gbV9jb2RlT3JpZ2luOwogICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAg
ICAKQEAgLTU2NCw3ICs1NjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwg
MD4gbV9hcmd1bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsK
ICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKLSAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhG
b3JPU1I7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JPU1I7CiAgICAgCiAgICAgQWJz
dHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIApAQCAtNzk5LDcgKzc5OSw2IEBAIGlubGluZSBTcGVj
dWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkKICAgICAsIG1fYXJndW1lbnRzKGppdC5jb2Rl
QmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQogICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCku
bV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpCi0gICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKQogICAgICwgbV9zdGF0ZShtX2ppdC5jb2RlQmxvY2soKSwg
bV9qaXQuZ3JhcGgoKSkKIHsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIENhbGxGcmFtZSogQ2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWVTbG8KICAg
ICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtYWNoaW5lQ2FsbGVyLT5jb2RlQmxvY2soKS0+Y29k
ZU9yaWdpbkZvclJldHVybihyZXR1cm5QQygpKTsKICAgICAKICAgICBmb3IgKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGlu
ZUNhbGxGcmFtZTspIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0SW5saW5lQ2FsbEZy
YW1lID0gaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2Fs
bEZyYW1lOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIAogICAgICAg
ICBDYWxsRnJhbWUqIGlubGluZWRDYWxsZXIgPSBtYWNoaW5lQ2FsbGVyICsgaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTc3MjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg0
LDYgKzM4NCwyNCBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpjbGVhckNvZGVWaXJ0dWFsCiAg
ICAgQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCgpOwogfQogCitDb2RlQmxvY2sqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQoreworICAgIENvZGVCbG9jayogcmVzdWx0OworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KQorICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICByZXN1
bHQgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiAwOworICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkp
CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocmVz
dWx0KTsKKyAgICBBU1NFUlQocmVzdWx0LT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjKQogewogICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CkBAIC00MDYs
MTEgKzQyNCwxMSBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0CiAg
ICAgcmV0dXJuIGVycm9yOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktp
bmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCom
IGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBT
Y29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlv
bktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVj
dComIGV4Y2VwdGlvbikKIHsKICAgICBleGNlcHRpb24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxEYXRhOwotICAgIFJlZlB0cjxGdW5j
dGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJv
ZHlOb2RlPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIDAsIDAsIG1fc291cmNlLCBtX3Bh
cmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VO
b3JtYWwsICZleGNlcHRpb24pOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0g
Z2xvYmFsRGF0YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9iYWxPYmplY3Qs
IDAsIDAsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQ
YXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOwogICAgIGlmICghYm9keSkg
ewogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC00MjAsOCArNDM4LDYgQEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25F
eAogICAgIGJvZHktPmZpbmlzaFBhcnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUpOwogICAgIHJl
Y29yZFBhcnNlKGJvZHktPmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCks
IGJvZHktPmxpbmVObygpLCBib2R5LT5sYXN0TGluZSgpKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwotCiAg
ICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQ7CiAgICAgQVNTRVJUKChjb21waWxh
dGlvbktpbmQgPT0gRmlyc3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQpKTsKICAgICByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2so
dGhpcywgRnVuY3Rpb25Db2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCksIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSk7CkBAIC00NDIsNyArNDU4LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZUZvcgogI2VuZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRv
bVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1
Y2VDb2RlQmxvY2tGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxs
ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGws
IGV4Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sg
PSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2NvcGVD
aGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDog
Rmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFuZXdD
b2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKQEAgLTUwMiw3ICs1MTgsNyBA
QCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgCiAgICAgQVNT
RVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxGdW5j
dGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLCBz
Y29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGltaXppbmdDb21w
aWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2VwdGlvbik7
CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29k
ZUJsb2NrRm9yKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgc2NvcGVDaGFpbk5vZGUsICEh
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENv
bXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29k
ZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NzcyOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYyLDcgKzQ2Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICptX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUGFzc093
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
SlNPYmplY3QqJiBleGNlcHRpb24pOworICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTR2xvYmFsT2JqZWN0KiwgU2NvcGVDaGFpbk5vZGUq
LCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKTsKIAogICAgICAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBl
eGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIEV4ZWNTdGF0ZSogY2FsbGVlQXJn
c0V4ZWMgPSAwKQogICAgICAgICB7CkBAIC01NzQsOSArNTc0LDE2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7CiAg
ICAgICAgIH0KIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fbmFt
ZTsgfQogICAgICAgICBKU1N0cmluZyogbmFtZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1l
VmFsdWUuZ2V0KCk7IH0KLSAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0gLy8gSW5jbHVkaW5nICd0aGlzJyEKKyAgICAg
ICAgc2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5z
aXplKCk7IH0gLy8gRXhjbHVkaW5nICd0aGlzJyEKICAgICAgICAgdW5zaWduZWQgY2FwdHVyZWRW
YXJpYWJsZUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9udW1DYXB0dXJlZFZhcmlhYmxlczsgfQog
ICAgICAgICBVU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAgICAgICAgIFNoYXJlZFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZp
c2lvbiA5NzcyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEhldXJpc3RpY3MgewogCit1bnNpZ25lZCBtYXhpbXVtRXZhbE9wdGltaXphdGlv
bkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rp
b25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVk
IG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50OworCit1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsKKwog
aW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwogaW50
MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGlu
dDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247CkBA
IC05OSw2ICsxMDgsMTggQEAgdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNo
YQogCiB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhNRTogTXVzdCBy
ZXZpc2l0IHRoZXNlIGhldXJpc3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGltaXppbmcgY29t
cGlsZXIsIG1heQorICAgIC8vIHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1
Z2UgY29kZSBibG9ja3MuIFRoZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAvLyB0aGlzIGlz
IHRvIHJlZnVzZSB0byBvcHRpbWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZhbE9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJvZ3JhbU9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JD
YWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhpbXVtRnVuY3Rp
b25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMjApOworICAgIAorICAg
IFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgMik7CisKICAgICBTRVQoZXhlY3V0aW9uQ291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKICAgICBTRVQoZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKICAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb24sIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHJldmlzaW9uIDk3NzI4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCitl
eHRlcm4gdW5zaWduZWQgbWF4aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlv
bkNvdW50OworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JD
YWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25l
ZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVj
dGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGlu
ZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5s
aW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcs
IDIgPSBvbmUgbGV2ZWwsIGV0Yy4KKwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5NzcyOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBWUHRySGFja0V4
ZWN1dGFibGU7CiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xhc3MgSklUQ29kZUdlbmVyYXRv
cjsKKyAgICBjbGFzcyBKSVRDb21waWxlcjsKICAgICB9CiAKICAgICBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwpA
QCAtNDksNiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAg
ICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOworICAgICAgICBmcmllbmQg
Y2xhc3MgREZHOjpKSVRDb21waWxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0
YTsKIAogICAgIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111725</attachid>
            <date>2011-10-19 21:51:12 -0700</date>
            <delta_ts>2011-10-20 15:46:50 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>inlining_patch_5.diff</filename>
            <type>text/plain</type>
            <size>98913</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDExLTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxp
bmVEZXB0aCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRG
Rzo6VW5saW5rZWRCbG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNv
ZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+SW5saW5lU3RhY2tF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlND
OjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpTQzo6
REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0aW9u
Rm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBDb2Rl
T3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2Nr
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENvZGVNYXBGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpiYXNlbGluZUNv
ZGVCbG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpP
cGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpnZXRMb2Nh
bCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9maWxlZENvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1
bnRpbWUvSGV1cmlzdGljcy5jcHA6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxp
emVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKwogMjAxMS0xMC0xOCAgT2xpdmVyIEh1bnQgIDxvbGl2
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgQ2FudmFzUGl4ZWxBcnJheSBpbiB0aGUg
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiA5Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDkgKzEyMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAg
Q29kZUxvY2F0aW9uTmVhckNhbGwgaG90UGF0aE90aGVyOwogICAgICAgICBKSVRXcml0ZUJhcnJp
ZXI8SlNGdW5jdGlvbj4gY2FsbGVlOworICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4g
bGFzdFNlZW5DYWxsZWU7CiAgICAgICAgIGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwog
ICAgICAgICBib29sIGlzQ2FsbCA6IDE7CiAgICAgICAgIGJvb2wgaXNERkcgOiAxOworICAgICAg
ICBib29sIGhhc1NlZW5VbmxpbmthYmxlQ2FsbCA6IDE7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXg7CiAKICAgICAgICAgYm9vbCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQpA
QCAtMjUwLDYgKzI1MiwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUGFzc093blB0cjxD
b2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVs
ZWFzZSgpOyB9CiAgICAgICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoUGFzc093blB0cjxDb2RlQmxv
Y2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQogICAgICAg
ICAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZVZlcnNpb24oKQorICAgICAgICB7CisgICAg
ICAgICAgICBDb2RlQmxvY2sqIHJlc3VsdCA9IHJlcGxhY2VtZW50KCk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gaGFwcGVu
IGlmIHdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIHRoZSBiYXNlbGluZSB2ZXJzaW9u
LgorICAgICAgICAgICAgd2hpbGUgKHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0KTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRD
b2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAK
ICAgICAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKQEAgLTM3NSwxMCArMzg5LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0
aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5
dGVjb2RlKCkgeyBtX2luc3RydWN0aW9ucy5jbGVhcigpOyB9CiAKLSNpZm5kZWYgTkRFQlVHCiAg
ICAgICAgIHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9u
Q291bnQ7IH0KICAgICAgICAgdm9pZCBzZXRJbnN0cnVjdGlvbkNvdW50KHVuc2lnbmVkIGluc3Ry
dWN0aW9uQ291bnQpIHsgbV9pbnN0cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25Db3VudDsgfQot
I2VuZGlmCiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICB2b2lkIHNldEpJVENvZGUoY29uc3Qg
SklUQ29kZSYgY29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykK
QEAgLTUzMCwxMCArNTQyLDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJjaDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNh
c2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+KG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVBy
b2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBzdGF0aWMgdWludDMyX3Qgc2xvd0Nhc2VUaHJlc2hvbGQoKSB7IHJldHVybiAxMDA7IH0K
ICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9m
ZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlciA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0KS0+bV9jb3VudGVyID49IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNl
VGhyZXNob2xkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNvdWxkVGFrZVNs
b3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3Vu
dGVyID49IEhldXJpc3RpY3M6OmNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVBy
b2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0KQpAQCAtNTUxLDIxICs1NjcsMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRl
Y29kZU9mZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RD
YXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNl
Q291bnQgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFs
RmFzdENhc2VDb3VudCA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9s
ZDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0
U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzbG93Q2FzZUNvdW50ID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFz
dENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3Vu
dCAtIHNwZWNpYWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAg
ICAgICAgcmV0dXJuIChzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IEhl
dXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBib29sIGxpa2VseVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRlY29kZU9m
ZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJh
cmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVy
OwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFz
dENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7
Ci0gICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3Vu
dCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VD
b3VudCArIHNwZWNpYWxGYXN0Q2FzZUNvdW50KSA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VT
bG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNl
dFJhcmVDYXNlUHJvZmlsZXMoKTsKQEAgLTk0NCw5ICs5NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAKICAgICAgICAgVmVjdG9yPElu
c3RydWN0aW9uPiBtX2luc3RydWN0aW9uczsKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2ln
bmVkIG1faW5zdHJ1Y3Rpb25Db3VudDsKLSNlbmRpZgogCiAgICAgICAgIGludCBtX3RoaXNSZWdp
c3RlcjsKICAgICAgICAgaW50IG1fYXJndW1lbnRzUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDk3ODgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBDb2RlT3JpZ2luX2gKIAogI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC01Niw2ICs1NywxNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgfQogICAg
IAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIC8vIFRoZSBpbmxp
bmUgZGVwdGggaXMgdGhlIGRlcHRoIG9mIHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBub3QgaW5s
aW5lZCwKKyAgICAvLyAyID0gaW5saW5lZCBvbmUgZGVlcCwgZXRjLgorICAgIHVuc2lnbmVkIGlu
bGluZURlcHRoKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvZGVP
cmlnaW4mIG90aGVyKSBjb25zdDsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gR2V0IHRo
ZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dp
bmcgb25seS4KKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKKyNl
bmRpZgogfTsKIAogc3RydWN0IElubGluZUNhbGxGcmFtZSB7CkBAIC02Myw3ICs3NSw4IEBAIHN0
cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHVuc2lnbmVkIHN0YWNrT2Zmc2V0OwogICAgIHVu
c2lnbmVkIGNhbGxlZVZSOwogICAgIENvZGVPcmlnaW4gY2FsbGVyOwotICAgIHVuc2lnbmVkIG51
bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXM7CisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzSW5jbHVk
aW5nVGhpcyA6IDMxOworICAgIGJvb2wgaXNDYWxsIDogMTsKIH07CiAKIHN0cnVjdCBDb2RlT3Jp
Z2luQXRDYWxsUmV0dXJuT2Zmc2V0IHsKQEAgLTcxLDYgKzg0LDMzIEBAIHN0cnVjdCBDb2RlT3Jp
Z2luQXRDYWxsUmV0dXJuT2Zmc2V0IHsKICAgICB1bnNpZ25lZCBjYWxsUmV0dXJuT2Zmc2V0Owog
fTsKIAoraW5saW5lIHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKK3sK
KyAgICB1bnNpZ25lZCByZXN1bHQgPSAxOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJy
ZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyAgICAKK2lubGluZSBib29sIENvZGVPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QgQ29kZU9y
aWdpbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIu
Ynl0ZWNvZGVJbmRleAorICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5saW5l
Q2FsbEZyYW1lOworfQorICAgIAorI2lmbmRlZiBOREVCVUcKKy8vIEdldCB0aGUgaW5saW5lIHN0
YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCitp
bmxpbmUgVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46OmlubGluZVN0YWNrKCkgY29uc3QK
K3sKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGluZURlcHRoKCkpOworICAgIHJl
c3VsdC5sYXN0KCkgPSAqdGhpczsKKyAgICB1bnNpZ25lZCBpbmRleCA9IHJlc3VsdC5zaXplKCkg
LSAyOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1l
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgcmVzdWx0W2luZGV4LS1dID0gY3VycmVudC0+Y2FsbGVyOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisjZW5kaWYKKwogaW5saW5lIHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXRGb3JD
b2RlT3JpZ2luKENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQqIGRhdGEpCiB7CiAgICAgcmV0
dXJuIGRhdGEtPmNhbGxSZXR1cm5PZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDkgKzE0NCw5IEBAIEpTT2JqZWN0
KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogCiAgICAgbV9zY29wZU5vZGUtPmVtaXRC
eXRlY29kZSgqdGhpcyk7CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgbV9jb2RlQmxvY2stPnNldElu
c3RydWN0aW9uQ291bnQobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKKyNp
Zm5kZWYgTkRFQlVHCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQogICAgICAgICBtX2Nv
ZGVCbG9jay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCShyZXZpc2lvbiA5Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEwIEBAIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAKICAgICBBU1NFUlQo
IW1fYmxvY2spOwogICAgIAorICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSk7CisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkgPT0g
YmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVn
aW47ICsraSkKICAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOwogICAgIG1fdmFyaWFibGVzID0g
YmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwpAQCAtNjI5LDYgKzYzMyw3IEBAIGJvb2wgQWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXggbm8KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAgLTY4Myw2ICs2ODgsNyBAQCBpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgc3dpdGNoIChub2RlLm9wKSB7
CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIEZsdXNoOgog
ICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFp
bC4KICAgICAgICAgc291cmNlID0gJmluVmFyaWFibGU7CiAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDk3ODgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDEyICs0NiwyNCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAgICwg
aXNPU1JUYXJnZXQoZmFsc2UpCiAgICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKICAgICAg
ICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgLCBpc0xpbmtlZChmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIGlzUmVhY2hhYmxlKGZhbHNl
KQogICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAg
ICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAg
ICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICB7CiAgICAgfQorICAgIAorICAg
IHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKKyAgICB7CisgICAgICAg
IHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFy
aWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNB
dEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0VGFpbC5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB9CiAKICAgICAvLyBUaGlzIHZhbHVlIGlz
IHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBt
b3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGlu
aW5nLgpAQCAtNjIsNiArNzQsMTAgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgIGJvb2wgaXNP
U1JUYXJnZXQ7CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxkUmV2
aXNpdDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBpc0xpbmtlZDsKKyNlbmRpZgor
ICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVj
ZXNzb3JzOwogICAgIApAQCAtNzIsNiArODgsMjEgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAg
IE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKIH07CiAKK3N0cnVjdCBVbmxp
bmtlZEJsb2NrIHsKKyAgICBCbG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAgICBib29sIG1fbmVl
ZHNOb3JtYWxMaW5raW5nOworICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZzsKKyAg
ICAKKyAgICBVbmxpbmtlZEJsb2NrKCkgeyB9CisgICAgCisgICAgZXhwbGljaXQgVW5saW5rZWRC
bG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIDogbV9ibG9ja0luZGV4KGJsb2Nr
SW5kZXgpCisgICAgICAgICwgbV9uZWVkc05vcm1hbExpbmtpbmcodHJ1ZSkKKyAgICAgICAgLCBt
X25lZWRzRWFybHlSZXR1cm5MaW5raW5nKGZhbHNlKQorICAgIHsKKyAgICB9Cit9OworICAgIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1fcHJvZmlsZWRCbG9j
ayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9j
dXJyZW50QmxvY2soMCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQogICAgICAgICAsIG1f
cGFyc2VGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChVSU5UX01B
WCkKQEAgLTc3LDE1ICs3OCwxOSBAQCBwcml2YXRlOgogICAgIC8vIEhlbHBlciBmb3IgbWluIGFu
ZCBtYXguCiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0
T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcpOwogICAgIAot
ICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLgorICAgIC8vIEhhbmRsZSBpbmxpbmlu
Zy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50
IGEgY2FsbC4KKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNh
bGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFu
ZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiwgaW50IGZp
cnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCk7CisgICAgLy8gSGFuZGxl
IGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2Ug
aWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9v
bCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgZmlyc3RBcmcs
IGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIC8vIFBhcnNlIGEg
c2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBh
cnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwotICAgIC8vIFNldHVwIHByZWRlY2Vzc29yIGxpbmtz
IGluIHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgotICAgIHZvaWQgc2V0dXBQcmVkZWNlc3NvcnMo
KTsKKyAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5r
cyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KKyAgICB2b2lkIGRldGVybWluZVJlYWNoYWJp
bGl0eSgpOworICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVj
ZXNzYXJ5LgorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4m
IHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGlu
ayBibG9jayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0
b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7Ci0gICAgdm9pZCBsaW5rQmxvY2tzKFZl
Y3RvcjxCbG9ja0luZGV4PiYgdW5saW5rZWRCbG9ja3MpOworICAgIHZvaWQgbGlua0Jsb2NrKEJh
c2ljQmxvY2sqLCBWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAg
dm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MpOwog
ICAgIC8vIExpbmsgR2V0TG9jYWwgJiBTZXRMb2NhbCBub2RlcywgdG8gZW5zdXJlIGxpdmUgdmFs
dWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAgZW51bSBQaGlTdGFja1R5cGUgewogICAgICAgICBMb2Nh
bFBoaVN0YWNrLApAQCAtMTA1LDEwICsxMTAsOCBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAg
ICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlv
bi4KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGVJbmRleCBnZXREaXJl
Y3QoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAKICAgICAgICAgLy8gSXMgdGhpcyBh
IGNvbnN0YW50PwogICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCkgewogICAgICAgICAgICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVyYW5kIC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC0xMjMsMTAgKzEyNiwxMiBAQCBwcml2YXRlOgogICAg
ICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVybiBnZXRMb2NhbCgodW5zaWdu
ZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlSW5kZXgg
dmFsdWUpCisgICAgTm9kZUluZGV4IGdldChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsK
KyAgICB9CisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
b3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHNldEFy
Z3VtZW50KG9wZXJhbmQsIHZhbHVlKTsKQEAgLTEzNiwxOCArMTQxLDM1IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9w
ZXJhbmQsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRl
eCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCksIHZhbHVlKTsKKyAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxl
bWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJp
YWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAg
ICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKG9wZXJhbmQpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
LSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAgTm9kZSog
bm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+
b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0
aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAgICAgICAg
IC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZh
bHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KKyAgICAg
ICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07
CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hD
aGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4
ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQ
dHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5v
ZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7
Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCA9PSBT
ZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlv
ciBibG9ja3MsCkBAIC0xNzksMjEgKzIwMSwzNCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9k
ZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dy
YXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsK
KyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3
YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90
IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgorICAgICAg
ICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KKyAgICAgICAgICAgICAgICBOb2Rl
JiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CisgICAgICAgICAgICAg
ICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChH
ZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVz
aENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFNl
dEFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVu
dCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKICAgICAgICAgICAgICAgICAvLyB0aGUg
R2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Ci0gICAg
ICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlUHRyLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFu
ZCkpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CiAgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9j
YWwpCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJU
KG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7
CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOworICAgICAgICAg
ICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShvcGVyYW5kKTsKQEAgLTIxNCw2ICsyNDksNTEgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFk
ZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkp
LCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2goaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJh
bmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OworICAg
ICAgICBpbnQgaW5kZXg7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkg
eworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOworICAgICAg
ICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChp
bmRleCk7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChu
b2RlLm9wID09IEZsdXNoIHx8IG5vZGUub3AgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJZiBhIGxvY2FsIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCwgb3IgaWYgaXQncyBh
biBhcmd1bWVudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBiYXNpYyBibG9jaywg
dGhlbiB0aGVyZSBpcyByZWFsbHkgbm8gbmVlZCB0byBmbHVzaCBpdC4gSW4gZmFjdAorICAgICAg
ICAgICAgICAgIC8vIGVtaXR0aW5nIGEgRmx1c2ggaW5zdHJ1Y3Rpb24gY291bGQganVzdCBjb25m
dXNlIHRoaW5ncywgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgLy8gZ2V0QXJndW1lbnQoKSBj
b2RlIGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBzZWUgYSBGbHVzaCBvZiBhIFNldEFyZ3VtZW50Lgor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSks
IG5vZGVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFw
aChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgbV9hcmd1
bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGlu
ZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3Vt
ZW50KGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpID0gbm9kZUluZGV4OworICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShp
bmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVy
YW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KICAg
ICBOb2RlSW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKQEAgLTY2Myw4ICs3NDMsNiBAQCBw
cml2YXRlOgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9hcmd1bWVudFBoaVN0YWNr
OwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9sb2NhbFBoaVN0YWNrOwogICAgIAot
ICAgIFZlY3RvcjxOb2RlKiwgMTY+IG1fcmV1c2FibGVOb2RlU3RhY2s7Ci0gICAgCiAgICAgc3Ry
dWN0IElubGluZVN0YWNrRW50cnkgewogICAgICAgICBCeXRlQ29kZVBhcnNlciogbV9ieXRlQ29k
ZVBhcnNlcjsKICAgICAgICAgCkBAIC02ODQsNyArNzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gQmxvY2tzIGludHJvZHVjZWQgYnkgdGhpcyBjb2RlIGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nl
c3NvciBsaW5raW5nLgogICAgICAgICAvLyBNYXkgaW5jbHVkZSB1cCB0byBvbmUgYmFzaWMgYmxv
Y2sgdGhhdCBpbmNsdWRlcyB0aGUgY29udGludWF0aW9uIGFmdGVyCiAgICAgICAgIC8vIHRoZSBj
YWxsc2l0ZSBpbiB0aGUgY2FsbGVyLgotICAgICAgICBWZWN0b3I8QmxvY2tJbmRleD4gbV91bmxp
bmtlZEJsb2NrczsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkQmxvY2s+IG1fdW5saW5rZWRCbG9j
a3M7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3
YXMgc3BsaXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFk
IG9mIHRoZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRv
IHRoZQpAQCAtNjkyLDIyICs3NzAsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYW55IGJsb2Nr
cyBpbiBtX3VubGlua2VkQmxvY2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCiAgICAg
ICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0ZUJsb2NrSGVhZDsKICAgICAgICAgCi0gICAgICAgIElu
bGluZVN0YWNrRW50cnkqIG1fY2FsbGVlOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1
cm5WYWx1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdl
IG5lZWQgdG8gaGFuZGxlIHRoZSAodW5jb21tb24gYnV0IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8g
Y2FzZSB3aGVyZSBhIHByb2NlZHVyZSB0aGF0IGRvZXMgbm90IHJldHVybiB3YXMgaW5saW5lZC4K
KyAgICAgICAgYm9vbCBtX2RpZFJldHVybjsKICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNr
RW50cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVW
Uik7CisgICAgICAgIC8vIERpZCB3ZSBoYXZlIGFueSBlYXJseSByZXR1cm5zPworICAgICAgICBi
b29sIG1fZGlkRWFybHlSZXR1cm47CisgICAgICAgIAorICAgICAgICBJbmxpbmVTdGFja0VudHJ5
KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAgICAgIElubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQ
YXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXgg
Y2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwgVmlydHVhbFJlZ2lz
dGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBsYXN0QXJnKTsKICAgICAgICAgCiAg
ICAgICAgIH5JbmxpbmVTdGFja0VudHJ5KCkKICAgICAgICAgewotICAgICAgICAgICAgbV9ieXRl
Q29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9IG1fY2FsbGVlOworICAgICAgICAgICAgbV9i
eXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9IG1fY2FsbGVyOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpbnQgcmVtYXBPcGVyYW5kKGludCBvcGVyYW5kKQorICAgICAgICBp
bnQgcmVtYXBPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5k
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25zdGFudFJlbWFwW29w
ZXJhbmQgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0gKyBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleDsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KSB7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IG1fY29uc3RhbnRSZW1hcFtv
cGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOworICAgICAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHJldHVybiBvcGVyYW5kICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAg
ICAgICB9CkBAIC03NTYsNiArODQ2LDE1MSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVN
aW5NYXgoYm9vbCB1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIGludCBjYWxsVGFyZ2V0LCBOb2RlSW5k
ZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFi
b3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbiwgaW50IGZp
cnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCkKK3sKKyAgICAvL1NhbXBs
aW5nRmxhZ3M6OlNjb3BlZEZsYWcgc2NvcGVkRmxhZygxOCk7CisKKyAgICAvLyBGaXJzdCwgdGhl
IHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZlIGFuIGFjdHVhbCBKUyBmdW5jdGlvbj8K
KyAgICBpZiAoIWV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZXhwZWN0ZWRGdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4cGVjdGVk
RnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOworICAgIAorICAgIC8vIERvZXMgdGhlIG51bWJlciBv
ZiBhcmd1bWVudHMgd2UncmUgcGFzc2luZyBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHRhcmdldD8g
V2UgY291bGQKKyAgICAvLyBpbmxpbmUgYXJpdHkgY2hlY2sgZmFpbHVyZXMsIGJ1dCBmb3Igc2lt
cGxpY2l0eSB3ZSBjdXJyZW50bHkgZG9uJ3QuCisgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZXhl
Y3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkgKyAxICE9IGxhc3RBcmcgLSBmaXJzdEFyZyArIDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBIYXZlIHdlIGV4Y2VlZGVkIGlu
bGluZSBzdGFjayBkZXB0aCwgb3IgYXJlIHdlIHRyeWluZyB0byBpbmxpbmUgYSByZWN1cnNpdmUg
Y2FsbD8KKyAgICAvLyBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGRldGVjdGVkLCB0aGVuIGRvbid0
IGlubGluZS4KKyAgICB1bnNpZ25lZCBkZXB0aCA9IDA7CisgICAgZm9yIChJbmxpbmVTdGFja0Vu
dHJ5KiBlbnRyeSA9IG1faW5saW5lU3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5tX2Nh
bGxlcikgeworICAgICAgICArK2RlcHRoOworICAgICAgICBpZiAoZGVwdGggPj0gSGV1cmlzdGlj
czo6bWF4aW11bUlubGluaW5nRGVwdGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERl
cHRoIGV4Y2VlZGVkLgorICAgICAgICAKKyAgICAgICAgaWYgKGVudHJ5LT5leGVjdXRhYmxlKCkg
PT0gZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVjdXJzaW9uIGRl
dGVjdGVkLgorICAgIH0KKyAgICAKKyAgICAvLyBEb2VzIHRoZSBjb2RlIGJsb2NrJ3Mgc2l6ZSBt
YXRjaCB0aGUgaGV1cmlzdGljcy9yZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAgLy8gYW4gaW5s
aW5lIGNhbmRpZGF0ZT8KKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBleGVjdXRhYmxl
LT5wcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2FsbChwcm9maWxlZEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gaXQgbG9va3MgbGlrZSB3ZSBzaG91bGQg
ZGVmaW5pdGVseSBpbmxpbmUgdGhpcyBjb2RlLiBQcm9jZWVkCisgICAgLy8gd2l0aCBwYXJzaW5n
IHRoZSBjb2RlIHRvIGdldCBieXRlY29kZSwgc28gdGhhdCB3ZSBjYW4gdGhlbiBwYXJzZSB0aGUg
Ynl0ZWNvZGUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBjb2RlIGJsb2NrIHdlIGdldCBoZXJlIGlz
IGludGVuZGVkIHRvIGRpZSBhZnRlciBoYW5kbGVJbmxpbmluZygpCisgICAgLy8gcmV0dXJucy4K
KyAgICBKU09iamVjdCogZXhjZXB0aW9uOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9j
ayA9IGV4ZWN1dGFibGUtPnByb2R1Y2VDb2RlQmxvY2tGb3IocHJvZmlsZWRCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCksIE9wdGltaXppbmdDb21waWxhdGlv
biwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgCisgICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSB0aGUgYnl0ZWNvZGUsIGNoZWNrIGlmIHdlIHJlYWxseSBjYW4gaW5saW5l
IGl0LiBUaGlzIG1heSBmYWlsCisgICAgLy8gaWYgdGhlIGNvZGUgYmxvY2sgY29udGFpbnMgc29t
ZSBuYXN0eSBvcGNvZGVzLgorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVC
bG9jay5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBOb3cgd2Ug
a25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBT
byBiZWdpbiB0aGUgcHJvY2VzcworICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5l
Y2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCisg
ICAgLy8gYXJlIGZsdXNoZWQuCisgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
KQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0
aW9uKSwgY2FsbFRhcmdldE5vZGVJbmRleCk7CisgICAgCisgICAgZmx1c2goY2FsbFRhcmdldCk7
CisgICAgZm9yIChpbnQgYXJnID0gZmlyc3RBcmcgKyAxOyBhcmcgPD0gbGFzdEFyZzsgKythcmcp
CisgICAgICAgIGZsdXNoKGFyZyk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFy
ZWEgdXNlZCBieSB0aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KKyAgICBmb3IgKGludCBhcmcg
PSBsYXN0QXJnICsgMSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVC
bG9jay0+bV9udW1WYXJzOyBhcmctLSA+IGxhc3RBcmcgKyAxOykKKyAgICAgICAgbV9wcmVzZXJ2
ZWRWYXJzLnNldChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoYXJnKSk7CisgICAgCisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggbG9jYWxzLgorICAgIHVuc2lnbmVk
IG5ld051bUxvY2FscyA9IGxhc3RBcmcgKyAxICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBpZiAobmV3TnVt
TG9jYWxzID4gbV9udW1Mb2NhbHMpIHsKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2Nh
bHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOworICAgIH0KKworICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tF
bnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdp
c3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGxh
c3RBcmcpKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcg
cmVhbGx5IGhhcHBlbnMuCisgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsK
KyAgICBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgcGFyc2VDb2RlQmxvY2soKTsKKyAgICBtX2N1
cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIAorICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUg
Y3JlYXRlZCBzb21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRv
LgorICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAgICAgICBsaW5rQmxv
Y2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWRd
LmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgICAgICBBU1NF
UlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9i
bG9ja0luZGV4ID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAg
ICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxh
c3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyk7CisgICAgICAgIGlubGluZVN0YWNrRW50cnkubV9j
YWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxp
bmtlZEJsb2Nrcyk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSB3YXMg
YSByZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93
IHBhcnNpbmcgb2YKKyAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJh
c2ljIGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5vdy4KKyAgICBpZiAoIWlubGluZVN0YWNrRW50cnku
bV9kaWRFYXJseVJldHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgp
OworICAgICAgICBBU1NFUlQobGFzdEJsb2NrLT5iZWdpbiA9PSBsYXN0QmxvY2stPmVuZCB8fCAh
bV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdl
IGNyZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1
dCBpbiB0aGUKKyAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2Vk
IHRvLCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCisgICAgICAgIGlmICghaW5saW5lU3Rh
Y2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gR2l2
ZSBpdCBhIHZhbHVlIHRoYXQgd29uJ3QgcGVydHVyYiBiaW5hcnkgc2VhcmNoLCBhbmQgd29uJ3Qg
YmUgZm91bmQuIFRoaXMgd291bGQKKyAgICAgICAgICAgIC8vIGZhaWwgaWYgb3BfY2FsbCBjb3Vs
ZCBhcHBlYXIgYXQgdGhlIGhlYWQgb2YgYSBiYXNpYyBibG9jay4gVGhhdCBzaG91bGRuJ3QgaGFw
cGVuLAorICAgICAgICAgICAgLy8gZ2l2ZW4gdGhlIHdheSB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9y
IHdvcmtzLgorICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50
SW5kZXg7CisgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFj
a1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5
dGVjb2RlQmVnaW4gPCBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4pOworICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2Vk
QmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgdG8g
dGhpcyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0IG9mIHRlcm1p
bmFscy4KKyAgICBBU1NFUlQobV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAKKyAg
ICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9jayB3ZSdyZSBhYm91
dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbmxpbmVTdGFj
a0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZykKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1fYmxvY2tJbmRl
eF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOworICAgICAgICBBU1NFUlQobm9kZS5v
cCA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0luZGV4KCkgPT0gTm9C
bG9jayk7CisgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpKTsKKyAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisg
ICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAg
Ly8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250aW51YXRpb24g
YXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihu
ZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX2dyYXBoLnNpemUoKSwgbV9udW1Bcmd1bWVudHMs
IG1fbnVtTG9jYWxzKSk7CisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKKyAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zm
c2V0KTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5h
cHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOworICAgIG1fZ3Jh
cGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgCisgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSByZXR1cm4gYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBj
YWxsZXIsIGJ1dAorICAgIC8vIGluIHRoZSBuZXcgYmFzaWMgYmxvY2suCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNS
ZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgZmlyc3RB
cmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgc3dpdGNo
IChpbnRyaW5zaWMpIHsKQEAgLTg1Myw3ICsxMDg4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxv
Y2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8g
dXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFy
Z3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0
IGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1sw
XS5nZXQoKSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFw
aChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVudCAtIG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUpKSk7CkBAIC04NjksNyArMTEwNCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gRG9uJ3QgZXh0
ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9
PSBsaW1pdCkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50
SW5kZXgpKTsKKyAgICAgICAgICAgIC8vIE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1
bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhpcyBpZiB0aGUgYmxvY2sgaXMKKyAgICAgICAgICAgIC8v
IGVtcHR5LiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBpbmxpbmluZywgd2hpY2ggbWlnaHQg
b3RoZXJ3aXNlIGNyZWF0ZQorICAgICAgICAgICAgLy8gc29tZSBlbXB0eSBibG9ja3MgaW4gc29t
ZSBjYXNlcy4gV2hlbiBwYXJzZUJsb2NrKCkgcmV0dXJucyB3aXRoIGFuIGVtcHR5CisgICAgICAg
ICAgICAvLyBibG9jaywgaXQgd2lsbCBnZXQgcmVwdXJwb3NlZCBpbnN0ZWFkIG9mIGNyZWF0aW5n
IGEgbmV3IG9uZS4KKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jay0+YmVnaW4gIT0gbV9n
cmFwaC5zaXplKCkpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9j
dXJyZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTE2MjEsMTAgKzE4NjEsMjkgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9yZXQ6
CisgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSAhPSBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9p
bmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZFJldHVy
biA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3VubGlu
a2VkQmxvY2tzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBpbmxpbmlu
ZyBjcmVhdGVkIGJsb2NrcywgYW5kIHdlJ3JlIGRvaW5nIGEgcmV0dXJuLCB0aGVuIHdlIG5lZWQg
c29tZQorICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGxpbmtpbmcuCisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9u
ZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpICE9IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgfHwgbV9pbmxp
bmVTdGFja1RvcC0+bV9kaWRFYXJseVJldHVybikgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3JldCkgPD0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKE5vQmxvY2spKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc0Vh
cmx5UmV0dXJuTGlua2luZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZGlkRWFybHlSZXR1cm4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfZW5kOgorICAgICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5t
X2lubGluZUNhbGxGcmFtZSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RF
KG9wX2VuZCk7CiAKQEAgLTE2NDAsOSArMTg5OSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVudW0geyBD
b25zdGFudEZ1bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5
cGU7CiAgICAgICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAg
ICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAldS5c
biIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJ
bmRleCktPm1fY291bnRlcik7CisjZW5kaWYKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAg
ICAgICAgICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50RnVuY3Rpb247Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5m
byhtX2N1cnJlbnRJbmRleCkuaXNMaW5rZWQoKSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpCisgICAgICAg
ICAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2Fs
bExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkp
CiAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKQEAgLTE2
NTUsMjUgKzE5MTgsMzggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSByZXN1bHQ/CiAgICAgICAgICAgICAg
ICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdE9w
ZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVyIGhhcHB5CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
ICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogICAgICAgICAgICAgICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwogICAgICAgICAgICAgICAgIGlmIChp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9j
YWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgICAgICAgICAgdXNlc1Jlc3Vs
dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkp
OworICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbihtX2dyYXBo
LnNpemUoKSwgbmV4dE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIG5leHRPZmZzZXQgKz0g
T1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9yZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uOwogICAgICAgICAgICAg
ICAgIERGRzo6SW50cmluc2ljIGludHJpbnNpYzsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikKLSAgICAgICAgICAgICAgICAgICAgaW50cmluc2ljID0g
bV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCkt
PmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uOworICAgICAgICAg
ICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFudEZ1bmN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2dyYXBoLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50
KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaW50cmluc2lj
ID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09
IExpbmtlZEZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyht
X2N1cnJlbnRJbmRleCkuY2FsbGVlLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpbnRyaW5z
aWMgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9uKSwgY2FsbFRhcmdl
dCk7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFz
dFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVj
dGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7CisgICAgICAgICAgICAgICAg
ICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNp
Yyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIGZpcnN0QXJnLCBsYXN0QXJn
LCBwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRy
aW5zaWMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1
bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9u
LCBPcEluZm8oZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyh1c2VzUmVzdWx0
LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIGZpcnN0QXJnLCBsYXN0QXJnLCBwcmVkaWN0aW9u
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTkVYVF9PUENPREUoKSBoYXMgdG8gYmUg
aW5zaWRlIGJyYWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICho
YW5kbGVJbmxpbmluZyh1c2VzUmVzdWx0LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5kLCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
LCBleHBlY3RlZEZ1bmN0aW9uLCBmaXJzdEFyZywgbGFzdEFyZywgbmV4dE9mZnNldCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gTkVYVF9PUENPREUoKSBoYXMgdG8gYmUgaW5zaWRlIGJyYWNl
cy4KICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTczMiw3ICsyMDA4LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIC8vIGFyZSBjb21wYXRpYmxlLgogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChibG9ja0JlZ2luLCBtX2N1cnJlbnRJbmRleCA9PSBibG9ja0JlZ2lu
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIG5ldmVyIGRvIE9TUiBpbnRvIGFuIGlubGluZWQg
Y29kZSBibG9jay4gVGhhdCBjb3VsZCBub3QgaGFwcGVuLCBzaW5jZSBPU1IKKyAgICAgICAgICAg
IC8vIGxvb2tzIHVwIHRoZSBjb2RlIGJsb2NrIHRoYXQgaXMgdGhlIHJlcGxhY2VtZW50IGZvciB0
aGUgYmFzZWxpbmUgSklUIGNvZGUKKyAgICAgICAgICAgIC8vIGJsb2NrLiBIZW5jZSwgbWFjaGlu
ZSBjb2RlIGJsb2NrID0gdHJ1ZSBjb2RlIGJsb2NrID0gbm90IGlubGluZSBjb2RlIGJsb2NrLgor
ICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlcikKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CkBAIC0xNzg0
LDcgKzIwNjQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5jaGlsZDEoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwg
bV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBo
aVN0YWNrKSk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
Lm9wID09IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkg
fHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEZsdXNoIHx8IChtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3Vt
ZW50UGhpU3RhY2spKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiBkYXRhRm9yUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAKQEAgLTE4MjUsOSArMjEwNSwxMSBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgIH0KIH0KIAotdm9pZCBC
eXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8QmxvY2tJ
bmRleD4mIHBvc3NpYmxlVGFyZ2V0cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhC
YXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFVubGlua2VkQmxvY2s+JiBwb3NzaWJsZVRhcmdldHMp
CiB7CiAgICAgQVNTRVJUKGJsb2NrLT5lbmQgIT0gTm9Ob2RlKTsKKyAgICBBU1NFUlQoIWJsb2Nr
LT5pc0xpbmtlZCk7CisgICAgQVNTRVJUKGJsb2NrLT5lbmQgPiBibG9jay0+YmVnaW4pOwogICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAxXTsKICAgICBBU1NFUlQobm9kZS5p
c1Rlcm1pbmFsKCkpOwogICAgIApAQCAtMTg0NCwyNyArMjEyNiw1MyBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBibG9jay0+aXNMaW5rZWQg
PSB0cnVlOworI2VuZGlmCit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVj
dG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcykKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh1bmxp
bmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykgeworICAgICAgICAgICAgbGlua0Js
b2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4XS5nZXQo
KSwgdW5saW5rZWRCbG9ja3MpOworICAgICAgICAgICAgdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVk
c05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBCeXRl
Q29kZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJbmRleD4mIHVubGlua2VkQmxvY2tz
KQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4
LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vz
c29ySW5kZXgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5z
aXplKCk7ICsraSkKLSAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRC
bG9ja3NbaV1dLmdldCgpLCB1bmxpbmtlZEJsb2Nrcyk7CisgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yID0gbV9ncmFwaC5tX2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7CisgICAgaWYgKCFz
dWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUg
PSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5kZXgpOworICAgIH0K
KyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsK
IH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3NvcnMoKQordm9pZCBCeXRl
Q29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKLSAgICBmb3IgKEJsb2NrSW5k
ZXggaW5kZXggPSAwOyBpbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2luZGV4KSB7
CisgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBl
bmQoMCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOworICAg
IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrSW5kZXggaW5kZXgg
PSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmRleF0u
Z2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+ZW5kICE9IE5vTm9kZSk7CisgICAgICAgIEFT
U0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkp
OwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIG1f
Z3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFw
cGVuZChpbmRleCk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4
LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5j
aCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4
KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5t
X2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5k
KGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5v
ZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmts
aXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0xODc3LDMwICsyMTg1LDM1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3Bl
cmFuZE1hcHNJZk4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgbV9pZGVudGlmaWVyTWFwLmFkZChtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKQotICAg
ICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkpOworICAgICAgICBtX2pz
VmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSAr
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCk7CiAgICAgCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CiAKLUJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2Rl
UGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVhbFJlZ2lz
dGVyIGNhbGxlZVZSKQorQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0
YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tI
ZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1
ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgbGFzdEFyZykKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0
ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2Zp
bGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNp
dGVCbG9ja0hlYWQpCi0gICAgLCBtX2NhbGxlZShieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFj
a1RvcCkKKyAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFsdWVWUikKKyAgICAsIG1fZGlkUmV0
dXJuKGZhbHNlKQorICAgICwgbV9kaWRFYXJseVJldHVybihmYWxzZSkKKyAgICAsIG1fY2FsbGVy
KGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQogewotICAgIGlmIChtX2NhbGxlZSkg
eworICAgIGlmIChtX2NhbGxlcikgewogICAgICAgICAvLyBJbmxpbmUgY2FzZS4KICAgICAgICAg
QVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAg
ICBBU1NFUlQoY2FsbGVlVlIgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFT
U0VSVChsYXN0QXJnICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBBU1NFUlQo
Y2FsbHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAgICAgIAogICAgICAgICBJbmxpbmVD
YWxsRnJhbWUgaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuZXhlY3V0
YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7Ci0gICAgICAgIGlubGluZUNhbGxG
cmFtZS5zdGFja09mZnNldCA9IG1fY2FsbGVlLT5tX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdp
c3RlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IGxhc3RBcmcgKyAx
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBpbmxpbmVDYWxs
RnJhbWUuY2FsbGVlVlIgPSBjYWxsZWVWUjsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxl
ciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdpbigpOwogICAgICAgICBpbmxpbmVD
YWxsRnJhbWUubnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA9IGNvZGVCbG9jay0+bV9udW1QYXJh
bWV0ZXJzOworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuaXNDYWxsID0gdHJ1ZTsKICAgICAgICAg
Ynl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkuYXBwZW5kKGlu
bGluZUNhbGxGcmFtZSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gJmJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1lcygpLmxhc3QoKTsKICAgICAgICAgCkBA
IC0xOTE4LDE1ICsyMjMxLDE5IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJ
bmxpbmUKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsKICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgICAgICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9yLCBib29sPiBy
ZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpLCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKQorICAg
ICAgICAgICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gYnl0ZUNv
ZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgYnl0ZUNv
ZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgKyBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICBpZiAocmVzdWx0LnNlY29uZCkg
ewogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+YWRkQ29uc3Rh
bnQodmFsdWUpOworICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0YW50cy5h
cHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2Nv
bnN0YW50UmVtYXBbaV0gPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgogICAgICAgICBBU1NF
UlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAgICAgICAgIEFT
U0VSVChjYWxsZWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJU
KHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VS
VChsYXN0QXJnID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBBU1NFUlQoY2Fs
bHNpdGVCbG9ja0hlYWQgPT0gTm9CbG9jayk7CiAKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUg
PSAwOwpAQCAtMTkzNyw5ICsyMjU0LDEyIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmUKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51
bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBb
aV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBb
aV0gPSBpOworICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gaSArIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OwogICAgIH0KICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY29uc3RhbnRSZW1hcC5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRS
ZW1hcFtpXSA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgCiAgICAgYnl0ZUNv
ZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwogfQogCkBAIC0xOTU0LDE3ICsyMjc0
LDM1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgICAgICAv
LyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0
YXJnZXQpLgogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxv
Y2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5zaXpl
KCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOwotICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5s
aW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAgICAgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2Fu
IHVzZSB0aGUgbGFzdCBibG9jay4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9ibG9j
a3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5iZWdpbiA9PSBtX2dyYXBo
Lm1fYmxvY2tzLmxhc3QoKS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVz
dCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0byB1cy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9
PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAvLyBD
aGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJ
bmRleDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBPd25Q
dHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJ
bmRleCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOworICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0Vt
cHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxv
Y2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgp
OworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tz
LmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIXBhcnNl
QmxvY2sobGltaXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IC8vIFdlIHNob3VsZCBub3QgaGF2ZSBnb25lIGJleW9uZCB0aGUgbGltaXQuCiAgICAgICAgICAg
ICBBU1NFUlQobV9jdXJyZW50SW5kZXggPD0gbGltaXQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBXZSBzaG91bGQgaGF2ZSBwbGFudGVkIGEgdGVybWluYWwsIG9yIHdlIGp1c3QgZ2F2
ZSB1cCBiZWNhdXNlCisgICAgICAgICAgICAvLyB3ZSByZWFsaXplZCB0aGF0IHRoZSBqdW1wIHRh
cmdldCBpbmZvcm1hdGlvbiBpcyBpbXByZWNpc2UsIG9yIHdlCisgICAgICAgICAgICAvLyBhcmUg
YXQgdGhlIGVuZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24uCisgICAgICAgICAgICBBU1NFUlQobV9j
dXJyZW50QmxvY2stPmJlZ2luID09IG1fZ3JhcGguc2l6ZSgpIHx8IG1fZ3JhcGgubGFzdCgpLmlz
VGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5zaXplKCkgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpKTsKIAogICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2sgPSAwOwogICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8
IGxpbWl0KTsKICAgICB9CiAKQEAgLTE5NzksMTIgKzIzMTcsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgogICAgIEFTU0VS
VCghbV9jdXJyZW50SW5kZXgpOwogICAgIAotICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3Rh
Y2tFbnRyeSh0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2NrLCBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50
cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxpZFZp
cnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIGxpbmtCbG9ja3MoaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsKLSAgICBzZXR1cFByZWRlY2Vzc29ycygp
OworICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHByb2Nlc3NQaGlTdGFjazxMb2Nh
bFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkocmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLWJvb2wgY2Fu
Q29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit0ZW1wbGF0ZTxib29sICgqY2Fu
SGFuZGxlT3Bjb2RlKShPcGNvZGVJRCk+Citib29sIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2Nr
LT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKQEAgLTQzLDcgKzQ0
LDcgQEAgYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbAogICAgICAgICBz
d2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29k
ZU9mZnNldF0udS5vcGNvZGUpKSB7CiAjZGVmaW5lIERFRklORV9PUChvcGNvZGUsIGxlbmd0aCkg
ICAgICAgICAgIFwKICAgICAgICAgY2FzZSBvcGNvZGU6ICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICAgICAgaWYgKCFjYW5Db21waWxlT3Bjb2RlKG9wY29kZSkpICBcCisgICAgICAg
ICAgICBpZiAoIWNhbkhhbmRsZU9wY29kZShvcGNvZGUpKSAgXAogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBieXRlY29kZU9mZnNldCAr
PSBsZW5ndGg7ICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTgsNiArNTksMTYgQEAg
Ym9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbAogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbkNvbXBpbGVPcGNvZGU+KGNvZGVCbG9jayk7
Cit9CisKK2Jvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5JbmxpbmVPcGNvZGU+KGNvZGVCbG9jayk7Cit9
CisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDk3ODgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMjAgKzI2LDQyIEBACiAjaWZuZGVmIERGR0NhcGFiaWxpdGllc19oCiAjZGVmaW5l
IERGR0NhcGFiaWxpdGllc19oCiAKKyNpbmNsdWRlICJERkdJbnRyaW5zaWMuaCIKKyNpbmNsdWRl
ICJERkdOb2RlLmgiCisjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgogI2luY2x1ZGUgIkludGVycHJl
dGVyLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLSNpbmNsdWRlICJERkdOb2RlLmgi
Ci0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklU
KQogLy8gRmFzdCBjaGVjayBmdW5jdGlvbnM7IGlmIHRoZXkgcmV0dXJuIHRydWUgaXQgaXMgc3Rp
bGwgbmVjZXNzYXJ5IHRvCiAvLyBjaGVjayBvcGNvZGVzLgotaW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlRXZhbChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENv
bXBpbGVQcm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KLWlubGluZSBib29sIG1p
Z2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1p
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7
IHJldHVybiB0cnVlOyB9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayog
Y29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8
PSBIZXVyaXN0aWNzOjptYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9u
Q291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29k
ZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBI
ZXVyaXN0aWNzOjptYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9u
Q291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3Vu
dCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5k
aWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rp
b25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZv
ckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CisKK2lu
bGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0
aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dDsKK30KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJs
b2NrKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIE9wY29kZSBjaGVja2luZy4KIGlu
bGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC0xNDYsMTQg
KzE2OCw0NSBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAg
fQogfQogCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7
CisgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAKKyAgICAvLyBUaGVzZSBvcGNvZGVz
IHdvdWxkIGJlIGVhc3kgdG8gc3VwcG9ydCB3aXRoIGlubGluaW5nLCBidXQgd2UgY3VycmVudGx5
IGRvbid0IGRvIGl0LgorICAgIC8vIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBzY29wZSBjaGFpbiB3
aWxsIG5vdCBiZSBzZXQgY29ycmVjdGx5LgorICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6Cisg
ICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9wX3Jlc29sdmU6CisgICAgY2Fz
ZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKKyAgICAgICAg
CisgICAgLy8gVHJpdmlhbCB0byBzdXBwb3J0IHdpdGggdGhlIGNvcHkgcHJvcGFnYXRpb24gbWFj
aGluZSB3ZSBhbHJlYWR5IGhhdmUsIGJ1dCB0aGUgZ2x1ZQorICAgIC8vIGlzbid0IHRoZXJlLCB5
ZXQuCisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgICAgICAKKyAgICAvLyBJbmxpbmluZyBk
b2Vzbid0IGNvcnJlY3RseSByZW1hcCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCisgICAg
Y2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKTsKKyAg
ICB9Cit9CisKIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKik7Citib29sIGNhbklu
bGluZU9wY29kZXMoQ29kZUJsb2NrKik7CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIGlubGlu
ZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlu
bGluZSBib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7
IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7
IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25z
dHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIG1pZ2h0SW5s
aW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sq
KSB7IHJldHVybiBmYWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29k
ZUlEKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29k
ZUlEKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29k
ZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29kZXMo
Q29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
IAogaW5saW5lIGJvb2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0x
NzYsNiArMjI5LDE2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnUK
ICAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAm
JiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitpbmxpbmUgYm9vbCBjYW5Jbmxp
bmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1p
Z2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5saW5lT3Bjb2Rlcyhj
b2RlQmxvY2spOworfQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlv
bkZvckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gREZHQ2FwYWJpbGl0
aWVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlz
aW9uIDk3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIGVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9
OwogaW5saW5lIGJvb2wgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRl
KiBleGVjLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
SklUQ29kZSYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spCiB7CisgICAgLy9TYW1wbGluZ0ZsYWdzOjpTY29wZWRGbGFnIHNjb3BlZEZsYWcoMTcp
OworICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRh
KCk7CiAgICAgR3JhcGggZGZnOwogICAgIGlmICghcGFyc2UoZGZnLCBnbG9iYWxEYXRhLCBjb2Rl
QmxvY2spKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDk3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDQ2IEBAIGNvbnN0IGNoYXIqIEdyYXBoOjpuYW1lT2ZW
YXJpYWJsZUFjY2Vzc0QKICAgICByZXR1cm4gYnVmOwogfQogCitzdGF0aWMgdm9pZCBwcmludFdo
aXRlU3BhY2UodW5zaWduZWQgYW1vdW50KQoreworICAgIHdoaWxlIChhbW91bnQtLSA+IDApCisg
ICAgICAgIHByaW50ZigiICIpOworfQorCit2b2lkIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihOb2Rl
SW5kZXggbm9kZUluZGV4KQoreworICAgIGlmICghbm9kZUluZGV4KQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgTm9kZSYgY3VycmVudE5vZGUgPSBhdChub2RlSW5kZXgpOworICAgIE5vZGUm
IHByZXZpb3VzTm9kZSA9IGF0KG5vZGVJbmRleCAtIDEpOworICAgIGlmIChwcmV2aW91c05vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gY3VycmVudE5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8Q29kZU9yaWdp
bj4gcHJldmlvdXNJbmxpbmVTdGFjayA9IHByZXZpb3VzTm9kZS5jb2RlT3JpZ2luLmlubGluZVN0
YWNrKCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9IGN1cnJl
bnROb2RlLmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKKyAgICB1bnNpZ25lZCBjb21tb25TaXpl
ID0gc3RkOjptaW4ocHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCksIGN1cnJlbnRJbmxpbmVTdGFj
ay5zaXplKCkpOworICAgIHVuc2lnbmVkIGluZGV4T2ZEaXZlcmdlbmNlID0gY29tbW9uU2l6ZTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tbW9uU2l6ZTsgKytpKSB7CisgICAgICAg
IGlmIChwcmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSAhPSBjdXJyZW50SW5s
aW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpbmRleE9mRGl2ZXJn
ZW5jZSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyBQcmludCB0aGUgcG9wcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmV2aW91c0lubGlu
ZVN0YWNrLnNpemUoKTsgaS0tID4gaW5kZXhPZkRpdmVyZ2VuY2U7KSB7CisgICAgICAgIHByaW50
V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50ZigiPC0tICVwXG4iLCBwcmV2aW91c0lu
bGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZSk7CisgICAgfQorICAgIAor
ICAgIC8vIFByaW50IHRoZSBwdXNoZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gaW5kZXhPZkRp
dmVyZ2VuY2U7IGkgPCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
cHJpbnRXaGl0ZVNwYWNlKGkgKiAyKTsKKyAgICAgICAgcHJpbnRmKCItLT4gJXBcbiIsIGN1cnJl
bnRJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpOworICAgIH0KK30K
Kwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4KTsKQEAgLTkxLDYgKzEzMSw5
IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgQVNT
RVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKICAgICB9CisgICAgCisgICAgZHVt
cENvZGVPcmlnaW4obm9kZUluZGV4KTsKKyAgICBwcmludFdoaXRlU3BhY2UoKG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVEZXB0aCgpIC0gMSkgKiAyKTsKIAogICAgIC8vIEV4YW1wbGUvZXhwbGFuYXRp
b24gb2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtMjQwLDcgKzI4Myw3IEBAIHZv
aWQgR3JhcGg6OmR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgZm9yIChzaXplX3Qg
YiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwotICAgICAgICBwcmludGYoIkJsb2NrICMldSAoYmMj
JXUpOiAgJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc09TUlRh
cmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKKyAgICAgICAgcHJpbnRmKCJCbG9jayAjJXUg
KGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlz
UmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9T
UiB0YXJnZXQpIiA6ICIiKTsKICAgICAgICAgcHJpbnRmKCIgIHZhcnM6ICIpOwogICAgICAgICBp
ZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2st
PnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHJldmlzaW9uIDk3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDEzIEBAIHB1YmxpYzoKICAgICAv
LyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZvcm1h
dGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBkdW1w
KENvZGVCbG9jayogPSAwKTsKICAgICB2b2lkIGR1bXAoTm9kZUluZGV4LCBDb2RlQmxvY2sqID0g
MCk7CisKKyAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBh
IGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCisgICAgLy8gcHJlY2VkaW5nIG5vZGUu
CisgICAgdm9pZCBkdW1wQ29kZU9yaWdpbihOb2RlSW5kZXgpOwogI2VuZGlmCiAKLSAgICBCbG9j
a0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJs
b2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CisgICAgQmxvY2tJbmRleCBibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFVubGlua2VkQmxvY2s+JiBibG9ja3MsIHVuc2lnbmVk
IGJ5dGVjb2RlQmVnaW4pOwogCiAgICAgYm9vbCBwcmVkaWN0R2xvYmFsVmFyKHVuc2lnbmVkIHZh
ck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKQEAgLTI0OCwxOCArMjUy
LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG9wZXJhdG9y
KCkoQmxvY2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKKyAgICB1bnNpZ25lZCBvcGVyYXRvcigp
KFVubGlua2VkQmxvY2sqIHVubGlua2VkQmxvY2spIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9ncmFwaC5tX2Jsb2Nrc1sqYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW47CisgICAgICAg
IHJldHVybiBtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2stPm1fYmxvY2tJbmRleF0tPmJ5
dGVjb2RlQmVnaW47CiAgICAgfQogCiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwogfTsK
IAotaW5saW5lIEJsb2NrSW5kZXggR3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChW
ZWN0b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbikKK2lubGlu
ZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFVu
bGlua2VkQmxvY2s+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCiB7Ci0gICAgcmV0
dXJuICpXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2NrSW5kZXgsIHVuc2lnbmVkPihi
bG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlNdXN0
QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSk7CisgICAg
cmV0dXJuIFdURjo6YmluYXJ5U2VhcmNoV2l0aEZ1bmN0b3I8VW5saW5rZWRCbG9jaywgdW5zaWdu
ZWQ+KGJsb2Nrcy5iZWdpbigpLCBibG9ja3Muc2l6ZSgpLCBieXRlY29kZUJlZ2luLCBXVEY6Oktl
eU11c3RCZVByZXNlbnRJbkFycmF5LCBHZXRCeXRlY29kZUJlZ2luRm9yQmxvY2soKnRoaXMpKS0+
bV9ibG9ja0luZGV4OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTc4
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25z
dCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQordm9pZCBKSVRDb21waWxl
cjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlv
blJlY292ZXJ5KiByZWNvdmVyeSkKIHsKICAgICAvLyAxKSBQcm8tZm9ybWEgc3R1ZmYuCiAgICAg
ZXhpdC5tX2NoZWNrLmxpbmsodGhpcyk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBK
SVQgb2Zmc2V0IDB4JXggICIsIChpbnQpZXhpdC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2Rl
SW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9y
IE5vZGUgQCVkICgiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgpOworICAgIGZvciAoQ29kZU9yaWdp
biBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJi
YyMldSIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUp
OworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIikgYXQgSklUIG9mZnNldCAweCV4ICAiLCBk
ZWJ1Z09mZnNldCgpKTsKICAgICBleGl0LmR1bXAoc3RkZXJyKTsKICNlbmRpZgogI2lmIERGR19F
TkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQpAQCAtNDgyLDE5ICs0ODksNTUgQEAg
dm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIGlmIChleGl0Lm1f
bGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVy
YW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAotICAgIC8vIDEzKSBG
aXggY2FsbCBmcmFtZS4KKyAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUocykuCiAgICAgCiAgICAg
QVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxl
OjpDb2RlQmxvY2spKTsKICAgICAKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4
aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9y
KGNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOworICAg
ICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBk
ZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7CisgICAgICAgIHVu
c2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRl
Y29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAgICAgICAgQnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRl
eD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5C
eXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICAg
ICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JD
YWxsZXItPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZz
ZXQpOworCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVlVlIpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihK
U0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICBHUFJS
ZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5p
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGFkZFB0cihJbW0zMihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMyk7Cisg
ICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXI7CisgICAgICAgIAorICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29k
ZUJsb2NrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKSk7CisgICAgICAgIHN0b3JlUHRy
KEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlNjb3BlQ2hhaW4pKSk7CisgICAgICAg
IHN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkp
OworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3Rl
ckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihpbmxpbmVDYWxsRnJhbWUtPm51bUFyZ3VtZW50c0luY2x1ZGlu
Z1RoaXMpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDEsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAgIH0K
KyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cik7CisgICAgCiAgICAgLy8gMTQpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGlu
ZSBKSVQgY29kZS4KICAgICAKLSAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcg
PSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdp
bigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5t
X2NvZGVPcmlnaW4pOworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcCA9IGRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKKyAgICAK
KyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAgIEFT
U0VSVChtYXBwaW5nKTsKLSAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4
aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4
ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgIAotICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVENvZGUoKS5zdGFydCgpKSAr
IG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxp
bmVDb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNv
ZGVPZmZzZXQpOwogICAgIAogICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpj
YWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCkBAIC01MDYsMjAgKzU0OSwyOCBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAjZW5kaWYKIH0KIAotdm9pZCBKSVRD
b21waWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKK1ZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBKSVRDb21waWxlcjo6ZGVjb2RlZENvZGVNYXBG
b3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7Ci0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5h
dGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOwotICAgIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1hcCk7CisgICAgQVNTRVJUKGNv
ZGVCbG9jayA9PSBjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKTsKKyAgICBBU1NFUlQoY29k
ZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VS
VChjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisgICAgCisgICAgc3RkOjpwYWlyPEhhc2hNYXA8
Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPjo6aXRlcmF0b3Is
IGJvb2w+IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBzLmFkZChjb2RlQmxvY2ssIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOworICAgIAorICAgIGlmIChyZXN1bHQuc2Vjb25k
KQorICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAoKS0+ZGVjb2RlKHJlc3VsdC5maXJzdC0+
c2Vjb25kKTsKICAgICAKKyAgICByZXR1cm4gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7Cit9CisKK3Zv
aWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUp
Cit7CiAgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUu
b3NyRXhpdHMoKS5iZWdpbigpOwogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5k
ID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKICAgICAKICAgICB3aGlsZSAoZXhpdHNJ
dGVyICE9IGV4aXRzRW5kKSB7CiAgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJ
dGVyOwotICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNw
ZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29kZU1hcCk7
CisgICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3VsYXRpdmUuc3BlY3Vs
YXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCkpOwogICAgICAgICArK2V4aXRzSXRl
cjsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiA5Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDI3LDggKzQyNywyMSBAQCBwcml2YXRl
OgogICAgIHZvaWQgY29tcGlsZUJvZHkoKTsKICAgICB2b2lkIGxpbmsoTGlua0J1ZmZlciYpOwog
Ci0gICAgdm9pZCBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxh
dGlvblJlY292ZXJ5KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRD
b2RlTWFwKTsKKyAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYs
IFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2
ZUpJVCYpOworICAgIAorICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZTsKKyAgICAgICAgICAgIEFT
U0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6c19pbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVj
dCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgp
ID09IGNvZGVCbG9jaygpLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgICAgIHJldHVybiBjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwogCiAgICAg
Ly8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2
UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKQEAgLTQzOCw3ICs0NTEsOSBA
QCBwcml2YXRlOgogCiAgICAgLy8gVGhlIGNvZGVCbG9jayBjdXJyZW50bHkgYmVpbmcgZ2VuZXJh
dGVkLCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1hdGlvbiBzdWNoIGFzIGNvbnN0YW50IHZhbHVlcywg
aW1tZWRpYXRlcy4KICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwotCisgICAgCisgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+IG1fZGVj
b2RlZENvZGVNYXBzOworICAgIAogICAgIC8vIFZlY3RvciBvZiBjYWxscyBvdXQgZnJvbSBKSVQg
Y29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBoYW5kbGVyIGluZm9ybWF0aW9uLgogICAgIC8vIENv
dW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJlY29yZHMgd2l0aCBleGNlcHRpb24gaGFuZGxlcnMu
CiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1fY2FsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSw3IEBAIHN0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2RlRmxhZ3MKICAgICBtYWNybyhTZXRMb2NhbCwgMCkg
XAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGks
IDApIFwKKyAgICBtYWNybyhGbHVzaCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAv
KiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBzZXQuICovXAogICAgIG1hY3JvKFNldEFyZ3Vt
ZW50LCAwKSBcCkBAIC00ODUsNiArNDg2LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNl
IFNldExvY2FsOgogICAgICAgICBjYXNlIFBoaToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
KyAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODM2LDcgKzgzOCw3IEBAIHN0
cnVjdCBOb2RlIHsKIAogICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0gUGhpOworICAgICAgICByZXR1cm4gbV9yZWZDb3Vu
dCAmJiBvcCAhPSBQaGkgJiYgb3AgIT0gRmx1c2g7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcmVm
Q291bnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2
aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDE4ICs2NCwzMSBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwo
c2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2Fs
KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB2
b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDw9
IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3Qg
b2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgbV9sb2NhbHMucmVzaXplKHNpemUp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkpIHsKLSAgICAgICAg
ICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9sb2Nh
bHMucmVzaXplKGlkeCArIDEpOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7
IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9
IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJlTG9jYWxz
KGlkeCArIDEpOwogICAgICAgICAKICAgICAgICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOwogICAg
IH0KICAgICAKKyAgICBUIGdldExvY2FsKHNpemVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAo
aWR4ID49IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBUcmFpdHM6OmRlZmF1
bHRWYWx1ZSgpOworICAgICAgICByZXR1cm4gbV9sb2NhbHNbaWR4XTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCShyZXZpc2lvbiA5Nzg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3OCw2ICs1NzgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFJldHVybjoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgog
ICAgICAgICBjYXNlIFBoaToKKyAgICAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgY2FzZSBUaHJv
dzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNl
T1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAko
cmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzgsNiArNjM4LDcgQEAgdm9pZCBkZmdMaW5rRm9yKEV4
ZWNTdGF0ZSogZXhlYywgQ2FsbExpbgogICAgIGlmICghY2FsbGVlQ29kZUJsb2NrIHx8IHN0YXRp
Y19jYXN0PGludD4oZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgPT0gY2FsbGVl
Q29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpIHsKICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0lu
Zm8uaXNMaW5rZWQoKSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby5jYWxsZWUuc2V0KGV4ZWMtPmNh
bGxlckZyYW1lKCktPmdsb2JhbERhdGEoKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbiwgY2Fs
bGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICAgICAgY2FsbExp
bmtJbmZvLmxhc3RTZWVuQ2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5nbG9iYWxEYXRh
KCksIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIsIGNvZGVQdHIp
OwogICAgICAgICAKICAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNp
b24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyB0byB0aGUgKm5leHQqIGluc3Ry
dWN0aW9uLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5ICJleGVjdXRlZCIgdGhlCiAgICAgICAgIC8vIFNl
dExvY2FsIGFuZCB3aGF0ZXZlciBvdGhlciBERkcgTm9kZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0
aGUgc2FtZQogICAgICAgICAvLyBieXRlY29kZSBpbmRleCBhcyB0aGUgU2V0TG9jYWwuCi0gICAg
ICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luRm9yT1NSID09IG5vZGUuY29k
ZU9yaWdpbik7CiAgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXggKyAx
KTsKICAgICAgICAgCiAgICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgYnl0
ZWNvZGUgaW5kZXggZm9yIHRoZSBuZXh0IG5vZGUgdG8gYmUKQEAgLTg2MSw3ICs4NjEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHN0YXRl
bWVudCkgd291bGQgYmUgZGVhZCBhbnl3YXkgLSBzbyB0aGUgZmFjdCB0aGF0IERGRyB3b3VsZCBo
YXZlCiAgICAgICAgIC8vIGFscmVhZHkgbWFkZSB0aGUgYXNzaWdubWVudCwgYW5kIGJha2VkIGl0
IGludG8gdGhlIHJlZ2lzdGVyIGZpbGUgZHVyaW5nCiAgICAgICAgIC8vIE9TUiBleGl0LCB3b3Vs
ZCBub3QgYmUgdmlzaWJsZSB0byB0aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgotICAgICAgICBtX2J5
dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAg
IAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg4OCw2ICsxODg4LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ29udmVy
dFRoaXM6IHsKKyAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCB0aGlzVmFsdWUpOworICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlz
VmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGlmIChpc090aGVyUHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgp
KS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB0aGlzVmFsdWUo
dGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzLCB0aGlzVmFsdWUpOwpAQCAtMTkwNywxMSArMTkxNSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RQ
cmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAg
ICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIo
KSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJp
bmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BS
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmlu
Z1ZQdHIpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVl
R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHRo
aXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjM4NSw2ICsyMzk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDk3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZvaWQg
VmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnMKIE9TUkV4aXQ6Ok9TUkV4aXQoTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJl
Y292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0
LT5tX2NvbXBpbGVJbmRleCkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJ
bmRleEZvck9TUikKKyAgICAsIG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikK
ICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV9hcmd1bWVudHMo
aml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFi
bGVzLnNpemUoKSkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5k
KQogewotICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKTsKKyAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOwogICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUo
KTsgKythcmd1bWVudCkKICAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9y
ICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyAr
K3ZhcmlhYmxlKQpAQCAtMjYwLDYgKzI2MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKEJhc2ljQmxvY2smCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VS
VChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5iZWdpbik7CisgICAgCisgICAgaWYgKCFibG9jay5p
c1JlYWNoYWJsZSkgeworICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKICAgICAgICAg
bV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2spOwpAQCAtMjkxLDExICsyOTYsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX2xh
c3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5
dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7
CisgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigpOwogCiAgICAgZm9yICg7IG1f
Y29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5v
ZGUmIG5vZGUgPSBhdChtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZv
ck9TUiA9IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICBtX2NvZGVPcmln
aW5Gb3JPU1IgPSBub2RlLmNvZGVPcmlnaW47CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5l
cmF0ZSgpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0
IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwpAQCAtMzY2LDcgKzM3MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJ
bmRleCk7Ci0gICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKKyAgICBtX2NvZGVPcmlnaW5G
b3JPU1IgPSBDb2RlT3JpZ2luKDApOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Fy
Z3VtZW50cy5zaXplKCk7ICsraSkKICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk3ODgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgs
NyArMzI4LDcgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG1fY2hlY2s7CiAgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OwotICAgIHVuc2lnbmVkIG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICAKICAgICB1
bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgCkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxW
YWx1ZVNvdXJjZSwgMD4gbV92YXJpYWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Ci0g
ICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOworICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luRm9yT1NSOwogICAgIAogICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKQEAg
LTgwMSw3ICs4MDEsNiBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJ
CiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKICAg
ICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAs
IG1fc3RhdGUobV9qaXQuY29kZUJsb2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2
aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNyArOTIsNyBAQCBDYWxsRnJhbWUqIENhbGxG
cmFtZTo6dHJ1ZUNhbGxlckZyYW1lU2xvCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbWFj
aGluZUNhbGxlci0+Y29kZUJsb2NrKCktPmNvZGVPcmlnaW5Gb3JSZXR1cm4ocmV0dXJuUEMoKSk7
CiAgICAgCiAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIElubGlu
ZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZSA9IGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBuZXh0SW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lOwogICAgICAgICAKICAgICAgICAgQ2FsbEZyYW1lKiBpbmxpbmVkQ2FsbGVyID0g
bWFjaGluZUNhbGxlciArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTc4ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCwxMiAr
NzE4LDEzIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIHZvaWQg
SklUOjpsaW5rRm9yKEpTRnVuY3Rpb24qIGNhbGxlZSwgQ29kZUJsb2NrKiBjYWxsZXJDb2RlQmxv
Y2ssIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBKSVQ6OkNvZGVQdHIgY29kZSwgQ2FsbExp
bmtJbmZvKiBjYWxsTGlua0luZm8sIGludCBjYWxsZXJBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNhbGxlckNvZGVCbG9jayk7Ci0KKyAgICAKICAgICAvLyBDdXJy
ZW50bHkgd2Ugb25seSBsaW5rIGNhbGxzIHdpdGggdGhlIGV4YWN0IG51bWJlciBvZiBhcmd1bWVu
dHMuCiAgICAgLy8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBjYWxsIGNhbGxlZUNvZGVCbG9jayBpcyBu
dWxsIHNvIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBpcyB1bmltcG9ydGFudAogICAgIGlmICgh
Y2FsbGVlQ29kZUJsb2NrIHx8IChjYWxsZXJBcmdDb3VudCA9PSBjYWxsZWVDb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycykpIHsKICAgICAgICAgQVNTRVJUKCFjYWxsTGlua0luZm8tPmlzTGlua2Vk
KCkpOwogICAgICAgICBjYWxsTGlua0luZm8tPmNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxM
aW5rSW5mby0+aG90UGF0aEJlZ2luLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBjYWxsZWUpOworICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCgqZ2xv
YmFsRGF0YSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoY2FsbExpbmtJbmZvLT5ob3RQYXRoT3RoZXIsIGNv
ZGUpOwogICAgICAgICAKICAgICAgICAgaWYgKGNhbGxlZUNvZGVCbG9jaykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiAr
MTg0LDEzIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3QKICAgICAv
LyBEb25lISAtIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0aC4KICAgICBBU1NFUlQoT1BDT0RF
X0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCkpOwogICAgIEFT
U0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0
KSk7CisjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGlmIChtX2NhbkJlT3B0aW1pemVk
KSB7CisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZShtX2NvZGVCbG9jay0+bnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVz
KCkgLSAxKTsKKyAgICAgICAgQVNTRVJUKCh1bnNpZ25lZClyYXJlQ2FzZVByb2ZpbGUtPm1fYnl0
ZWNvZGVPZmZzZXQgPT0gbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGFkZDMyKEltbTMyKDEp
LCBBYnNvbHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CisgICAgfQor
I2VuZGlmCiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2Nh
bGwpKTsKIAogICAgIC8vIFRoaXMgaGFuZGxlcyBob3N0IGZ1bmN0aW9ucwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk3ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTQs
NyArMjAxNCwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAK
ICAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQg
SklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1
Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
LCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworICAg
ICAgICBwcmludGYoIlJldHVybmluZyBmcm9tIG9sZCBKSVQgY2FsbCBmcmFtZSB3aXRoIG9wdGlt
aXplZCByZXBsYWNlbWVudCAlcCglcCksIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1IiwgY29kZUJs
b2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNw
ZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUg
PSBjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgICAgIGlmIChjYWxsZXJGcmFtZSkKKyAg
ICAgICAgICAgIHByaW50ZigiLCBjYWxsZXJGcmFtZSA9ICVwLCByZXR1cm5QQyA9ICVwLCBjYWxs
ZXIgY29kZSBibG9jayA9ICVwIiwgY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKS52
YWx1ZSgpLCBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgICAgICBwcmludGYoIlxuIik7
CiAjZW5kaWYKICAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKQEAgLTIwMjIsNiAr
MjAyNiw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRp
ZgogICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNv
b24oKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk3ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4NCw2ICszODQsMjQgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlVmlydHVh
bAogICAgIEJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoKTsKIH0KIAorQ29kZUJsb2NrKiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9y
Q2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIGVs
c2UgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAg
cmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2
ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJU
KHJlc3VsdCk7CisgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJh
c2VsaW5lSklUKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKIHsK
ICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwpAQCAt
NDA2LDExICs0MjQsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9w
dAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRp
b25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmpl
Y3QqJiBleGNlcHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4
ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGls
YXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNP
YmplY3QqJiBleGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQdHI8
RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rp
b25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwg
bV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1Bh
cnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9k
eSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsT2Jq
ZWN0LCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/
IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWJv
ZHkpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwpAQCAtNDIwLDggKzQzOCw2IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0
aW9uRXgKICAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKICAg
ICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxl
cygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAKLSAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsK
LQogICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0OwogICAgIEFTU0VSVCgoY29t
cGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFjb2RlQmxvY2tGb3Ioc3BlY2lh
bGl6YXRpb25LaW5kKSk7CiAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJs
b2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigp
LCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCkpOwpAQCAtNDQyLDcgKzQ1OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmNvbXBpbGVGb3IKICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpi
b3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0KiBl
eGNlcHRpb247Ci0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBw
cm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9y
Q2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JD
YWxsLCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJs
b2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNj
b3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlv
biA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwogICAgIGlmICgh
bmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01MDIsNyArNTE4
LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAogICAg
IEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3IoZXhl
Yywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5n
Q29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRp
b24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVj
ZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5Ob2Rl
LCAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmly
c3RDb21waWxhdGlvbiwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5l
d0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc4ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAq
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBh
c3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCosIFNjb3BlQ2hhaW5O
b2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCom
IGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0
ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxl
ZUFyZ3NFeGVjID0gMCkKICAgICAgICAgewpAQCAtNTc0LDkgKzU3NCwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgp
OwogICAgICAgICB9CiAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBt
X25hbWU7IH0KICAgICAgICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZVZhbHVlLmdldCgpOyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9IC8vIEluY2x1ZGluZyAndGhpcychCisg
ICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVy
cy0+c2l6ZSgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIHVuc2lnbmVkIGNhcHR1
cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7
IH0KICAgICAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAgICAgICBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAko
cmV2aXNpb24gOTc4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0
aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbWl0
cz4KIAogLy8gU2V0IHRvIDEgdG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZpcm9u
bWVudCB2YXJpYWJsZXMuCi0jZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAKKyNk
ZWZpbmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMQogCiAjaWYgRU5BQkxFKFJVTl9USU1F
X0hFVVJJU1RJQ1MpCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM5LDYgKzM5LDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK3Vuc2lnbmVkIG1heGltdW1F
dmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGlt
dW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVk
IG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50OwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2Fu
ZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2Fs
bElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1Jbmxp
bmluZ0RlcHRoOworCiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJXYXJtVXA7CiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVB
bnl0aW1lU29vbjsKQEAgLTUwLDYgKzU5LDkgQEAgaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yUmV0dQogCiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJh
dGlvOwogCit1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKK3Vuc2lnbmVk
IGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRo
cmVzaG9sZEJhc2U7CiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29w
OwogCkBAIC05OSwxNiArMTExLDMxIEBAIHZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBj
b25zdCBjaGEKIAogdm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCiB7CisgICAgLy8gRklYTUU6
IE11c3QgcmV2aXNpdCB0aGVzZSBoZXVyaXN0aWNzISBUaGUgREZHLCBiZWluZyBhbiBvcHRpbWl6
aW5nIGNvbXBpbGVyLCBtYXkKKyAgICAvLyB0YWtlIGEgbG9uZyB0aW1lIGZvciBwYXRob2xvZ2lj
YWxseSBodWdlIGNvZGUgYmxvY2tzLiBUaGUgYmVzdCB3YXkgdG8gY29wZSB3aXRoCisgICAgLy8g
dGhpcyBpcyB0byByZWZ1c2UgdG8gb3B0aW1pemUgdGhlbS4KKyAgICBTRVQobWF4aW11bUV2YWxP
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAgICAgICAgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bVByb2dy
YW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAgICAgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bUZ1bmN0
aW9uRm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bUZ1bmN0
aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAKKyAgICBTRVQobWF4aW11
bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCk7Cisg
ICAgCisgICAgU0VUKG1heGltdW1JbmxpbmluZ0RlcHRoLCAyKTsKKwogICAgIFNFVChleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgLTEwMDApOwogICAgIFNF
VChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgLTUwMDAp
OwogICAgIFNFVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29v
biwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwotICAgIFNFVChleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZVNvb24sICAgICAgICAgICAgLTEwMCk7CisgICAgU0VU
KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbiwgICAgICAgICAgICAtMTAwMCk7
CiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24s
ICAwKTsKIAogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCwgICAxKTsK
ICAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpOwogCiAgICAg
U0VUKGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8sIDYpOworICAgIAorICAgIFNF
VChsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCwgMTAwKTsKKyAgICBTRVQoY291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQsICAgIDEwKTsgLy8gU2hvdWxkbid0IGJlIHplcm8gYmVjYXVzZSBz
b21lIG9wcyB3aWxsIHNwdXJpb3VzbHkgdGFrZSBzbG93IGNhc2UsIGZvciBleGFtcGxlIGZvciBs
aW5raW5nIG9yIGNhY2hpbmcuCiAKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNl
LCAgICAgICAgMjApOwogICAgIFNFVChsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29w
LCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJ
KHJldmlzaW9uIDk3ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlz
dGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUV2YWxP
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworZXh0ZXJuIHVuc2lnbmVkIG1h
eGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVy
biB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1
Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWdu
ZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
CisKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2YgaW5s
aW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KKwogZXh0
ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcDsK
IGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGlt
aXplQW55dGltZVNvb247CkBAIC00MSw2ICs1MCw5IEBAIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlv
bkNvdW50ZXJJbmNyZW1lbnQKIAogZXh0ZXJuIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1
Y2Nlc3NGYWlsUmF0aW87CiAKK2V4dGVybiB1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRo
cmVzaG9sZDsKK2V4dGVybiB1bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKKwog
ZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIGV4dGVybiB1bnNp
Z25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5Nzg4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBWUHRySGFja0V4
ZWN1dGFibGU7CiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xhc3MgSklUQ29kZUdlbmVyYXRv
cjsKKyAgICBjbGFzcyBKSVRDb21waWxlcjsKICAgICB9CiAKICAgICBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSopOwpA
QCAtNDksNiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0Z1bmN0aW9uIDog
cHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwogICAg
ICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOworICAgICAgICBmcmllbmQg
Y2xhc3MgREZHOjpKSVRDb21waWxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0
YTsKIAogICAgIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111861</attachid>
            <date>2011-10-20 15:46:50 -0700</date>
            <delta_ts>2011-10-20 18:26:39 -0700</delta_ts>
            <desc>more work in progress</desc>
            <filename>inlining_patch_6.diff</filename>
            <type>text/plain</type>
            <size>104134</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDExLTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxp
bmVEZXB0aCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRG
Rzo6VW5saW5rZWRCbG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNv
ZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+SW5saW5lU3RhY2tF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlND
OjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpTQzo6
REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0aW9u
Rm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBDb2Rl
T3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2Nr
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENvZGVNYXBGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpiYXNlbGluZUNv
ZGVCbG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpP
cGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpnZXRMb2Nh
bCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9maWxlZENvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1
bnRpbWUvSGV1cmlzdGljcy5jcHA6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxp
emVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKwogMjAxMS0xMC0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBDb252ZXJ0VGhpcyBlbWl0cyBzbG93IGNvZGUg
d2hlbiB0aGUgc291cmNlIG5vZGUgaXMga25vd24gdG8gYmUsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDkgKzEyMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90
UGF0aE90aGVyOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7CiAgICAgICAg
IGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgICAgICBib29sIGlzQ2FsbCA6IDE7
CiAgICAgICAgIGJvb2wgaXNERkcgOiAxOworICAgICAgICBib29sIGhhc1NlZW5VbmxpbmthYmxl
Q2FsbCA6IDE7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgYm9v
bCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQpAQCAtMjUwLDYgKzI1MiwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5h
dGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQg
c2V0QWx0ZXJuYXRpdmUoUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0
ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQogICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZVZlcnNpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHJlc3Vs
dCA9IHJlcGxhY2VtZW50KCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGluIHRoZSBwcm9jZXNz
IG9mIGNyZWF0aW5nIHRoZSBiYXNlbGluZSB2ZXJzaW9uLgorICAgICAgICAgICAgd2hpbGUgKHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFs
dGVybmF0aXZlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVt
cFN0YXRpc3RpY3MoKTsKQEAgLTM3NSwxMCArMzg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5dGVjb2RlKCkgeyBtX2luc3RydWN0aW9u
cy5jbGVhcigpOyB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9uQ291bnQ7IH0KICAgICAgICAgdm9pZCBz
ZXRJbnN0cnVjdGlvbkNvdW50KHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25Db3VudDsgfQotI2VuZGlmCiAKICNpZiBFTkFCTEUoSklU
KQogICAgICAgICB2b2lkIHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKQEAgLTUzMCwxMCArNTQyLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+
KG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdWludDMyX3Qgc2xv
d0Nhc2VUaHJlc2hvbGQoKSB7IHJldHVybiAxMDA7IH0KICAgICAgICAgYm9vbCBsaWtlbHlUb1Rh
a2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1f
Y291bnRlciA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49
IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49IEhldXJpc3RpY3M6OmNvdWxk
VGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJl
Q2FzZVByb2ZpbGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0
KQpAQCAtNTUxLDIxICs1NjcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewog
ICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0g
ICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBIZXVyaXN0
aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zm
c2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2FzZUNvdW50ID0gcmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7
CiAgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsK
LSAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNpYWxGYXN0Q2FzZUNvdW50
KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNv
dW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNs
b3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2Vs
eVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
c3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gKHNs
b3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQo
KTsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCArIHNwZWNpYWxGYXN0Q2FzZUNv
dW50KSA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldFJhcmVDYXNlUHJvZmlsZXMoKTsKQEAg
LTk0NCw5ICs5NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9u
czsKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25Db3VudDsK
LSNlbmRpZgogCiAgICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJn
dW1lbnRzUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBDb2RlT3JpZ2luX2gKIAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Niw2ICs1NywxOSBA
QCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsgfQorICAgIAorICAgIC8vIFRoZSBpbmxpbmUgZGVwdGggaXMgdGhlIGRlcHRoIG9m
IHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBub3QgaW5saW5lZCwKKyAgICAvLyAyID0gaW5saW5l
ZCBvbmUgZGVlcCwgZXRjLgorICAgIHVuc2lnbmVkIGlubGluZURlcHRoKCkgY29uc3Q7CisgICAg
CisgICAgc3RhdGljIHVuc2lnbmVkIGlubGluZURlcHRoRm9yQ2FsbEZyYW1lKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OworICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAvLyBH
ZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRl
YnVnZ2luZyBvbmx5LgorICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0
OworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKQEAgLTYzLDcgKzc3LDgg
QEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7CiAg
ICAgdW5zaWduZWQgY2FsbGVlVlI7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgdW5zaWdu
ZWQgbnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpczsKKyAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHNJ
bmNsdWRpbmdUaGlzIDogMzE7CisgICAgYm9vbCBpc0NhbGwgOiAxOwogfTsKIAogc3RydWN0IENv
ZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQgewpAQCAtNzEsNiArODYsMzggQEAgc3RydWN0IENv
ZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQgewogICAgIHVuc2lnbmVkIGNhbGxSZXR1cm5PZmZz
ZXQ7CiB9OwogCitpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxs
RnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit7CisgICAgdW5zaWduZWQg
cmVzdWx0ID0gMTsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNh
bGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgIHJlc3VsdCsrOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlu
bGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Cit9CisgICAgCitpbmxpbmUg
Ym9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBieXRlY29kZUluZGV4ID09IG90aGVyLmJ5dGVjb2RlSW5kZXgKKyAg
ICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lID09IG90aGVyLmlubGluZUNhbGxGcmFtZTsKK30KKyAg
ICAKKyNpZm5kZWYgTkRFQlVHCisvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93
LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgoraW5saW5lIFZlY3RvcjxDb2Rl
T3JpZ2luPiBDb2RlT3JpZ2luOjppbmxpbmVTdGFjaygpIGNvbnN0Cit7CisgICAgVmVjdG9yPENv
ZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0aCgpKTsKKyAgICByZXN1bHQubGFzdCgpID0gKnRo
aXM7CisgICAgdW5zaWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKKyAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVu
dCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJlc3VsdFtpbmRl
eC0tXSA9IGN1cnJlbnQtPmNhbGxlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisK
IGlubGluZSB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbihDb2RlT3Jp
Z2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBkYXRhKQogewogICAgIHJldHVybiBkYXRhLT5jYWxsUmV0
dXJuT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw5ICsxNDQsOSBAQCBKU09iamVjdCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmdlbmVyYXRlKCkKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0ZWNvZGUoKnRoaXMpOwog
Ci0jaWZuZGVmIE5ERUJVRwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbkNvdW50KG1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCisjaWZuZGVmIE5ERUJVRwogICAg
IGlmIChzX2R1bXBzR2VuZXJhdGVkQ29kZSkKICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAobV9z
Y29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6
OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAgICAgCiAgICAgQVNTRVJUKCFtX2Jsb2NrKTsKICAgICAK
KyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkg
PT0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFTU0VS
VChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Js
b2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKGJhc2ljQmxv
Y2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJhc2ljQmxvY2stPmVuZCAtIGJhc2ljQmxvY2stPmJlZ2luOyArK2kpCiAgICAgICAg
IG1fbm9kZXNbaV0uY2xlYXIoKTsKICAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVl
c0F0SGVhZDsKQEAgLTYyOSw2ICs2MzMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
Tm9kZUluZGV4IG5vCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6
CisgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNl
IEJyZWFrcG9pbnQ6CkBAIC02ODMsNiArNjg4LDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgIGNhc2UgUGhpOgog
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgY2FzZSBGbHVzaDoKICAgICAgICAgLy8gVGhlIGJs
b2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgIHNvdXJj
ZSA9ICZpblZhcmlhYmxlOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiAr
NDYsMjQgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNl
KQogICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCiAgICAgICAgICwgY2ZhU2hvdWxkUmV2
aXNpdChmYWxzZSkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgaXNMaW5rZWQoZmFs
c2UpCisjZW5kaWYKKyAgICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKICAgICAgICAgLCB2YXJp
YWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFyaWFibGVz
QXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZhbHVlc0F0SGVhZChu
dW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCiAgICAgewogICAgIH0KKyAgICAKKyAgICB2b2lkIGVuc3VyZUxvY2Fs
cyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisgICAgeworICAgICAgICB2YXJpYWJsZXNBdEhlYWQu
ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhcmlhYmxlc0F0VGFpbC5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkg
Zm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmdsZXNz
CiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTYyLDYgKzc0
LDEwIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogICAgIGJv
b2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIGJvb2wgaXNMaW5rZWQ7CisjZW5kaWYKKyAgICBib29sIGlzUmVhY2hh
YmxlOwogICAgIAogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAKQEAg
LTcyLDYgKzg4LDIxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICBPcGVyYW5kczxBYnN0cmFj
dFZhbHVlPiB2YWx1ZXNBdFRhaWw7CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRCbG9jayB7CisgICAg
QmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2luZzsK
KyAgICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CisgICAgCisgICAgVW5saW5rZWRC
bG9jaygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRleCBi
bG9ja0luZGV4KQorICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgICAgICAs
IG1fbmVlZHNOb3JtYWxMaW5raW5nKHRydWUpCisgICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0dXJu
TGlua2luZyhmYWxzZSkKKyAgICB7CisgICAgfQorfTsKKyAgICAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3OTQy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykK
ICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAg
ICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZhbHNl
KQogICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgpCkBAIC03NywxNSArNzgs
MTkgQEAgcHJpdmF0ZToKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIGJvb2wg
aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBl
IG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKTsKICAgICAKLSAgICAvLyBIYW5kbGUgaW50
cmluc2ljIGZ1bmN0aW9ucy4KKyAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlm
IGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCisgICAgYm9v
bCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIGludCBjYWxsVGFyZ2V0LCBOb2RlSW5k
ZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFi
b3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlvbiosIGludCBmaXJzdEFyZywgaW50IGxhc3RB
cmcsIHVuc2lnbmVkIG5leHRPZmZzZXQpOworICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rp
b25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxh
bnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50
IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBibG9j
ayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KTsKLSAgICAvLyBTZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBC
YXNpY0Jsb2Nrcy4KLSAgICB2b2lkIHNldHVwUHJlZGVjZXNzb3JzKCk7CisgICAgLy8gRmluZCBy
ZWFjaGFibGUgY29kZSBhbmQgc2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdyYXBoJ3Mg
QmFzaWNCbG9ja3MuCisgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICAvLyBF
bnF1ZXVlIGEgYmxvY2sgb250byB0aGUgd29ya2xpc3QsIGlmIG5lY2Vzc2FyeS4KKyAgICB2b2lk
IGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJ
bmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3IpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vzc29y
cy4KLSAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+JiBw
b3NzaWJsZVRhcmdldHMpOwotICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJbmRleD4m
IHVubGlua2VkQmxvY2tzKTsKKyAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9y
PFVubGlua2VkQmxvY2s+JiBwb3NzaWJsZVRhcmdldHMpOworICAgIHZvaWQgbGlua0Jsb2NrcyhW
ZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzKTsKICAgICAvLyBMaW5rIEdldExv
Y2FsICYgU2V0TG9jYWwgbm9kZXMsIHRvIGVuc3VyZSBsaXZlIHZhbHVlcyBhcmUgZ2VuZXJhdGVk
LgogICAgIGVudW0gUGhpU3RhY2tUeXBlIHsKICAgICAgICAgTG9jYWxQaGlTdGFjaywKQEAgLTEw
NSwxMCArMTEwLDggQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gR2V0L1NldCB0aGUg
b3BlcmFuZHMvcmVzdWx0IG9mIGEgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uCi0gICAgTm9kZUluZGV4
IGdldChpbnQgb3BlcmFuZCkKKyAgICBOb2RlSW5kZXggZ2V0RGlyZWN0KGludCBvcGVyYW5kKQog
ICAgIHsKLSAgICAgICAgb3BlcmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChv
cGVyYW5kKTsKLSAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KICAgICAg
ICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbnN0YW50ID0gb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OwpAQCAtMTIzLDEwICsxMjYsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gTXVzdCBiZSBh
IGxvY2FsLgogICAgICAgICByZXR1cm4gZ2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQpOwogICAg
IH0KLSAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQorICAgIE5vZGVJ
bmRleCBnZXQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1f
aW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQorICAgIHZvaWQg
c2V0RGlyZWN0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBv
cGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOwotICAgICAg
ICAKICAgICAgICAgLy8gSXMgdGhpcyBhbiBhcmd1bWVudD8KICAgICAgICAgaWYgKG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpKSB7CiAgICAgICAgICAgICBzZXRBcmd1bWVudChvcGVyYW5kLCB2
YWx1ZSk7CkBAIC0xMzYsMTggKzE0MSwzNSBAQCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJl
IGEgbG9jYWwuCiAgICAgICAgIHNldExvY2FsKCh1bnNpZ25lZClvcGVyYW5kLCB2YWx1ZSk7CiAg
ICAgfQorICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCisgICAgewor
ICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQp
LCB2YWx1ZSk7CisgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwg
YWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUlu
ZGV4IGdldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewogICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5k
KTsKLQorICAgICAgICAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAo
bm9kZS5vcCA9PSBHZXRMb2NhbCkKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEZsdXNoKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2Fu
dHMgdGhlIGxvY2FsIHRvIGJlIGxpdmUKKyAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBs
b2FkZWQgaXRzIHZhbHVlLCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KKyAgICAgICAg
ICAgICAgICAvLyB3aGljaCBjYXNlIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICAgICAgTm9kZSYg
Zmx1c2hDaGlsZCA9IG1fZ3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOworICAgICAgICAgICAgICAg
IGlmIChmbHVzaENoaWxkLm9wID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nl
c3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0
TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
b3BlcmFuZCkgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hD
aGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRM
b2NhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwotICAgICAgICAgICAgQVNT
RVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQx
KCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOworICAgICAg
ICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
Q2hlY2sgZm9yIHJlYWRzIG9mIHRlbXBvcmFyaWVzIGZyb20gcHJpb3IgYmxvY2tzLApAQCAtMTc5
LDIxICsyMDEsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwogCiAgICAg
ICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtub2RlSW5kZXhdOwotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0QXJndW1l
bnQpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9ncmFwaFtub2RlSW5kZXhdOwor
ICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEZsdXNoKSB7CisgICAgICAgICAgICAgICAg
Ly8gVHdvIHBvc3NpYmlsaXRpZXM6IGVpdGhlciB0aGUgYmxvY2sgd2FudHMgdGhlIGxvY2FsIHRv
IGJlIGxpdmUKKyAgICAgICAgICAgICAgICAvLyBidXQgaGFzIG5vdCBsb2FkZWQgaXRzIHZhbHVl
LCBvciBpdCBoYXMgbG9hZGVkIGl0cyB2YWx1ZSwgaW4KKyAgICAgICAgICAgICAgICAvLyB3aGlj
aCBjYXNlIHdlJ3JlIGRvbmUuCisgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2hDaGlsZCA9IG1f
Z3JhcGhbbm9kZVB0ci0+Y2hpbGQxKCldOworICAgICAgICAgICAgICAgIGlmIChmbHVzaENoaWxk
Lm9wID09IFBoaSkgeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IGZsdXNoQ2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBub2RlUHRyLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBub2Rl
SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmZmx1c2hDaGlsZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBTZXRBcmd1bWVudCkgewogICAg
ICAgICAgICAgICAgIC8vIFdlJ3JlIGdldHRpbmcgYW4gYXJndW1lbnQgaW4gdGhlIGZpcnN0IGJh
c2ljIGJsb2NrOyBsaW5rCiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBT
ZXRBcmd1bWVudC4KLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5sb2NhbCgpID09IHN0YXRp
Y19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwotICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+bG9jYWwo
KSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKKyAgICAgICAgICAg
ICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZVB0ci0+dmFy
aWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwogICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4Owog
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAg
aWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExv
Y2FsKTsKLSAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAgQVNT
RVJUKG5vZGVQdHItPm9wID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRy
LT5jaGlsZDEoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7
CkBAIC0yMTQsNiArMjQ5LDUxIEBAIHByaXZhdGU6CiAKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0K
KyAgICAKKyAgICB2b2lkIGZsdXNoKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgb3BlcmFu
ZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChvcGVyYW5kIDwgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleDsKKyAgICAgICAgaW50IGluZGV4Owor
ICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBub2RlSW5kZXggPSBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGluZGV4ID0gb3BlcmFuZDsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpOworICAgICAgICAg
ICAgbV9wcmVzZXJ2ZWRWYXJzLnNldChvcGVyYW5kKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBGbHVzaCB8
fCBub2RlLm9wID09IFNldEFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgLy8gSWYgYSBsb2Nh
bCBoYXMgYWxyZWFkeSBiZWVuIGZsdXNoZWQsIG9yIGlmIGl0J3MgYW4gYXJndW1lbnQgaW4gdGhl
CisgICAgICAgICAgICAgICAgLy8gZmlyc3QgYmFzaWMgYmxvY2ssIHRoZW4gdGhlcmUgaXMgcmVh
bGx5IG5vIG5lZWQgdG8gZmx1c2ggaXQuIEluIGZhY3QKKyAgICAgICAgICAgICAgICAvLyBlbWl0
dGluZyBhIEZsdXNoIGluc3RydWN0aW9uIGNvdWxkIGp1c3QgY29uZnVzZSB0aGluZ3MsIHNpbmNl
IHRoZQorICAgICAgICAgICAgICAgIC8vIGdldEFyZ3VtZW50KCkgY29kZSBhc3N1bWVzIHRoYXQg
d2UgbmV2ZXIgc2VlIGEgRmx1c2ggb2YgYSBTZXRBcmd1bWVudC4KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgYWRkVG9HcmFwaChG
bHVzaCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kKTsKKyAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFy
aWFibGVBY2Nlc3NEYXRhKSk7CisgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoRmx1c2gs
IE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOworICAgICAgICBpZiAob3BlcmFuZElz
QXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBl
bmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOworICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCkgPSBub2Rl
SW5kZXg7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFy
Z3VtZW50Rmlyc3RUaW1lKGluZGV4LCBub2RlSW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICAvLyBHZXQgYW4gb3BlcmFuZCwgYW5kIHBlcmZvcm0g
YSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCiAgICAgTm9kZUluZGV4IGdldFRv
SW50MzIoaW50IG9wZXJhbmQpCkBAIC02NjMsOCArNzQzLDYgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8UGhpU3RhY2tFbnRyeSwgMTY+IG1fYXJndW1lbnRQaGlTdGFjazsKICAgICBWZWN0b3I8UGhp
U3RhY2tFbnRyeSwgMTY+IG1fbG9jYWxQaGlTdGFjazsKICAgICAKLSAgICBWZWN0b3I8Tm9kZSos
IDE2PiBtX3JldXNhYmxlTm9kZVN0YWNrOwotICAgIAogICAgIHN0cnVjdCBJbmxpbmVTdGFja0Vu
dHJ5IHsKICAgICAgICAgQnl0ZUNvZGVQYXJzZXIqIG1fYnl0ZUNvZGVQYXJzZXI7CiAgICAgICAg
IApAQCAtNjg0LDcgKzc2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEJsb2NrcyBpbnRyb2R1
Y2VkIGJ5IHRoaXMgY29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4KICAg
ICAgICAgLy8gTWF5IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVkZXMg
dGhlIGNvbnRpbnVhdGlvbiBhZnRlcgogICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4gdGhlIGNh
bGxlci4KLSAgICAgICAgVmVjdG9yPEJsb2NrSW5kZXg+IG1fdW5saW5rZWRCbG9ja3M7CisgICAg
ICAgIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiBtX3VubGlua2VkQmxvY2tzOwogICAgICAgICAKICAg
ICAgICAgLy8gSWYgdGhlIGNhbGxzaXRlJ3MgYmFzaWMgYmxvY2sgd2FzIHNwbGl0IGludG8gdHdv
LCB0aGVuIHRoaXMgd2lsbCBiZQogICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgY2FsbHNpdGUg
YmxvY2suIEl0IG5lZWRzIGl0cyBzdWNjZXNzb3JzIGxpbmtlZCB0byB0aGUKQEAgLTY5MiwyMiAr
NzcwLDQwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGFueSBibG9ja3MgaW4gbV91bmxpbmtlZEJs
b2NrcyB0byBqdW1wIGJhY2sgaW50byB0aGlzIGJsb2NrLgogICAgICAgICBCbG9ja0luZGV4IG1f
Y2FsbHNpdGVCbG9ja0hlYWQ7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KiBt
X2NhbGxlZTsKKyAgICAgICAgLy8gRG9lcyB0aGUgY2FsbHNpdGUgYmxvY2sgaGVhZCBuZWVkIGxp
bmtpbmc/IFRoaXMgaXMgdHlwaWNhbGx5IHRydWUKKyAgICAgICAgLy8gYnV0IHdpbGwgYmUgZmFs
c2UgZm9yIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sncyBpbmxpbmUgc3RhY2sgZW50cnkKKyAgICAg
ICAgLy8gKHNpbmNlIHRoYXQgb25lIGlzIG5vdCBpbmxpbmVkKSBhbmQgZm9yIGNhc2VzIHdoZXJl
IGFuIGlubGluZSBjYWxsZWUKKyAgICAgICAgLy8gZGlkIHRoZSBsaW5raW5nIGZvciB1cy4KKyAg
ICAgICAgYm9vbCBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nOwogICAgICAgICAKLSAg
ICAgICAgSW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciosIENvZGVCbG9jayosIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVh
bFJlZ2lzdGVyIGNhbGxlZVZSKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG1fcmV0dXJuVmFs
dWU7CisgICAgICAgIAorICAgICAgICAvLyBEaWQgd2Ugc2VlIGFueSByZXR1cm5zPyBXZSBuZWVk
IHRvIGhhbmRsZSB0aGUgKHVuY29tbW9uIGJ1dCBuZWNlc3NhcnkpCisgICAgICAgIC8vIGNhc2Ug
d2hlcmUgYSBwcm9jZWR1cmUgdGhhdCBkb2VzIG5vdCByZXR1cm4gd2FzIGlubGluZWQuCisgICAg
ICAgIGJvb2wgbV9kaWRSZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBEaWQgd2UgaGF2ZSBh
bnkgZWFybHkgcmV0dXJucz8KKyAgICAgICAgYm9vbCBtX2RpZEVhcmx5UmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZXI7CisgICAgICAgIAorICAgICAg
ICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVn
aXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQpOwogICAgICAgICAKICAgICAgICAgfklubGluZVN0
YWNrRW50cnkoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J5dGVDb2RlUGFyc2VyLT5tX2lu
bGluZVN0YWNrVG9wID0gbV9jYWxsZWU7CisgICAgICAgICAgICBtX2J5dGVDb2RlUGFyc2VyLT5t
X2lubGluZVN0YWNrVG9wID0gbV9jYWxsZXI7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGludCByZW1hcE9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgICAgIGludCByZW1hcE9wZXJhbmQo
aW50IG9wZXJhbmQpIGNvbnN0CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVD
YWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KQot
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4XSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworICAgICAg
ICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBpbnQgcmVzdWx0ID0gbV9jb25zdGFudFJlbWFwW29wZXJhbmQgLSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleF07CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA+PSBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG9wZXJh
bmQgKyBtX2lubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIH0KQEAgLTc1Niw2
ICs4NTIsMTgxIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChib29sIHUKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0
aW9uLCBKU0Z1bmN0aW9uKiBleHBlY3RlZEZ1bmN0aW9uLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0
QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KQoreworICAgIC8vU2FtcGxpbmdGbGFnczo6U2NvcGVk
RmxhZyBzY29wZWRGbGFnKDE4KTsKKworICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBj
aGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPworICAgIGlmICghZXhwZWN0
ZWRGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChleHBlY3RlZEZ1bmN0
aW9uLT5pc0hvc3RGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZXhwZWN0ZWRGdW5jdGlvbi0+anNFeGVj
dXRhYmxlKCk7CisgICAgCisgICAgLy8gRG9lcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB3ZSdy
ZSBwYXNzaW5nIG1hdGNoIHRoZSBhcml0eSBvZiB0aGUgdGFyZ2V0PyBXZSBjb3VsZAorICAgIC8v
IGlubGluZSBhcml0eSBjaGVjayBmYWlsdXJlcywgYnV0IGZvciBzaW1wbGljaXR5IHdlIGN1cnJl
bnRseSBkb24ndC4KKyAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihleGVjdXRhYmxlLT5wYXJhbWV0
ZXJDb3VudCgpKSArIDEgIT0gbGFzdEFyZyAtIGZpcnN0QXJnICsgMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIC8vIEhhdmUgd2UgZXhjZWVkZWQgaW5saW5lIHN0YWNrIGRlcHRo
LCBvciBhcmUgd2UgdHJ5aW5nIHRvIGlubGluZSBhIHJlY3Vyc2l2ZSBjYWxsPworICAgIC8vIElm
IGVpdGhlciBvZiB0aGVzZSBhcmUgZGV0ZWN0ZWQsIHRoZW4gZG9uJ3QgaW5saW5lLgorICAgIHVu
c2lnbmVkIGRlcHRoID0gMDsKKyAgICBmb3IgKElubGluZVN0YWNrRW50cnkqIGVudHJ5ID0gbV9p
bmxpbmVTdGFja1RvcDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm1fY2FsbGVyKSB7CisgICAgICAg
ICsrZGVwdGg7CisgICAgICAgIGlmIChkZXB0aCA+PSBIZXVyaXN0aWNzOjptYXhpbXVtSW5saW5p
bmdEZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRGVwdGggZXhjZWVkZWQuCisg
ICAgICAgIAorICAgICAgICBpZiAoZW50cnktPmV4ZWN1dGFibGUoKSA9PSBleGVjdXRhYmxlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZWN1cnNpb24gZGV0ZWN0ZWQuCisgICAgfQor
ICAgIAorICAgIC8vIERvZXMgdGhlIGNvZGUgYmxvY2sncyBzaXplIG1hdGNoIHRoZSBoZXVyaXN0
aWNzL3JlcXVpcmVtZW50cyBmb3IgYmVpbmcKKyAgICAvLyBhbiBpbmxpbmUgY2FuZGlkYXRlPwor
ICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGV4ZWN1dGFibGUtPnByb2ZpbGVkQ29kZUJs
b2NrRm9yKENvZGVGb3JDYWxsKTsKKyAgICBpZiAoIW1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxs
KHByb2ZpbGVkQmxvY2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gSWYg
d2UgZ2V0IGhlcmUgdGhlbiBpdCBsb29rcyBsaWtlIHdlIHNob3VsZCBkZWZpbml0ZWx5IGlubGlu
ZSB0aGlzIGNvZGUuIFByb2NlZWQKKyAgICAvLyB3aXRoIHBhcnNpbmcgdGhlIGNvZGUgdG8gZ2V0
IGJ5dGVjb2RlLCBzbyB0aGF0IHdlIGNhbiB0aGVuIHBhcnNlIHRoZSBieXRlY29kZS4KKyAgICAv
LyBOb3RlIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2UgZ2V0IGhlcmUgaXMgaW50ZW5kZWQgdG8gZGll
IGFmdGVyIGhhbmRsZUlubGluaW5nKCkKKyAgICAvLyByZXR1cm5zLgorICAgIEpTT2JqZWN0KiBl
eGNlcHRpb247CisgICAgT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+
cHJvZHVjZUNvZGVCbG9ja0Zvcihwcm9maWxlZEJsb2NrLT5nbG9iYWxPYmplY3QoKSwgZXhwZWN0
ZWRGdW5jdGlvbi0+c2NvcGUoKSwgT3B0aW1pemluZ0NvbXBpbGF0aW9uLCBDb2RlRm9yQ2FsbCwg
ZXhjZXB0aW9uKTsKKyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICAKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRo
ZSBieXRlY29kZSwgY2hlY2sgaWYgd2UgcmVhbGx5IGNhbiBpbmxpbmUgaXQuIFRoaXMgbWF5IGZh
aWwKKyAgICAvLyBpZiB0aGUgY29kZSBibG9jayBjb250YWlucyBzb21lIG5hc3R5IG9wY29kZXMu
CisgICAgaWYgKCFjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrLmdldCgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAg
IHByaW50ZigiSW5saW5pbmcgZXhlY3V0YWJsZSAlcC5cbiIsIGV4ZWN1dGFibGUpOworI2VuZGlm
CisgICAgCisgICAgLy8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNv
bW1pdHRlZCB0byBpbmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKKyAgICAvLyBieSBjaGVj
a2luZyB0aGUgY2FsbGVlIChpZiBuZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3Vt
ZW50cyBhbmQgdGhlIGNhbGxlZQorICAgIC8vIGFyZSBmbHVzaGVkLgorICAgIGlmICghY2VydGFp
bkFib3V0RXhwZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9u
LCBPcEluZm8oZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJnZXROb2RlSW5kZXgpOworICAgIAor
ICAgIGZsdXNoKGNhbGxUYXJnZXQpOworICAgIGZvciAoaW50IGFyZyA9IGZpcnN0QXJnICsgMTsg
YXJnIDw9IGxhc3RBcmc7ICsrYXJnKQorICAgICAgICBmbHVzaChhcmcpOworICAgIAorICAgIGlu
dCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChs
YXN0QXJnKSArIDE7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgdXNlZCBi
eSB0aGUgY2FsbCBmcmFtZSBpcyByZXNlcnZlZC4KKyAgICBmb3IgKGludCBhcmcgPSBpbmxpbmVD
YWxsRnJhbWVTdGFydCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVC
bG9jay0+bV9udW1WYXJzOyBhcmctLSA+IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgMTspCisgICAg
ICAgIG1fcHJlc2VydmVkVmFycy5zZXQobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGFy
ZykpOworICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4K
KyAgICB1bnNpZ25lZCBuZXdOdW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdp
c3RlcnM7CisgICAgaWYgKG5ld051bUxvY2FscyA+IG1fbnVtTG9jYWxzKSB7CisgICAgICAgIG1f
bnVtTG9jYWxzID0gbmV3TnVtTG9jYWxzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1fYmxv
Y2tzW2ldLT5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB9CisKKyAgICBJbmxpbmVT
dGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLmdldCgpLCBwcm9maWxl
ZEJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsIChWaXJ0dWFsUmVnaXN0ZXIpbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGNhbGxUYXJnZXQpLCAoVmlydHVhbFJlZ2lzdGVy
KW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCh1c2VzUmVzdWx0ID8gcmVzdWx0T3BlcmFu
ZCA6IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLCAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxG
cmFtZVN0YXJ0KTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5p
bmcgcmVhbGx5IGhhcHBlbnMuCisgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRl
eDsKKyAgICBtX2N1cnJlbnRJbmRleCA9IDA7CisgICAgcGFyc2VDb2RlQmxvY2soKTsKKyAgICBt
X2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIAorICAgIC8vIElmIHRoZSBpbmxpbmVkIGNv
ZGUgY3JlYXRlZCBzb21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRv
IGRvLgorICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWlu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAgICAgICBpZiAo
aW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKQorICAgICAg
ICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxz
aXRlQmxvY2tIZWFkXS5nZXQoKSwgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5l
U3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkXS0+aXNMaW5rZWQpOworICAgICAgICAKKyAg
ICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIGlzIG5v
dyBvd25lZCBieSB0aGUgY2FsbGVyLgorICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9j
YWxsZXItPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
aW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9j
a0luZGV4ID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAg
ICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5s
YXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcpOworICAgICAgICAgICAgaW5saW5lU3RhY2tFbnRy
eS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcg
PSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFj
a0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tI
ZWFkID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgICAg
ICBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5r
aW5nID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxpbmtCbG9ja3MoaW5s
aW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNT
RVJUKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAgIAor
ICAgIC8vIElmIHRoZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMsIHRoZW4g
d2UncmUgZG9uZS4gV2UgYWxsb3cgcGFyc2luZyBvZgorICAgIC8vIHRoZSBjYWxsZXIgdG8gY29u
dGludWUgaW4gd2hhdGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93LgorICAgIGlm
ICghaW5saW5lU3RhY2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNrRW50cnku
bV9kaWRSZXR1cm4pIHsKKyAgICAgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7CisgICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmJlZ2luID09
IGxhc3RCbG9jay0+ZW5kIHx8ICFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgICAg
ICAKKyAgICAgICAgLy8gSWYgd2UgY3JlYXRlZCBuZXcgYmxvY2tzIHRoZW4gdGhlIGxhc3QgYmxv
Y2sgbmVlZHMgbGlua2luZywgYnV0IGluIHRoZQorICAgICAgICAvLyBjYWxsZXIuIEl0IGRvZXNu
J3QgbmVlZCB0byBiZSBsaW5rZWQgdG8sIGJ1dCBpdCBuZWVkcyBvdXRnb2luZyBsaW5rcy4KKyAg
ICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBHaXZlIGl0IGEgdmFsdWUgdGhhdCB3b24ndCBwZXJ0dXJiIGJpbmFy
eSBzZWFyY2gsIGFuZCB3b24ndCBiZSBmb3VuZC4gVGhpcyB3b3VsZAorICAgICAgICAgICAgLy8g
ZmFpbCBpZiBvcF9jYWxsIGNvdWxkIGFwcGVhciBhdCB0aGUgaGVhZCBvZiBhIGJhc2ljIGJsb2Nr
LiBUaGF0IHNob3VsZG4ndCBoYXBwZW4sCisgICAgICAgICAgICAvLyBnaXZlbiB0aGUgd2F5IHRo
ZSBieXRlY29kZSBnZW5lcmF0b3Igd29ya3MuCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQorICAgICAgICAgICAgcHJpbnRmKCJSZWFzY3JpYmluZyBieXRlY29kZSBpbmRleCBvZiBibG9j
ayAlcCBmcm9tIGJjIyV1IHRvIGJjIyV1IChpbmxpbmUgcmV0dXJuIGNhc2UpLlxuIiwgbGFzdEJs
b2NrLCBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4sIG1fY3VycmVudEluZGV4KTsKKyNlbmRpZgor
ICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7Cisg
ICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRC
bG9ja3MuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVn
aW4gPCBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4pOworICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9n
cmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7CisKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiRG9uZSBpbmxpbmluZyBl
eGVjdXRhYmxlICVwLCBjb250aW51aW5nIGNvZGUgZ2VuZXJhdGlvbiBhdCBlcGlsb2d1ZS5cbiIs
IGV4ZWN1dGFibGUpOworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICAvLyBJZiB3ZSBnZXQgdG8gdGhpcyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQg
aW4gc29tZSBzb3J0IG9mIHRlcm1pbmFscy4KKyAgICBBU1NFUlQobV9ncmFwaC5sYXN0KCkuaXNU
ZXJtaW5hbCgpKTsKKyAgICAKKyAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBi
YXNpYyBibG9jayB3ZSdyZSBhYm91dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vh
cmx5UmV0dXJuTGlua2luZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzW2ldLm1fYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlz
TGlua2VkKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwor
ICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUudGFr
ZW5CbG9ja0luZGV4KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5t
X3VubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CisjZW5k
aWYKKyAgICB9CisgICAgCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sg
Zm9yIHRoZSBjb250aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8QmFzaWNCbG9j
az4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX2dyYXBoLnNp
emUoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQorICAgIHByaW50ZigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJs
b2NrICVwLCAjJWx1IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5n
ZXQoKSwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFi
bGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1l
KG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKKyAgICBtX2N1
cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOworICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5t
X2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1tt
X2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9j
a0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2su
cmVsZWFzZSgpKTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHJldHVybiBhbmQgY29u
dGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwgYnV0CisgICAgLy8gaW4gdGhl
IG5ldyBiYXNpYyBibG9jay4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJp
bnRmKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVpbmcgY29kZSBnZW5lcmF0
aW9uIGluIG5ldyBibG9jay5cbiIsIGV4ZWN1dGFibGUpOworI2VuZGlmCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNS
ZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgZmlyc3RB
cmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgc3dpdGNo
IChpbnRyaW5zaWMpIHsKQEAgLTg1Myw3ICsxMTI0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxv
Y2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8g
dXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFy
Z3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0
IGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1sw
XS5nZXQoKSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKyth
cmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFw
aChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVudCAtIG1f
Y29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemUpKSk7CkBAIC04NjksNyArMTE0MCwyMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gRG9uJ3QgZXh0
ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9
PSBsaW1pdCkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50
SW5kZXgpKTsKKyAgICAgICAgICAgIC8vIE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1
bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhpcyBpZiB0aGUgYmxvY2sgaXMKKyAgICAgICAgICAgIC8v
IGVtcHR5LiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBpbmxpbmluZywgd2hpY2ggbWlnaHQg
b3RoZXJ3aXNlIGNyZWF0ZQorICAgICAgICAgICAgLy8gc29tZSBlbXB0eSBibG9ja3MgaW4gc29t
ZSBjYXNlcy4gV2hlbiBwYXJzZUJsb2NrKCkgcmV0dXJucyB3aXRoIGFuIGVtcHR5CisgICAgICAg
ICAgICAvLyBibG9jaywgaXQgd2lsbCBnZXQgcmVwdXJwb3NlZCBpbnN0ZWFkIG9mIGNyZWF0aW5n
IGEgbmV3IG9uZS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8vIGxvZ2ljIHJlbGllcyBv
biBldmVyeSBieXRlY29kZSByZXN1bHRpbmcgaW4gb25lIG9yIG1vcmUgbm9kZXMsIHdoaWNoIHdv
dWxkCisgICAgICAgICAgICAvLyBiZSB0cnVlIGFueXdheSBleGNlcHQgZm9yIG9wX2xvb3BfaGlu
dCwgd2hpY2ggZW1pdHMgYSBQaGFudG9tIHRvIGZvcmNlIHRoaXMKKyAgICAgICAgICAgIC8vIHRv
IGJlIHRydWUuCisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPmJlZ2luICE9IG1fZ3Jh
cGguc2l6ZSgpKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3Vy
cmVudEluZGV4KSk7CisgICAgICAgICAgICBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWZ1c2luZyB0byBwbGFudCBqdW1wIGF0
IGxpbWl0ICV1IGJlY2F1c2UgYmxvY2sgJXAgaXMgZW1wdHkuXG4iLCBsaW1pdCwgbV9jdXJyZW50
QmxvY2spOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gIW1fcGFy
c2VGYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC04ODgsNyArMTE3MiwxMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9j
b252ZXJ0X3RoaXM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUaGlzKCk7Ci0g
ICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3JhcGgoQ29udmVydFRoaXMsIG9wMSkpOworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5vcCA9PSBDb252ZXJ0VGhpcykKKyAgICAgICAgICAgICAg
ICBzZXRUaGlzKG9wMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VGhp
cyhhZGRUb0dyYXBoKENvbnZlcnRUaGlzLCBvcDEpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX2NvbnZlcnRfdGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTYyMSwxMCArMTkwOCwyOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAg
ICAgICBjYXNlIG9wX3JldDoKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2lu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X3JldHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAg
ICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1faW5saW5l
U3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIElmIGlubGluaW5nIGNyZWF0ZWQgYmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1
cm4sIHRoZW4gd2UgbmVlZCBzb21lCisgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlu
a2luZy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RI
KG9wX3JldCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0
KSA8PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oTm9CbG9jaykp
OworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tz
Lmxhc3QoKS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRFYXJseVJldHVybiA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICBBU1NFUlQoIW1f
aW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgTEFTVF9PUENPREUob3BfZW5kKTsKIApAQCAtMTY0MCw5ICsxOTQ2LDEzIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRl
eCBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAg
ICAgICAgICAgZW51bSB7IENvbnN0YW50RnVuY3Rpb24sIExpbmtlZEZ1bmN0aW9uLCBVbmtub3du
RnVuY3Rpb24gfSBjYWxsVHlwZTsKICAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBjYWxsIGF0
IEAlbHUgYmMjJXU6ICV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRpZgorICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ss
IGNhbGxUYXJnZXQpKQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRGdW5jdGlv
bjsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5pc0xpbmtlZCgpICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVu
dEluZGV4KSkKKyAgICAgICAgICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVl
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNl
KG1fY3VycmVudEluZGV4KSkKICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0
aW9uOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gVW5rbm93
bkZ1bmN0aW9uOwpAQCAtMTY1NSwyNSArMTk2NSwzOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3Vs
dD8KICAgICAgICAgICAgICAgICBib29sIHVzZXNSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICBpbnQgcmVzdWx0T3BlcmFuZCA9IDA7IC8vIG1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX2NhbGwpOwogICAgICAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVj
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CiAgICAg
ICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gUHJlZGljdE5vbmU7CiAgICAg
ICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+
dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRPcGVyYW5kID0gcHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAg
ICAgICAgICB1c2VzUmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlv
biA9IGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4ICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBuZXh0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rp
b247CiAgICAgICAgICAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotICAgICAgICAg
ICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFudEZ1bmN0aW9uKQotICAgICAgICAgICAgICAg
ICAgICBpbnRyaW5zaWMgPSBtX2dyYXBoLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJs
b2NrLCBjYWxsVGFyZ2V0KS0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAgICAgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVu
Y3Rpb247CisgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24p
IHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IG1fZ3JhcGgudmFsdWVP
ZkZ1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNhbGxUYXJnZXQpOworICAgICAgICAgICAg
ICAgICAgICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJp
bnNpYygpOworICAgICAgICAgICAgICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY2FsbFR5cGUgPT0gTGlua2VkRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5jYWxsZWUuZ2V0KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGludHJpbnNpYyA9IGZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKQotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZnVu
Y3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGdW5jdGlv
biA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1f
Y3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsK
KyAgICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBp
ZiAoaGFuZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywg
Zmlyc3RBcmcsIGxhc3RBcmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgaWYgKGlu
dHJpbnNpYyAhPSBOb0ludHJpbnNpYykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50
cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxh
c3RBcmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09Q
Q09ERSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgorICAgICAgICAgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2FsbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNlcnRhaW5BYm91
dEV4cGVjdGVkRnVuY3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBu
ZXh0T2Zmc2V0KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0
byBiZSBpbnNpZGUgYnJhY2VzLgogICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
YWxsKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzMyLDcgKzIwNTUsMTUgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgLy8gYXJlIGNvbXBh
dGlibGUuCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGJsb2NrQmVnaW4sIG1fY3VycmVudElu
ZGV4ID09IGJsb2NrQmVnaW4pOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgLy8gV2UgbmV2ZXIgZG8gT1NS
IGludG8gYW4gaW5saW5lZCBjb2RlIGJsb2NrLiBUaGF0IGNvdWxkIG5vdCBoYXBwZW4sIHNpbmNl
IE9TUgorICAgICAgICAgICAgLy8gbG9va3MgdXAgdGhlIGNvZGUgYmxvY2sgdGhhdCBpcyB0aGUg
cmVwbGFjZW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQgY29kZQorICAgICAgICAgICAgLy8gYmxv
Y2suIEhlbmNlLCBtYWNoaW5lIGNvZGUgYmxvY2sgPSB0cnVlIGNvZGUgYmxvY2sgPSBub3QgaW5s
aW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fY2Fs
bGVyKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEVtaXQgYSBwaGFudG9tIG5vZGUgdG8gZW5z
dXJlIHRoYXQgdGhlcmUgaXMgYSBwbGFjZWhvbGRlciBub2RlIGZvciB0aGlzIGJ5dGVjb2RlCisg
ICAgICAgICAgICAvLyBvcC4KKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2xvb3BfaGludCk7CiAgICAgICAg
IH0KQEAgLTE3ODQsNyArMjExNSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjaygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vz
c29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNoaWxkMSgpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBT
ZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09
IEFyZ3VtZW50UGhpU3RhY2spKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ZhbHVlSW5Q
cmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3Jd
Lm9wID09IFBoaSB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gRmx1c2ggfHwg
KG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5
cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgIApAQCAtMTgyNSw0NiAr
MjE1Niw4MyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgIH0K
IH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCBW
ZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPFVubGlua2VkQmxvY2s+JiBwb3Nz
aWJsZVRhcmdldHMpCiB7CiAgICAgQVNTRVJUKGJsb2NrLT5lbmQgIT0gTm9Ob2RlKTsKKyAgICBB
U1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CisgICAgQVNTRVJUKGJsb2NrLT5lbmQgPiBibG9jay0+
YmVnaW4pOwogICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAxXTsKICAgICBB
U1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAgIHN3aXRjaCAobm9kZS5vcCkgewog
ICAgIGNhc2UgSnVtcDoKICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5i
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLnRha2VuQnl0
ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgIHByaW50ZigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUuXG4i
LCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwg
bm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dy
YXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUudGFr
ZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwogICAgICAgICBub2RlLnNldE5vdFRh
a2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3NzaWJs
ZVRhcmdldHMsIG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwor
I2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJMaW5rZWQgYmFz
aWMgYmxvY2sgJXAgdG8gJXAsICMldSBhbmQgJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBoLm1f
YmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLnRha2VuQmxvY2tJbmRl
eCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBu
b2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgZGVmYXVsdDoKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAg
IHByaW50ZigiTWFya2luZyBiYXNpYyBibG9jayAlcCBhcyBsaW5rZWQuXG4iLCBibG9jayk7Cisj
ZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAorI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlmCit9CisKK3ZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcykK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykg
eworICAgICAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3Nb
aV0ubV9ibG9ja0luZGV4XS5nZXQoKSwgdW5saW5rZWRCbG9ja3MpOworICAgICAgICAgICAgdW5s
aW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJ
bmRleD4mIHVubGlua2VkQmxvY2tzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vz
c29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5k
ZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlua0Jsb2NrKG1fZ3Jh
cGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV1dLmdldCgpLCB1bmxpbmtlZEJsb2Nrcyk7Cisg
ICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1tzdWNjZXNzb3JJbmRl
eF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAgIHN1
Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3Vj
Y2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3Jz
LmFwcGVuZChibG9ja0luZGV4KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVk
ZWNlc3NvcnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkK
IHsKLSAgICBmb3IgKEJsb2NrSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2luZGV4KSB7CisgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlz
dDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoMCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNS
ZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAg
ICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0
LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5tX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+ZW5kICE9
IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NF
UlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5pc0p1
bXAoKSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgo
KV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAg
ZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwot
ICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+
bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgo
KSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODc3LDMwICsyMjQ1LDM1IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgbV9p
ZGVudGlmaWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKTsgKytpKQotICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29k
ZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KSksIGkpOworICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkgKyBG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5k
TWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJs
b2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSKQorQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFy
c2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9j
a0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1
YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1l
U3RhcnQpCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2sp
CiAgICAgLCBtX2NhbGxzaXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxvY2tIZWFkKQotICAgICwgbV9j
YWxsZWUoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3ApCisgICAgLCBtX3JldHVyblZh
bHVlKHJldHVyblZhbHVlVlIpCisgICAgLCBtX2RpZFJldHVybihmYWxzZSkKKyAgICAsIG1fZGlk
RWFybHlSZXR1cm4oZmFsc2UpCisgICAgLCBtX2NhbGxlcihieXRlQ29kZVBhcnNlci0+bV9pbmxp
bmVTdGFja1RvcCkKIHsKLSAgICBpZiAobV9jYWxsZWUpIHsKKyAgICBpZiAobV9jYWxsZXIpIHsK
ICAgICAgICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsKICAgICAgICAgQVNTRVJUKGNhbGxlZVZSICE9IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3Rh
cnQgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVChjYWxsc2l0ZUJs
b2NrSGVhZCAhPSBOb0Jsb2NrKTsKICAgICAgICAgCiAgICAgICAgIElubGluZUNhbGxGcmFtZSBp
bmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlID0gY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNr
T2Zmc2V0ID0gbV9jYWxsZWUtPm1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlubGluZUNhbGxG
cmFtZS5jYWxsZWVWUiA9IGNhbGxlZVZSOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVy
ID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIGlubGluZUNh
bGxGcmFtZS5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzID0gY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0NhbGwgPSB0cnVlOwogICAgICAgICBi
eXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5hcHBlbmQoaW5s
aW5lQ2FsbEZyYW1lKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAmYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkubGFzdCgpOwogICAgICAgICAKQEAg
LTE5MTgsMTUgKzIyOTEsMjEgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgICAgIHBhaXI8SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSksIGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAg
ICAgICAgICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBieXRlQ29k
ZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBieXRlQ29k
ZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFw
cGVuZChDb25zdGFudFJlY29yZCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY29u
c3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5maXJzdC0+c2Vjb25kOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gdHJ1ZTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBNYWNoaW5lIGNvZGUgYmxvY2sgY2FzZS4KICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayA9PSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBB
U1NFUlQoY2FsbGVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCA9PSBOb0Jsb2NrKTsKIAogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9IDA7CkBAIC0xOTM3LDkgKzIzMTYsMTQgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lk
ZW50aWZpZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKLSAgICAgICAgICAgIG1f
Y29uc3RhbnRSZW1hcFtpXSA9IGk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBp
ICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisKKyAgICAgICAgbV9jYWxsc2l0ZUJsb2Nr
SGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29uc3RhbnRSZW1hcC5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKG1f
Y29uc3RhbnRSZW1hcFtpXSA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgCiAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwogfQogCkBAIC0xOTUw
LDIxICsyMzM0LDQ4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAg
ICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJnZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBj
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKICAg
ICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1cnJl
bnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhlIG5leHQganVtcCB0YXJnZXQsIG9yIHRoZSBlbmQg
b2YgdGhlIGluc3RydWN0aW9ucy4KICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0
SW5kZXggPCBjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSA/IGNvZGVCbG9jay0+anVt
cFRhcmdldChqdW1wVGFyZ2V0SW5kZXgpIDogY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIlBhcnNp
bmcgYnl0ZWNvZGUgd2l0aCBsaW1pdCAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBt
X2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIGxpbWl0LCBDb2RlT3JpZ2luOjppbmxpbmVE
ZXB0aEZvckNhbGxGcmFtZShtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkpOwor
I2VuZGlmCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKIAogICAgICAg
ICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVt
cCB0YXJnZXQpLgogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5z
aXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOwotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAgICAgICAg
ICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5iZWdpbiA9PSBtX2dy
YXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0byB1cy4KKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRl
eCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAv
LyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
UmVhc2NyaWJpbmcgYnl0ZWNvZGUgaW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMl
dSAocGVlcGhvbGUgY2FzZSkuXG4iLCBtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50QmxvY2stPmJ5
dGVjb2RlQmVnaW4sIG1fY3VycmVudEluZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX2dyYXBo
LnNpemUoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNyZWF0aW5nIGJhc2lj
IGJsb2NrICVwLCAjJWx1IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9j
ay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1
dGFibGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZy
YW1lKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5h
cHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFwYXJzZUJs
b2NrKGxpbWl0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAv
LyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0LgogICAgICAgICAgICAg
QVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGhhdmUgcGxhbnRlZCBhIHRlcm1pbmFsLCBvciB3ZSBqdXN0IGdhdmUg
dXAgYmVjYXVzZQorICAgICAgICAgICAgLy8gd2UgcmVhbGl6ZWQgdGhhdCB0aGUganVtcCB0YXJn
ZXQgaW5mb3JtYXRpb24gaXMgaW1wcmVjaXNlLCBvciB3ZQorICAgICAgICAgICAgLy8gYXJlIGF0
IHRoZSBlbmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLgorICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEJsb2NrLT5iZWdpbiA9PSBtX2dyYXBoLnNpemUoKSB8fCBtX2dyYXBoLmxhc3QoKS5pc1Rl
cm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5lbmQgPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrID0gMDsKICAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBs
aW1pdCk7CiAgICAgfQogCkBAIC0xOTc5LDEyICsyMzkwLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQo
IW1fY3VycmVudEluZGV4KTsKICAgICAKLSAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNr
RW50cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxp
ZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5
KHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxvY2ssIEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxvY2tzKGlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7Ci0gICAgc2V0dXBQcmVkZWNlc3NvcnMoKTsK
KyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8TG9jYWxQ
aGlTdGFjaz4oKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFjaz4oKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi1ib29sIGNhbkNv
bXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQordGVtcGxhdGU8Ym9vbCAoKmNhbkhh
bmRsZU9wY29kZSkoT3Bjb2RlSUQpPgorYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+
Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC00Myw3ICs0NCw3
IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICAgICAgc3dp
dGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVP
ZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBERUZJTkVfT1Aob3Bjb2RlLCBsZW5ndGgpICAg
ICAgICAgICBcCiAgICAgICAgIGNhc2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZU9wY29kZShvcGNvZGUpKSAgXAorICAgICAgICAg
ICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUob3Bjb2RlKSkgIFwKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0g
bGVuZ3RoOyAgICAgICBcCiAgICAgICAgICAgICBicmVhazsKQEAgLTU4LDYgKzU5LDE2IEBAIGJv
b2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Db21waWxlT3Bjb2RlPihjb2RlQmxvY2spOwor
fQorCitib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
cmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxvY2spOworfQor
CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDIwICsyNiw0MiBAQAogI2lmbmRlZiBERkdDYXBhYmlsaXRpZXNfaAogI2RlZmluZSBE
RkdDYXBhYmlsaXRpZXNfaAogCisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAi
REZHTm9kZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaW5jbHVkZSAiREZHTm9kZS5oIgot
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxs
IG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rlcy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdo
dENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5s
aW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0g
SGV1cmlzdGljczo6bWF4aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1
cmlzdGljczo6bWF4aW11bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQorCitpbmxp
bmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGlj
czo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Cit9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9j
ayopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiAvLyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxp
bmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtMTQ2LDE0ICsx
NjgsNDUgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIH0K
IH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgCisgICAgLy8gVGhlc2Ugb3Bjb2RlcyB3
b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQgd2l0aCBpbmxpbmluZywgYnV0IHdlIGN1cnJlbnRseSBk
b24ndCBkbyBpdC4KKyAgICAvLyBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgc2NvcGUgY2hhaW4gd2ls
bCBub3QgYmUgc2V0IGNvcnJlY3RseS4KKyAgICBjYXNlIG9wX2dldF9zY29wZWRfdmFyOgorICAg
IGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CisgICAgY2FzZSBvcF9yZXNvbHZlOgorICAgIGNhc2Ug
b3BfcmVzb2x2ZV9iYXNlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6CisgICAgICAgIAor
ICAgIC8vIFRyaXZpYWwgdG8gc3VwcG9ydCB3aXRoIHRoZSBjb3B5IHByb3BhZ2F0aW9uIG1hY2hp
bmUgd2UgYWxyZWFkeSBoYXZlLCBidXQgdGhlIGdsdWUKKyAgICAvLyBpc24ndCB0aGVyZSwgeWV0
LgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICAgICAgCisgICAgLy8gSW5saW5pbmcgZG9l
c24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBleHByZXNzaW9uIG9wZXJhbmRzLgorICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCk7CisgICAg
fQorfQorCiBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOworYm9vbCBjYW5Jbmxp
bmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBpbmxpbmUg
Ym9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxp
bmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9
CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykgeyByZXR1cm4gZmFsc2U7IH0K
K2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikg
eyByZXR1cm4gZmFsc2U7IH0KKwogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJ
RCkgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNvZGVJ
RCkgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVC
bG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENv
ZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAK
IGlubGluZSBib29sIGNhbkNvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQpAQCAtMTc2
LDYgKzIyOSwxNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1CiAg
ICAgcmV0dXJuIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykgJiYg
Y2FuQ29tcGlsZU9wY29kZXMoY29kZUJsb2NrKTsKIH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5l
RnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBtaWdo
dElubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29k
ZUJsb2NrKTsKK30KKworaW5saW5lIGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIERGR0NhcGFiaWxpdGll
c19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiBlbnVtIENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsK
IGlubGluZSBib29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSog
ZXhlYywgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJ
VENvZGUmIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNo
ZWNrKQogeworICAgIC8vU2FtcGxpbmdGbGFnczo6U2NvcGVkRmxhZyBzY29wZWRGbGFnKDE3KTsK
KyAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgIEdyYXBoIGRmZzsKICAgICBpZiAoIXBhcnNlKGRmZywgZ2xvYmFsRGF0YSwgY29kZUJs
b2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSw2ICs3OSw0NiBAQCBjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFy
aWFibGVBY2Nlc3NECiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRXaGl0
ZVNwYWNlKHVuc2lnbmVkIGFtb3VudCkKK3sKKyAgICB3aGlsZSAoYW1vdW50LS0gPiAwKQorICAg
ICAgICBwcmludGYoIiAiKTsKK30KKwordm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUlu
ZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoIW5vZGVJbmRleCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBOb2RlJiBw
cmV2aW91c05vZGUgPSBhdChub2RlSW5kZXggLSAxKTsKKyAgICBpZiAocHJldmlvdXNOb2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPENvZGVPcmlnaW4+
IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFj
aygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5saW5lU3RhY2sgPSBjdXJyZW50
Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9
IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2su
c2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgeworICAgICAgICBp
ZiAocHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUgIT0gY3VycmVudElubGlu
ZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaW5kZXhPZkRpdmVyZ2Vu
Y2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gUHJpbnQgdGhlIHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxpbmVT
dGFjay5zaXplKCk7IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykgeworICAgICAgICBwcmludFdo
aXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYoIjwtLSAlcFxuIiwgcHJldmlvdXNJbmxp
bmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpOworICAgIH0KKyAgICAKKyAg
ICAvLyBQcmludCB0aGUgcHVzaGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4T2ZEaXZl
cmdlbmNlOyBpIDwgY3VycmVudElubGluZVN0YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAgIHBy
aW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50ZigiLS0+ICVwXG4iLCBjdXJyZW50
SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9Cit9CisK
IHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC05MSw2ICsxMzEsOSBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIEFTU0VS
VChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIGR1bXBD
b2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAgcHJpbnRXaGl0ZVNwYWNlKChub2RlLmNvZGVPcmln
aW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9u
IG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTI0MCw3ICsyODMsNyBAQCB2b2lk
IEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGZvciAoc2l6ZV90IGIg
PSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKLSAgICAgICAgcHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1
KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNPU1JUYXJn
ZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CisgICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChi
YyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1Jl
YWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1Ig
dGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIHByaW50ZigiICB2YXJzOiAiKTsKICAgICAgICAgaWYg
KGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52
YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgLy8g
Q29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChD
b2RlQmxvY2sqID0gMCk7CiAgICAgdm9pZCBkdW1wKE5vZGVJbmRleCwgQ29kZUJsb2NrKiA9IDAp
OworCisgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBk
aWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQorICAgIC8vIHByZWNlZGluZyBub2RlLgor
ICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4KTsKICNlbmRpZgogCi0gICAgQmxvY2tJ
bmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9j
a3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOworICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBi
eXRlY29kZUJlZ2luKTsKIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJO
dW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CkBAIC0yNDgsMTggKzI1Miwx
OCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBvcGVyYXRvcigp
KEJsb2NrSW5kZXgqIGJsb2NrSW5kZXgpIGNvbnN0CisgICAgdW5zaWduZWQgb3BlcmF0b3IoKShV
bmxpbmtlZEJsb2NrKiB1bmxpbmtlZEJsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOworICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2NrLT5tX2Jsb2NrSW5kZXhdLT5ieXRl
Y29kZUJlZ2luOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAK
LWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVj
dG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCitpbmxpbmUg
QmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxp
bmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQogewotICAgIHJldHVy
biAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4oYmxv
Y2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJl
UHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJl
dHVybiBXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPFVubGlua2VkQmxvY2ssIHVuc2lnbmVk
PihibG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlN
dXN0QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSktPm1f
YmxvY2tJbmRleDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk3OTQy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDEzICszOSwyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3Qg
T1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnksIFZlY3RvcjxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCkKK3ZvaWQgSklUQ29tcGlsZXI6
OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25S
ZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogICAgIGV4
aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQot
ICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMldSkgYXQgSklU
IG9mZnNldCAweCV4ICAiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29kZUlu
ZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBO
b2RlIEAlZCAoIiwgKGludClleGl0Lm1fbm9kZUluZGV4KTsKKyAgICBmb3IgKENvZGVPcmlnaW4g
Y29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMj
JXUiLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIC0+ICVwICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsK
KyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgZGVi
dWdPZmZzZXQoKSk7CiAgICAgZXhpdC5kdW1wKHN0ZGVycik7CiAjZW5kaWYKICNpZiBERkdfRU5B
QkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKQEAgLTQ4MiwxOSArNDg5LDU1IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICBpZiAoZXhpdC5tX2xh
c3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAg
IGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFu
ZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMykgRml4
IGNhbGwgZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lKHMpLgogICAgIAogICAgIEFT
U0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6
Q29kZUJsb2NrKSk7CiAgICAgCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0
Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihj
b2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
ciA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAg
ICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVj
b2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOworICAgICAgICB1bnNp
Z25lZCByZXR1cm5CeXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNv
ZGVJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+
KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0
ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAg
IEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIAorICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0
KTsKKworICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlZVZSKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBsb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNG
dW5jdGlvbiwgbV9zY29wZUNoYWluKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgR1BSUmVn
IGNhbGxlckZyYW1lR1BSOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBhZGRQdHIoSW1tMzIoaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
OworICAgICAgICAKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVC
bG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjpyZWdUMiwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOworICAgICAgICBz
dG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJG
aWxlOjpSZXR1cm5QQykpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5udW1Bcmd1bWVudHNJbmNsdWRpbmdU
aGlzKSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHN0b3Jl
UHRyKEdQUkluZm86OnJlZ1QxLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
YWRkUHRyKEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIAogICAgIC8vIDE0KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUg
SklUIGNvZGUuCiAgICAgCi0gICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0g
YmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4o
KSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9j
b2RlT3JpZ2luKTsKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2Rl
ZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CisgICAgCisg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAu
c2l6ZSgpLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBBU1NF
UlQobWFwcGluZyk7Ci0gICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0
Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9
PSBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkKiBqdW1w
VGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBt
YXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5l
Q29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2Rl
T2Zmc2V0KTsKICAgICAKICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2Fj
aGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIApAQCAtNTA2LDIwICs1NDksMjggQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogI2VuZGlmCiB9CiAKLXZvaWQgSklUQ29t
cGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCitWZWN0b3I8
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgSklUQ29tcGlsZXI6OmRlY29kZWRDb2RlTWFwRm9y
KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+IGRlY29kZWRDb2RlTWFwOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRp
dmUoKSk7Ci0gICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0
ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpKTsKLSAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+aml0Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIEFTU0VSVChjb2Rl
QmxvY2sgPT0gY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgQVNTRVJUKGNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIAorICAgIHN0ZDo6cGFpcjxIYXNoTWFwPENv
ZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46Oml0ZXJhdG9yLCBi
b29sPiByZXN1bHQgPSBtX2RlY29kZWRDb2RlTWFwcy5hZGQoY29kZUJsb2NrLCBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PigpKTsKKyAgICAKKyAgICBpZiAocmVzdWx0LnNlY29uZCkK
KyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuZmlyc3QtPnNl
Y29uZCk7CiAgICAgCisgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kOworfQorCit2b2lk
IEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQor
ewogICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9z
ckV4aXRzKCkuYmVnaW4oKTsKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9
IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5kKCk7CiAgICAgCiAgICAgd2hpbGUgKGV4aXRzSXRl
ciAhPSBleGl0c0VuZCkgewogICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRl
cjsKLSAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVj
dWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOwor
ICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0
aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw4ICs0MzAsMjEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNvbXBpbGVCb2R5KCk7CiAgICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKIAot
ICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRp
b25SZWNvdmVyeSosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29k
ZU1hcCk7CisgICAgdm9pZCBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBT
cGVjdWxhdGlvblJlY292ZXJ5Kik7CiAgICAgdm9pZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVK
SVQmKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENv
ZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGU7CisgICAgICAgICAgICBBU1NF
UlQoZXhlY3V0YWJsZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4ZWN1
dGFibGU6OnNfaW5mbyk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSA9
PSBjb2RlQmxvY2soKS0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICByZXR1cm4gY29kZUJs
b2NrKCktPmFsdGVybmF0aXZlKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIAogICAgIC8v
IFRoZSBnbG9iYWxEYXRhLCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0
cnMuCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC00NDEsNyArNDU0LDkgQEAg
cHJpdmF0ZToKIAogICAgIC8vIFRoZSBjb2RlQmxvY2sgY3VycmVudGx5IGJlaW5nIGdlbmVyYXRl
ZCwgdXNlZCB0byBhY2Nlc3MgaW5mb3JtYXRpb24gc3VjaCBhcyBjb25zdGFudCB2YWx1ZXMsIGlt
bWVkaWF0ZXMuCiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLQorICAgIAorICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29k
ZWRDb2RlTWFwczsKKyAgICAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNv
ZGUsIGluY2x1ZGluZyBleGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICAvLyBDb3Vu
dCBvZiB0aGUgbnVtYmVyIG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLgog
ICAgIFZlY3RvcjxDYWxsUmVjb3JkPiBtX2NhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgaW5s
aW5lIGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwK
ICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhpLCAw
KSBcCisgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyog
TWFya2VyIGZvciBhcmd1bWVudHMgYmVpbmcgc2V0LiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVu
dCwgMCkgXApAQCAtNDg1LDYgKzQ4Niw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBT
ZXRMb2NhbDoKICAgICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6Cisg
ICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzNiw3ICs4MzgsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAKICAgICBib29sIHNob3VsZEdlbmVyYXRlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3JlZkNvdW50ICYmIG9wICE9IFBoaTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQg
JiYgb3AgIT0gUGhpICYmIG9wICE9IEZsdXNoOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlZkNv
dW50KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlz
aW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCwxOCArNjQsMzEgQEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNp
emVfdCBpZHgpIHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICBjb25zdCBUJiBsb2NhbChz
aXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdm9p
ZCBlbnN1cmVMb2NhbHMoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSA8PSBt
X2xvY2Fscy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IG9s
ZFNpemUgPSBtX2xvY2Fscy5zaXplKCk7CisgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShzaXplKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKLSAgICAgICAgICAgIG1fbG9jYWxz
LnJlc2l6ZShpZHggKyAxKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBp
IDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGVuc3VyZUxvY2Fscyhp
ZHggKyAxKTsKICAgICAgICAgCiAgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKICAgICB9
CiAgICAgCisgICAgVCBnZXRMb2NhbChzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKGlk
eCA+PSBtX2xvY2Fscy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gVHJhaXRzOjpkZWZhdWx0
VmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW2lkeF07CisgICAgfQorICAgIAogICAg
IHZvaWQgc2V0QXJndW1lbnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCiAg
ICAgewogICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNiArNTc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAg
ICAgICAgY2FzZSBQaGk6CisgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGNhc2UgVGhyb3c6
CiAgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDYgKzYzOCw3IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVj
U3RhdGUqIGV4ZWMsIENhbGxMaW4KICAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCBzdGF0aWNf
Y2FzdDxpbnQ+KGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpID09IGNhbGxlZUNv
ZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzKSB7CiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LmlzTGlua2VkKCkpOwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxs
ZXJGcmFtZSgpLT5nbG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxl
ckNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5r
SW5mby5sYXN0U2VlbkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgp
LCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0cnVj
dGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQogICAgICAgICAvLyBTZXRM
b2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhl
IHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgotICAgICAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbkZvck9TUiA9PSBub2RlLmNvZGVP
cmlnaW4pOwogICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IGF0KG1fY29tcGlsZUluZGV4ICsgMSk7
CiAgICAgICAgIAogICAgICAgICAvLyBPZGRseSwgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGJ5dGVj
b2RlIGluZGV4IGZvciB0aGUgbmV4dCBub2RlIHRvIGJlCkBAIC04NjEsNyArODYxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBzdGF0ZW1l
bnQpIHdvdWxkIGJlIGRlYWQgYW55d2F5IC0gc28gdGhlIGZhY3QgdGhhdCBERkcgd291bGQgaGF2
ZQogICAgICAgICAvLyBhbHJlYWR5IG1hZGUgdGhlIGFzc2lnbm1lbnQsIGFuZCBiYWtlZCBpdCBp
bnRvIHRoZSByZWdpc3RlciBmaWxlIGR1cmluZwogICAgICAgICAvLyBPU1IgZXhpdCwgd291bGQg
bm90IGJlIHZpc2libGUgdG8gdGhlIG9sZCBKSVQgaW4gYW55IHdheS4KLSAgICAgICAgbV9ieXRl
Y29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luOwogICAgICAgICAK
ICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKQEAgLTE4OTAsNyArMTg5MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CiAgICAgICAgIGlm
IChpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE5MTMs
MTEgKzE5MTUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICAKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgp
KS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlz
VmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIHRoaXNWYWx1ZSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0g
dGhpc1ZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzOTEsNiArMjM5
OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIAogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5Nzk0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksMTMgKzEwOSwxMyBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSog
b3V0KSBjb25zCiBPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBT
cGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVj
ayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCi0gICAgLCBt
X2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX2NvZGVP
cmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVj
b3ZlcnlJbmRleCkKICAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQog
ICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAgLCBtX2xhc3RT
ZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29k
ZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CisgICAgQVNT
RVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCiAgICAgICAgIG1f
YXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5t
X2FyZ3VtZW50c1thcmd1bWVudF0pOwogICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2
YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKQEAgLTI2MCw2ICsyNjAs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogewogICAgIEFT
U0VSVChtX2NvbXBpbGVPa2F5KTsKICAgICBBU1NFUlQobV9jb21waWxlSW5kZXggPT0gYmxvY2su
YmVnaW4pOworICAgIAorICAgIGlmICghYmxvY2suaXNSZWFjaGFibGUpIHsKKyAgICAgICAgbV9j
b21waWxlSW5kZXggPSBibG9jay5lbmQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBp
ZiAoYmxvY2suaXNPU1JUYXJnZXQpCiAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJsb2Nr
KTsKQEAgLTI5MSwxMSArMjk2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFz
aWNCbG9jayYKICAgICB9CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgIG1fY29kZU9yaWdpbkZvck9TUiA9
IENvZGVPcmlnaW4oKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRleCA8IGJsb2NrLmVuZDsg
KyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0gYXQobV9jb21waWxlSW5k
ZXgpOwotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbm9kZS5jb2RlT3JpZ2lu
OwogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVK
SVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChp
bnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5k
ZWJ1Z09mZnNldCgpKTsKQEAgLTM2Niw3ICszNzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKEJhc2ljQmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlw
ZXMoKQogewogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIG1fYnl0ZWNvZGVJbmRl
eEZvck9TUiA9IDA7CisgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigwKTsKIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAg
ICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0cnVjdCBPU1JFeGl0
IHsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2NoZWNrOwogICAgIE5vZGVJbmRl
eCBtX25vZGVJbmRleDsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW47CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4Owog
ICAgIApAQCAtNTY2LDcgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZhbHVlU291cmNl
LCAwPiBtX2FyZ3VtZW50czsKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVz
OwogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwotICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRl
eEZvck9TUjsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvck9TUjsKICAgICAKICAgICBB
YnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgCkBAIC04MDEsNyArODAxLDYgQEAgaW5saW5lIFNw
ZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV9hcmd1bWVudHMoaml0LmNv
ZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgo
KS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCiAgICAgLCBtX3N0YXRlKG1faml0LmNvZGVCbG9jaygp
LCBtX2ppdC5ncmFwaCgpKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkyLDcgKzkyLDcgQEAgQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsZXJGcmFtZVNsbwog
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG1hY2hpbmVDYWxsZXItPmNvZGVCbG9jaygpLT5j
b2RlT3JpZ2luRm9yUmV0dXJuKHJldHVyblBDKCkpOwogICAgIAogICAgIGZvciAoSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5s
aW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG5leHRJbmxpbmVDYWxs
RnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVD
YWxsRnJhbWU7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxGcmFtZSA9
IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgCiAgICAg
ICAgIENhbGxGcmFtZSogaW5saW5lZENhbGxlciA9IG1hY2hpbmVDYWxsZXIgKyBpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsMTIgKzcxOCwxMyBAQCBKSVRDb2RlIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBj
YWxsZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVC
bG9jaywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQg
Y2FsbGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJD
b2RlQmxvY2spOwotCisgICAgCiAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbGluayBjYWxscyB3
aXRoIHRoZSBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIC8vIElmIHRoaXMgaXMgYSBu
YXRpdmUgY2FsbCBjYWxsZWVDb2RlQmxvY2sgaXMgbnVsbCBzbyB0aGUgbnVtYmVyIG9mIHBhcmFt
ZXRlcnMgaXMgdW5pbXBvcnRhbnQKICAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCAoY2FsbGVy
QXJnQ291bnQgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKSB7CiAgICAgICAg
IEFTU0VSVCghY2FsbExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZv
LT5jYWxsZWUuc2V0KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2Fs
bGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICAgICAgY2FsbExp
bmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGNhbGxMaW5rSW5mby0+aG90UGF0aE90aGVyLCBjb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChjYWxsZWVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5j
cHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxMyBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0CiAgICAgLy8gRG9uZSEgLSByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGguCiAgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RF
X0xFTkdUSChvcF9jYWxsX2V2YWwpKTsKICAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxs
KSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkpOworI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkgeworICAgICAgICBSYXJlQ2FzZVByb2Zp
bGUqIHJhcmVDYXNlUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5yYXJlQ2FzZVByb2ZpbGUobV9jb2Rl
QmxvY2stPm51bWJlck9mUmFyZUNhc2VQcm9maWxlcygpIC0gMSk7CisgICAgICAgIEFTU0VSVCgo
dW5zaWduZWQpcmFyZUNhc2VQcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IG1fYnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICBhZGQzMihJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2Fz
ZVByb2ZpbGUtPm1fY291bnRlcikpOworICAgIH0KKyNlbmRpZgogICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7CiAKICAgICAvLyBUaGlzIGhhbmRs
ZXMgaG9zdCBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE0LDcgKzIwMTQsMTEgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogCiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAg
ICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1p
emVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2Rl
QmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
LT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+
c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJv
bSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3
aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldSIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIo
KSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOwor
ICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
OworICAgICAgICBpZiAoY2FsbGVyRnJhbWUpCisgICAgICAgICAgICBwcmludGYoIiwgY2FsbGVy
RnJhbWUgPSAlcCwgcmV0dXJuUEMgPSAlcCwgY2FsbGVyIGNvZGUgYmxvY2sgPSAlcCIsIGNhbGxl
ckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblBDKCkudmFsdWUoKSwgY2FsbGVyRnJhbWUtPmNvZGVC
bG9jaygpKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGlmIChjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCkBAIC0yMDIyLDYgKzIwMjYsOCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjZW5kaWYKICAgICAgICAgICAgIGNvZGVCbG9jay0+
cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAKICAgICAgICAgY29kZUJsb2Nr
LT5vcHRpbWl6ZVNvb24oKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4NCw2ICszODQsMjQgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlVmly
dHVhbAogICAgIEJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoKTsKIH0KIAorQ29kZUJsb2NrKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAg
IGVsc2UgeworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAg
ICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5h
dGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgQVNT
RVJUKHJlc3VsdCk7CisgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6
OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykK
IHsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwpA
QCAtNDA2LDExICs0MjQsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGls
YXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNP
YmplY3QqJiBleGNlcHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlv
bkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29t
cGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwg
SlNPYmplY3QqJiBleGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVu
Y3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJj
ZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBK
U1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
Ym9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFs
T2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAo
IWJvZHkpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNDIwLDggKzQzOCw2IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1
bmN0aW9uRXgKICAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsK
ICAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQo
KTsKLQogICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0OwogICAgIEFTU0VSVCgo
Y29tcGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFjb2RlQmxvY2tGb3Ioc3Bl
Y2lhbGl6YXRpb25LaW5kKSk7CiAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29k
ZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRl
cigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCkpOwpAQCAtNDQyLDcgKzQ1OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3IKICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2Rl
Ojpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0
KiBleGNlcHRpb247Ci0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sg
PSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2Nr
Rm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVG
b3JDYWxsLCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29k
ZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxh
dGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwogICAgIGlm
ICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01MDIsNyAr
NTE4LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAog
ICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Io
ZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6
aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNl
cHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJv
ZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5O
b2RlLCAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDog
Rmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAo
IW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc5NDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCosIFNjb3BlQ2hh
aW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVj
dComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNh
bGxlZUFyZ3NFeGVjID0gMCkKICAgICAgICAgewpAQCAtNTc0LDkgKzU3NCwxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVj
dCgpOwogICAgICAgICB9CiAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVy
biBtX25hbWU7IH0KICAgICAgICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZVZhbHVlLmdldCgpOyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9IC8vIEluY2x1ZGluZyAndGhpcych
CisgICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVycy0+c2l6ZSgpOyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIHVuc2lnbmVkIGNh
cHR1cmVkVmFyaWFibGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FwdHVyZWRWYXJpYWJs
ZXM7IH0KICAgICAgICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAgICAgICBTaGFy
ZWRTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxl
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNw
cAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVy
aXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxp
bWl0cz4KIAogLy8gU2V0IHRvIDEgdG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZp
cm9ubWVudCB2YXJpYWJsZXMuCi0jZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAK
KyNkZWZpbmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMQogCiAjaWYgRU5BQkxFKFJVTl9U
SU1FX0hFVVJJU1RJQ1MpCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM5LDYgKzM5LDE1IEBACiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK3Vuc2lnbmVkIG1heGlt
dW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1h
eGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2ln
bmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlv
bkNvdW50OwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9u
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9y
Q2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1J
bmxpbmluZ0RlcHRoOworCiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXpl
QWZ0ZXJXYXJtVXA7CiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0
ZXJMb25nV2FybVVwOwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1p
emVBbnl0aW1lU29vbjsKQEAgLTUwLDYgKzU5LDkgQEAgaW50MzJfdCBleGVjdXRpb25Db3VudGVy
SW5jcmVtZW50Rm9yUmV0dQogCiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFp
bFJhdGlvOwogCit1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKK3Vuc2ln
bmVkIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3Vu
dFRocmVzaG9sZEJhc2U7CiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JM
b29wOwogCkBAIC05OSw2ICsxMTEsMTggQEAgdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUs
IGNvbnN0IGNoYQogCiB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhN
RTogTXVzdCByZXZpc2l0IHRoZXNlIGhldXJpc3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGlt
aXppbmcgY29tcGlsZXIsIG1heQorICAgIC8vIHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9n
aWNhbGx5IGh1Z2UgY29kZSBibG9ja3MuIFRoZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAv
LyB0aGlzIGlzIHRvIHJlZnVzZSB0byBvcHRpbWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZh
bE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJv
Z3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVu
Y3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhp
bXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsK
KyAgICAKKyAgICBTRVQobWF4aW11bUlubGluaW5nRGVwdGgsIDMpOworCiAgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CiAgICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAw
MCk7CiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CkBAIC0xMDksNiArMTMz
LDkgQEAgdm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50
ZXJJbmNyZW1lbnRGb3JSZXR1cm4sIDE1KTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVT
dWNjZXNzRmFpbFJhdGlvLCA2KTsKKyAgICAKKyAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VU
aHJlc2hvbGQsIDEwMCk7CisgICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAx
MCk7IC8vIFNob3VsZG4ndCBiZSB6ZXJvIGJlY2F1c2Ugc29tZSBvcHMgd2lsbCBzcHVyaW91c2x5
IHRha2Ugc2xvdyBjYXNlLCBmb3IgZXhhbXBsZSBmb3IgbGlua2luZyBvciBjYWNoaW5nLgogCiAg
ICAgU0VUKGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSwgICAgICAgIDIwKTsKICAgICBTRVQo
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcCwgMSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVyaXN0aWNz
IHsKIAorZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlv
bkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0
aW9uRm9yQ2FsbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4g
dW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNh
bGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4
aW11bUlubGluaW5nRGVwdGg7IC8vIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlu
bGluaW5nLCAyID0gb25lIGxldmVsLCBldGMuCisKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBleGVjdXRp
b25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGV4dGVybiBpbnQzMl90
IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwpAQCAtNDEs
NiArNTAsOSBAQCBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50CiAKIGV4
dGVybiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCitleHRl
cm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CitleHRlcm4gdW5zaWdu
ZWQgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZEJhc2U7CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJl
c2hvbGRCYXNlRm9yTG9vcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uaAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOwogICAgIG5hbWVzcGFj
ZSBERkcgewogICAgIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgY2xhc3MgSklUQ29tcGls
ZXI7CiAgICAgfQogCiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1
bmN0aW9uQXNDb25zdHJ1Y3RvcihFeGVjU3RhdGUqKTsKQEAgLTQ2LDYgKzQ3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6
SklUQ29kZUdlbmVyYXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGlsZXI7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111886</attachid>
            <date>2011-10-20 18:26:39 -0700</date>
            <delta_ts>2011-10-21 01:53:24 -0700</delta_ts>
            <desc>fix style</desc>
            <filename>inlining_patch_7.diff</filename>
            <type>text/plain</type>
            <size>103381</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEyIEBA
CisyMDExLTEwLTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4KKworICAgICAgICAqIGJ5dGVjb2Rl
L0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxp
bmVEZXB0aCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9j
ay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRG
Rzo6VW5saW5rZWRCbG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNv
ZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3Qp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpn
ZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+SW5saW5lU3RhY2tF
bnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlND
OjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpTQzo6
REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0aW9u
Rm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBDb2Rl
T3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2Nr
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENvZGVNYXBGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpiYXNlbGluZUNv
ZGVCbG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpP
cGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpnZXRMb2Nh
bCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0
cnVjdEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9maWxlZENvZGVCbG9ja0Zvcik6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1
bnRpbWUvSGV1cmlzdGljcy5jcHA6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxp
emVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTRnVuY3Rpb24uaDoKKwogMjAxMS0xMC0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBDb252ZXJ0VGhpcyBlbWl0cyBzbG93IGNvZGUg
d2hlbiB0aGUgc291cmNlIG5vZGUgaXMga25vd24gdG8gYmUsCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MTIxLDkgKzEyMSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIGhvdFBhdGhCZWdpbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgaG90
UGF0aE90aGVyOwogICAgICAgICBKSVRXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gY2FsbGVlOwor
ICAgICAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4gbGFzdFNlZW5DYWxsZWU7CiAgICAgICAg
IGJvb2wgaGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgICAgICBib29sIGlzQ2FsbCA6IDE7
CiAgICAgICAgIGJvb2wgaXNERkcgOiAxOworICAgICAgICBib29sIGhhc1NlZW5VbmxpbmthYmxl
Q2FsbCA6IDE7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXg7CiAKICAgICAgICAgYm9v
bCBpc0xpbmtlZCgpIHsgcmV0dXJuIGNhbGxlZTsgfQpAQCAtMjUwLDYgKzI1MiwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5h
dGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQg
c2V0QWx0ZXJuYXRpdmUoUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0
ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQogICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZVZlcnNpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHJlc3Vs
dCA9IHJlcGxhY2VtZW50KCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGluIHRoZSBwcm9jZXNz
IG9mIGNyZWF0aW5nIHRoZSBiYXNlbGluZSB2ZXJzaW9uLgorICAgICAgICAgICAgd2hpbGUgKHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFs
dGVybmF0aXZlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVt
cFN0YXRpc3RpY3MoKTsKQEAgLTM3NSwxMCArMzg5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5dGVjb2RlKCkgeyBtX2luc3RydWN0aW9u
cy5jbGVhcigpOyB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9uQ291bnQ7IH0KICAgICAgICAgdm9pZCBz
ZXRJbnN0cnVjdGlvbkNvdW50KHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25Db3VudDsgfQotI2VuZGlmCiAKICNpZiBFTkFCTEUoSklU
KQogICAgICAgICB2b2lkIHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKQEAgLTUzMCwxMCArNTQyLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+
KG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdWludDMyX3Qgc2xv
d0Nhc2VUaHJlc2hvbGQoKSB7IHJldHVybiAxMDA7IH0KICAgICAgICAgYm9vbCBsaWtlbHlUb1Rh
a2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1f
Y291bnRlciA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49
IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49IEhldXJpc3RpY3M6OmNvdWxk
VGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJl
Q2FzZVByb2ZpbGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0
KQpAQCAtNTUxLDIxICs1NjcsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewog
ICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0g
ICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBIZXVyaXN0
aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zm
c2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2FzZUNvdW50ID0gcmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7
CiAgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsK
LSAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNpYWxGYXN0Q2FzZUNvdW50
KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNv
dW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNs
b3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2Vs
eVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
c3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gKHNs
b3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQo
KTsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCArIHNwZWNpYWxGYXN0Q2FzZUNv
dW50KSA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldFJhcmVDYXNlUHJvZmlsZXMoKTsKQEAg
LTk0NCw5ICs5NjAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9u
czsKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25Db3VudDsK
LSNlbmRpZgogCiAgICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJn
dW1lbnRzUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBDb2RlT3JpZ2luX2gKIAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01Niw2ICs1NywxOSBA
QCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25z
dCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKTsgfQorICAgIAorICAgIC8vIFRoZSBpbmxpbmUgZGVwdGggaXMgdGhlIGRlcHRoIG9m
IHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBub3QgaW5saW5lZCwKKyAgICAvLyAyID0gaW5saW5l
ZCBvbmUgZGVlcCwgZXRjLgorICAgIHVuc2lnbmVkIGlubGluZURlcHRoKCkgY29uc3Q7CisgICAg
CisgICAgc3RhdGljIHVuc2lnbmVkIGlubGluZURlcHRoRm9yQ2FsbEZyYW1lKElubGluZUNhbGxG
cmFtZSopOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhl
cikgY29uc3Q7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEdldCB0aGUgaW5saW5lIHN0
YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCisg
ICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CisjZW5kaWYKIH07CiAK
IHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewpAQCAtNjMsNyArNzcsOCBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICB1bnNpZ25lZCBzdGFja09mZnNldDsKICAgICB1bnNpZ25lZCBjYWxs
ZWVWUjsKICAgICBDb2RlT3JpZ2luIGNhbGxlcjsKLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHNJ
bmNsdWRpbmdUaGlzOworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMgOiAz
MTsKKyAgICBib29sIGlzQ2FsbCA6IDE7CiB9OwogCiBzdHJ1Y3QgQ29kZU9yaWdpbkF0Q2FsbFJl
dHVybk9mZnNldCB7CkBAIC03MSw2ICs4NiwzOCBAQCBzdHJ1Y3QgQ29kZU9yaWdpbkF0Q2FsbFJl
dHVybk9mZnNldCB7CiAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldDsKIH07CiAKK2lubGlu
ZSB1bnNpZ25lZCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAxOworICAg
IGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVz
dWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIENvZGVPcmln
aW46OmlubGluZURlcHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5saW5lRGVwdGhGb3JDYWxs
RnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKK30KKyAgICAKK2lubGluZSBib29sIENvZGVPcmlnaW46
Om9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAorICAgICAgICAmJiBpbmxpbmVD
YWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOworfQorICAgIAorI2lmbmRlZiBOREVC
VUcKKy8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRl
ZCBmb3IgZGVidWdnaW5nIG9ubHkuCitpbmxpbmUgVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmln
aW46OmlubGluZVN0YWNrKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0
KGlubGluZURlcHRoKCkpOworICAgIHJlc3VsdC5sYXN0KCkgPSAqdGhpczsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IHJlc3VsdC5zaXplKCkgLSAyOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBj
dXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVzdWx0W2luZGV4LS1dID0gY3VycmVudC0+
Y2FsbGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogaW5saW5lIHVuc2lnbmVk
IGdldENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luKENvZGVPcmlnaW5BdENhbGxSZXR1cm5P
ZmZzZXQqIGRhdGEpCiB7CiAgICAgcmV0dXJuIGRhdGEtPmNhbGxSZXR1cm5PZmZzZXQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0LDkgKzE0NCw5IEBAIEpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQog
CiAgICAgbV9zY29wZU5vZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CiAKLSNpZm5kZWYgTkRFQlVH
CiAgICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSk7CiAKKyNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNfZHVtcHNHZW5l
cmF0ZWRDb2RlKQogICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiA5Nzk0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDEwIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2Nr
KEJhc2kKICAgICAKICAgICBBU1NFUlQoIW1fYmxvY2spOwogICAgIAorICAgIEFTU0VSVChiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52
YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mTG9jYWxzKCkpOworICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9j
ay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW47ICsraSkKICAgICAgICAgbV9ub2Rlc1tpXS5jbGVh
cigpOwogICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwpAQCAtNjI5
LDYgKzYzMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXggbm8KICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNo
OgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAg
LTY4Myw2ICs2ODgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRU
CiAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBTZXRBcmd1
bWVudDoKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRo
ZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gJmluVmFyaWFibGU7
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwyNCBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayB7CiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAgICAgICwgY2Zh
SGFzVmlzaXRlZChmYWxzZSkKICAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBpc0xpbmtlZChmYWxzZSkKKyNlbmRpZgorICAg
ICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQogICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQogICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
ICAgICB7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051
bUxvY2FscykKKyAgICB7CisgICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3
TnVtTG9jYWxzKTsKKyAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1M
b2NhbHMpOworICAgICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
CisgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB9
CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2lu
ZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3Ro
ZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpAQCAtNjIsNiArNzQsMTAgQEAgc3RydWN0IEJh
c2ljQmxvY2sgewogICAgIGJvb2wgaXNPU1JUYXJnZXQ7CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVk
OwogICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
Ym9vbCBpc0xpbmtlZDsKKyNlbmRpZgorICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAg
UHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIApAQCAtNzIsNiArODgsMjEgQEAg
c3RydWN0IEJhc2ljQmxvY2sgewogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
VGFpbDsKIH07CiAKK3N0cnVjdCBVbmxpbmtlZEJsb2NrIHsKKyAgICBCbG9ja0luZGV4IG1fYmxv
Y2tJbmRleDsKKyAgICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOworICAgIGJvb2wgbV9uZWVk
c0Vhcmx5UmV0dXJuTGlua2luZzsKKyAgICAKKyAgICBVbmxpbmtlZEJsb2NrKCkgeyB9CisgICAg
CisgICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAg
ICAgIDogbV9ibG9ja0luZGV4KGJsb2NrSW5kZXgpCisgICAgICAgICwgbV9uZWVkc05vcm1hbExp
bmtpbmcodHJ1ZSkKKyAgICAgICAgLCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKGZhbHNlKQor
ICAgIHsKKyAgICB9Cit9OworICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQog
ICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3Jh
cGgoZ3JhcGgpCisgICAgICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAgICAgLCBtX2N1cnJl
bnRJbmRleCgwKQogICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9j
b25zdGFudFVuZGVmaW5lZChVSU5UX01BWCkKQEAgLTc3LDE1ICs3OCwxOSBAQCBwcml2YXRlOgog
ICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9v
bCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCBmaXJzdEFy
ZywgaW50IGxhc3RBcmcpOwogICAgIAotICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25z
LgorICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBm
YWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KKyAgICBib29sIGhhbmRsZUlubGluaW5n
KGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9k
ZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0
aW9uLCBKU0Z1bmN0aW9uKiwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4
dE9mZnNldCk7CisgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVl
IGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAg
Ym9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwg
SW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24pOwogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGlu
c3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwotICAgIC8v
IFNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgotICAg
IHZvaWQgc2V0dXBQcmVkZWNlc3NvcnMoKTsKKyAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFu
ZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KKyAg
ICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIC8vIEVucXVldWUgYSBibG9jayBv
bnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29y
KFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4
IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlu
a0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7
Ci0gICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCbG9ja0luZGV4PiYgdW5saW5rZWRCbG9ja3Mp
OworICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8VW5saW5rZWRCbG9jaz4m
IHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJs
b2NrPiYgdW5saW5rZWRCbG9ja3MpOwogICAgIC8vIExpbmsgR2V0TG9jYWwgJiBTZXRMb2NhbCBu
b2RlcywgdG8gZW5zdXJlIGxpdmUgdmFsdWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAgZW51bSBQaGlT
dGFja1R5cGUgewogICAgICAgICBMb2NhbFBoaVN0YWNrLApAQCAtMTA1LDEwICsxMTAsOCBAQCBw
cml2YXRlOgogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQg
b2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5k
KQorICAgIE5vZGVJbmRleCBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBv
cGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOwotICAgICAg
ICAKICAgICAgICAgLy8gSXMgdGhpcyBhIGNvbnN0YW50PwogICAgICAgICBpZiAob3BlcmFuZCA+
PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgewogICAgICAgICAgICAgdW5zaWduZWQgY29u
c3RhbnQgPSBvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC0xMjMsMTAg
KzEyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAg
IHJldHVybiBnZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIHZvaWQgc2V0
KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCisgICAgTm9kZUluZGV4IGdldChpbnQgb3Bl
cmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+
cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9w
ZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJ
cyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFu
ZCkpIHsKICAgICAgICAgICAgIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlKTsKQEAgLTEzNiwx
OCArMTQxLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAg
ICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBz
ZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCksIHZhbHVlKTsKKyAgICB9
CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhl
IG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5z
aWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwotCisgICAgICAgIAog
ICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExv
Y2FsKQorICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAv
LyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8g
YmUgbGl2ZQorICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUs
IG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNo
IGNhc2Ugd2UncmUgZG9uZS4KKyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9n
cmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQu
b3AgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZh
cmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJ
bmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBT
ZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAg
IEFTU0VSVChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9k
ZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMg
b2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0xNzksMjEgKzIwMSwzNCBAQCBw
cml2YXRlOgogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRl
eCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAg
ICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAo
bm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxp
dGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAg
ICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2Fk
ZWQgaXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9u
ZS4KKyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5j
aGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0
YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG5vZGVQdHItPm9wID09IFNldEFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8g
V2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsK
ICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5sb2NhbCgpID09IHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9
IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSksIG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ag
PT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAg
ICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3Ag
PT0gU2V0TG9jYWwpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKQEAgLTIxNCw2ICsyNDks
NTEgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJp
YWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZvaWQg
Zmx1c2goaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9w
ZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIGlmIChvcGVy
YW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kICsg
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
aW5kZXggPSBvcGVyYW5kOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZh
cnMuc2V0KG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IEZsdXNoIHx8IG5vZGUub3AgPT0gU2V0
QXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGxvY2FsIGhhcyBhbHJlYWR5IGJl
ZW4gZmx1c2hlZCwgb3IgaWYgaXQncyBhbiBhcmd1bWVudCBpbiB0aGUKKyAgICAgICAgICAgICAg
ICAvLyBmaXJzdCBiYXNpYyBibG9jaywgdGhlbiB0aGVyZSBpcyByZWFsbHkgbm8gbmVlZCB0byBm
bHVzaCBpdC4gSW4gZmFjdAorICAgICAgICAgICAgICAgIC8vIGVtaXR0aW5nIGEgRmx1c2ggaW5z
dHJ1Y3Rpb24gY291bGQganVzdCBjb25mdXNlIHRoaW5ncywgc2luY2UgdGhlCisgICAgICAgICAg
ICAgICAgLy8gZ2V0QXJndW1lbnQoKSBjb2RlIGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBzZWUgYSBG
bHVzaCBvZiBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8obm9k
ZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBO
b2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
KTsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgeworICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5
KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUo
aW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xvY2Fs
UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5k
ZXgpID0gbm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgfQorICAg
IH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1i
ZXIgY29udmVyc2lvbiBvbiBpdC4KICAgICBOb2RlSW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFu
ZCkKQEAgLTY2Myw4ICs3NDMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5
LCAxNj4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4g
bV9sb2NhbFBoaVN0YWNrOwogICAgIAotICAgIFZlY3RvcjxOb2RlKiwgMTY+IG1fcmV1c2FibGVO
b2RlU3RhY2s7Ci0gICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAgICAgICBC
eXRlQ29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC02ODQsNyArNzYy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gQmxvY2tzIGludHJvZHVjZWQgYnkgdGhpcyBjb2Rl
IGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nlc3NvciBsaW5raW5nLgogICAgICAgICAvLyBNYXkgaW5j
bHVkZSB1cCB0byBvbmUgYmFzaWMgYmxvY2sgdGhhdCBpbmNsdWRlcyB0aGUgY29udGludWF0aW9u
IGFmdGVyCiAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbiB0aGUgY2FsbGVyLgotICAgICAgICBW
ZWN0b3I8QmxvY2tJbmRleD4gbV91bmxpbmtlZEJsb2NrczsKKyAgICAgICAgVmVjdG9yPFVubGlu
a2VkQmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUg
Y2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxs
IGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMg
aXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQpAQCAtNjkyLDIyICs3NzAsNDAgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxvY2tzIHRvIGp1bXAgYmFj
ayBpbnRvIHRoaXMgYmxvY2suCiAgICAgICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0ZUJsb2NrSGVh
ZDsKICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVlOworICAgICAg
ICAvLyBEb2VzIHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhpcyBpcyB0
eXBpY2FsbHkgdHJ1ZQorICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhlIG1hY2hp
bmUgY29kZSBibG9jaydzIGlubGluZSBzdGFjayBlbnRyeQorICAgICAgICAvLyAoc2luY2UgdGhh
dCBvbmUgaXMgbm90IGlubGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5lIGNhbGxl
ZQorICAgICAgICAvLyBkaWQgdGhlIGxpbmtpbmcgZm9yIHVzLgorICAgICAgICBib29sIG1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmc7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFj
a0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVl
VlIpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1cm5WYWx1ZTsKKyAgICAgICAgCisg
ICAgICAgIC8vIERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8gaGFuZGxlIHRoZSAo
dW5jb21tb24gYnV0IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8gY2FzZSB3aGVyZSBhIHByb2NlZHVy
ZSB0aGF0IGRvZXMgbm90IHJldHVybiB3YXMgaW5saW5lZC4KKyAgICAgICAgYm9vbCBtX2RpZFJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIERpZCB3ZSBoYXZlIGFueSBlYXJseSByZXR1cm5z
PworICAgICAgICBib29sIG1fZGlkRWFybHlSZXR1cm47CisgICAgICAgIAorICAgICAgICBJbmxp
bmVTdGFja0VudHJ5KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAgICAgIElubGluZVN0YWNrRW50
cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ss
IEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwg
VmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxs
RnJhbWVTdGFydCk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBt
X2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3Ag
PSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFwT3BlcmFu
ZChpbnQgb3BlcmFuZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFuZCkgY29u
c3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisgICAgICAgICAgICBpZiAob3BlcmFu
ZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgeworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBtX2NvbnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4XTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID49IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZCArIG1faW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQpAQCAtNzU2LDYgKzg1MiwxNzkgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1
bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24q
IGV4cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5l
eHRPZmZzZXQpCit7CisgICAgLy8gRmlyc3QsIHRoZSByZWFsbHkgc2ltcGxlIGNoZWNrczogZG8g
d2UgaGF2ZSBhbiBhY3R1YWwgSlMgZnVuY3Rpb24/CisgICAgaWYgKCFleHBlY3RlZEZ1bmN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24tPmlzSG9z
dEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsK
KyAgICAKKyAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3Npbmcg
bWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGNvdWxkCisgICAgLy8gaW5saW5lIGFy
aXR5IGNoZWNrIGZhaWx1cmVzLCBidXQgZm9yIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5IGRvbid0
LgorICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkp
ICsgMSAhPSBsYXN0QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3RhY2sgZGVwdGgsIG9yIGFyZSB3
ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/CisgICAgLy8gSWYgZWl0aGVyIG9m
IHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUuCisgICAgdW5zaWduZWQgZGVw
dGggPSAwOworICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lubGluZVN0YWNr
VG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKKyAgICAgICAgKytkZXB0aDsK
KyAgICAgICAgaWYgKGRlcHRoID49IEhldXJpc3RpY3M6Om1heGltdW1JbmxpbmluZ0RlcHRoKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KKyAgICAgICAgCisg
ICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7IC8vIFJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICB9CisgICAgCisgICAg
Ly8gRG9lcyB0aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3RpY3MvcmVxdWly
ZW1lbnRzIGZvciBiZWluZworICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/CisgICAgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29k
ZUZvckNhbGwpOworICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwocHJvZmlsZWRC
bG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgaGVy
ZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5saW5lIHRoaXMgY29k
ZS4gUHJvY2VlZAorICAgIC8vIHdpdGggcGFyc2luZyB0aGUgY29kZSB0byBnZXQgYnl0ZWNvZGUs
IHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhlIGJ5dGVjb2RlLgorICAgIC8vIE5vdGUgdGhh
dCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBpcyBpbnRlbmRlZCB0byBkaWUgYWZ0ZXIgaGFu
ZGxlSW5saW5pbmcoKQorICAgIC8vIHJldHVybnMuCisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsK
KyAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5wcm9kdWNlQ29k
ZUJsb2NrRm9yKHByb2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBleHBlY3RlZEZ1bmN0aW9u
LT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24p
OworICAgIGlmICghY29kZUJsb2NrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJU
KCFleGNlcHRpb24pOworICAgIAorICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGJ5dGVjb2Rl
LCBjaGVjayBpZiB3ZSByZWFsbHkgY2FuIGlubGluZSBpdC4gVGhpcyBtYXkgZmFpbAorICAgIC8v
IGlmIHRoZSBjb2RlIGJsb2NrIGNvbnRhaW5zIHNvbWUgbmFzdHkgb3Bjb2Rlcy4KKyAgICBpZiAo
IWNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2suZ2V0KCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJpbnRmKCJJ
bmxpbmluZyBleGVjdXRhYmxlICVwLlxuIiwgZXhlY3V0YWJsZSk7CisjZW5kaWYKKyAgICAKKyAg
ICAvLyBOb3cgd2Uga25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRv
IGlubGluaW5nLiBTbyBiZWdpbiB0aGUgcHJvY2VzcworICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBj
YWxsZWUgKGlmIG5lY2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0
aGUgY2FsbGVlCisgICAgLy8gYXJlIGZsdXNoZWQuCisgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBl
Y3RlZEZ1bmN0aW9uKQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhl
eHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldE5vZGVJbmRleCk7CisgICAgCisgICAgZmx1c2go
Y2FsbFRhcmdldCk7CisgICAgZm9yIChpbnQgYXJnID0gZmlyc3RBcmcgKyAxOyBhcmcgPD0gbGFz
dEFyZzsgKythcmcpCisgICAgICAgIGZsdXNoKGFyZyk7CisgICAgCisgICAgaW50IGlubGluZUNh
bGxGcmFtZVN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGxhc3RBcmcpICsg
MTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBjYWxs
IGZyYW1lIGlzIHJlc2VydmVkLgorICAgIGZvciAoaW50IGFyZyA9IGlubGluZUNhbGxGcmFtZVN0
YXJ0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251
bVZhcnM7IGFyZy0tID4gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyAxOykKKyAgICAgICAgbV9wcmVz
ZXJ2ZWRWYXJzLnNldChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoYXJnKSk7CisgICAg
CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggbG9jYWxzLgorICAgIHVuc2ln
bmVkIG5ld051bUxvY2FscyA9IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAg
ICBpZiAobmV3TnVtTG9jYWxzID4gbV9udW1Mb2NhbHMpIHsKKyAgICAgICAgbV9udW1Mb2NhbHMg
PSBuZXdOdW1Mb2NhbHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVu
c3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIH0KKworICAgIElubGluZVN0YWNrRW50cnkg
aW5saW5lU3RhY2tFbnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxp
ZFZpcnR1YWxSZWdpc3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQp
OworICAgIAorICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkg
aGFwcGVucy4KKyAgICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OworICAgIG1f
Y3VycmVudEluZGV4ID0gMDsKKyAgICBwYXJzZUNvZGVCbG9jaygpOworICAgIG1fY3VycmVudElu
ZGV4ID0gb2xkSW5kZXg7CisgICAgCisgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVk
IHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCisgICAg
aWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSAtIDEpIHsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghaW5saW5lU3RhY2tF
bnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChpbmxpbmVTdGFj
a0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCisgICAgICAgICAgICBsaW5r
QmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hl
YWRdLmdldCgpLCBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbHNpdGVCbG9ja0hlYWRdLT5pc0xpbmtlZCk7CisgICAgICAgIAorICAgICAgICAvLyBJ
dCdzIHBvc3NpYmxlIHRoYXQgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgaXMgbm93IG93bmVkIGJ5
IHRoZSBjYWxsZXIuCisgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFj
a0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0g
aW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkKTsKKyAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25l
ZWRzTm9ybWFsTGlua2luZyk7CisgICAgICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVy
LT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9j
YWxsZXItPm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpOworICAgICAgICAgICAgQVNT
RVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0gaW5s
aW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkKTsKKyAgICAgICAgICAgIGlubGluZVN0
YWNrRW50cnkubV9jYWxsZXItPm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0Vu
dHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlQoaW5saW5l
U3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gSWYg
dGhlcmUgd2FzIGEgcmV0dXJuLCBidXQgbm8gZWFybHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25l
LiBXZSBhbGxvdyBwYXJzaW5nIG9mCisgICAgLy8gdGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3
aGF0ZXZlciBiYXNpYyBibG9jayB3ZSdyZSBpbiByaWdodCBub3cuCisgICAgaWYgKCFpbmxpbmVT
dGFja0VudHJ5Lm1fZGlkRWFybHlSZXR1cm4gJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVy
bikgeworICAgICAgICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxh
c3QoKS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKGxhc3RCbG9jay0+YmVnaW4gPT0gbGFzdEJsb2Nr
LT5lbmQgfHwgIW1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBJZiB3ZSBjcmVhdGVkIG5ldyBibG9ja3MgdGhlbiB0aGUgbGFzdCBibG9jayBuZWVkcyBs
aW5raW5nLCBidXQgaW4gdGhlCisgICAgICAgIC8vIGNhbGxlci4gSXQgZG9lc24ndCBuZWVkIHRv
IGJlIGxpbmtlZCB0bywgYnV0IGl0IG5lZWRzIG91dGdvaW5nIGxpbmtzLgorICAgICAgICBpZiAo
IWlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIC8vIEdpdmUgaXQgYSB2YWx1ZSB0aGF0IHdvbid0IHBlcnR1cmIgYmluYXJ5IHNlYXJjaCwg
YW5kIHdvbid0IGJlIGZvdW5kLiBUaGlzIHdvdWxkCisgICAgICAgICAgICAvLyBmYWlsIGlmIG9w
X2NhbGwgY291bGQgYXBwZWFyIGF0IHRoZSBoZWFkIG9mIGEgYmFzaWMgYmxvY2suIFRoYXQgc2hv
dWxkbid0IGhhcHBlbiwKKyAgICAgICAgICAgIC8vIGdpdmVuIHRoZSB3YXkgdGhlIGJ5dGVjb2Rl
IGdlbmVyYXRvciB3b3Jrcy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAg
ICAgICBwcmludGYoIlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20g
YmMjJXUgdG8gYmMjJXUgKGlubGluZSByZXR1cm4gY2FzZSkuXG4iLCBsYXN0QmxvY2ssIGxhc3RC
bG9jay0+Ynl0ZWNvZGVCZWdpbiwgbV9jdXJyZW50SW5kZXgpOworI2VuZGlmCisgICAgICAgICAg
ICBsYXN0QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAg
IEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5pc0Vt
cHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91
bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IGxhc3RC
bG9jay0+Ynl0ZWNvZGVCZWdpbik7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Nh
bGxlci0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKworI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUg
JXAsIGNvbnRpbnVpbmcgY29kZSBnZW5lcmF0aW9uIGF0IGVwaWxvZ3VlLlxuIiwgZXhlY3V0YWJs
ZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElm
IHdlIGdldCB0byB0aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNv
cnQgb2YgdGVybWluYWxzLgorICAgIEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkp
OworICAgIAorICAgIC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2Nr
IHdlJ3JlIGFib3V0IHRvIGNyZWF0ZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
IWlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5M
aW5raW5nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0u
bV9ibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwor
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CisgICAgICAgIEFT
U0VSVChub2RlLm9wID09IEp1bXApOworICAgICAgICBBU1NFUlQobm9kZS50YWtlbkJsb2NrSW5k
ZXgoKSA9PSBOb0Jsb2NrKTsKKyAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCkpOworICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRC
bG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IGZhbHNlOworI2lmICFBU1NFUlRf
RElTQUJMRUQKKyAgICAgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0K
KyAgICAKKyAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3IgdGhlIGNv
bnRpbnVhdGlvbiBhdCB0aGUgY2FsbGVyLgorICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fZ3JhcGguc2l6ZSgpLCBtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
CisgICAgcHJpbnRmKCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMl
bHUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1
cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxpbmVT
dGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpKTsKKyNlbmRpZgorICAgIG1fY3VycmVudEJsb2Nr
ID0gYmxvY2suZ2V0KCk7CisgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5t
X3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3Rh
Y2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXhdLT5i
eXRlY29kZUJlZ2luIDwgbmV4dE9mZnNldCk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxs
ZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkpKTsKKyAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkp
OworICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgcmV0dXJuIGFuZCBjb250aW51ZSB0byBn
ZW5lcmF0ZSBjb2RlIGZvciB0aGUgY2FsbGVyLCBidXQKKyAgICAvLyBpbiB0aGUgbmV3IGJhc2lj
IGJsb2NrLgorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBwcmludGYoIkRvbmUg
aW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24gaW4gbmV3
IGJsb2NrLlxuIiwgZXhlY3V0YWJsZSk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwog
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50
IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxh
c3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBzd2l0Y2ggKGludHJpbnNp
YykgewpAQCAtODUzLDcgKzExMjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9k
dWNlIG1hcmtlcnMgZm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFj
ayBpZiBhIHVzZSBvZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFz
c2VkLCBhcwogICAgIC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRs
eS4KLSAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkg
eworICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgewogICAgICAgICBtX2dyYXBo
Lm1fYXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3Vt
ZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsK
QEAgLTg2OSw3ICsxMTM4LDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBq
dW1wIGRlc3RpbmF0aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7
Ci0gICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOwor
ICAgICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0IHJl
ZnVzZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcworICAgICAgICAgICAgLy8gZW1wdHkuIFRo
aXMgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGlubGluaW5nLCB3aGljaCBtaWdodCBvdGhlcndpc2Ug
Y3JlYXRlCisgICAgICAgICAgICAvLyBzb21lIGVtcHR5IGJsb2NrcyBpbiBzb21lIGNhc2VzLiBX
aGVuIHBhcnNlQmxvY2soKSByZXR1cm5zIHdpdGggYW4gZW1wdHkKKyAgICAgICAgICAgIC8vIGJs
b2NrLCBpdCB3aWxsIGdldCByZXB1cnBvc2VkIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25l
LiBOb3RlIHRoYXQgdGhpcworICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5
dGVjb2RlIHJlc3VsdGluZyBpbiBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKKyAgICAg
ICAgICAgIC8vIGJlIHRydWUgYW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBl
bWl0cyBhIFBoYW50b20gdG8gZm9yY2UgdGhpcworICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4K
KyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jay0+YmVnaW4gIT0gbV9ncmFwaC5zaXplKCkp
CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgp
KTsKKyAgICAgICAgICAgIGVsc2UgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgICAgICAgICBwcmludGYoIlJlZnVzaW5nIHRvIHBsYW50IGp1bXAgYXQgbGltaXQgJXUg
YmVjYXVzZSBibG9jayAlcCBpcyBlbXB0eS5cbiIsIGxpbWl0LCBtX2N1cnJlbnRCbG9jayk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTg4OCw3ICsxMTcwLDEwIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhp
czogewogICAgICAgICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRoaXMoKTsKLSAgICAgICAgICAg
IHNldFRoaXMoYWRkVG9HcmFwaChDb252ZXJ0VGhpcywgb3AxKSk7CisgICAgICAgICAgICBpZiAo
bV9ncmFwaFtvcDFdLm9wID09IENvbnZlcnRUaGlzKQorICAgICAgICAgICAgICAgIHNldFRoaXMo
b3AxKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3Jh
cGgoQ29udmVydFRoaXMsIG9wMSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29udmVy
dF90aGlzKTsKICAgICAgICAgfQogCkBAIC0xNjIxLDEwICsxOTA2LDI5IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
b3BfcmV0OgorICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZy
YW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFs
dWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgc2V0RGly
ZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9k
aWRSZXR1cm4gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+
bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYg
aW5saW5pbmcgY3JlYXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2luZyBhIHJldHVybiwgdGhlbiB3
ZSBuZWVkIHNvbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBsaW5raW5nLgorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFz
dCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSAh
PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIHx8
IG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpIDw9IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhOb0Jsb2NrKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1f
bmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIG9wX2VuZDoKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFj
a1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4s
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9lbmQpOwogCkBAIC0xNjQwLDkgKzE5NDQsMTMgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxUYXJn
ZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBl
bnVtIHsgQ29uc3RhbnRGdW5jdGlvbiwgTGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9
IGNhbGxUeXBlOwogICAgICAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQor
ICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMl
dTogJXUuXG4iLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9j
dXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmlzRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdl
dCkpCiAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDb25zdGFudEZ1bmN0aW9uOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxs
TGlua0luZm8obV9jdXJyZW50SW5kZXgpLmlzTGlua2VkKCkgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKQor
ICAgICAgICAgICAgZWxzZSBpZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
PmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUgJiYgIW1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50
SW5kZXgpKQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gTGlua2VkRnVuY3Rpb247CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBVbmtub3duRnVuY3Rpb247
CkBAIC0xNjU1LDI1ICsxOTYzLDM4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PwogICAgICAg
ICAgICAgICAgIGJvb2wgdXNlc1Jlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGludCBy
ZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxlciBoYXBweQorICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG5leHRPZmZzZXQgPSBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbCk7CiAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3Vy
cmVudEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKICAgICAgICAgICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsKICAgICAgICAgICAgICAg
ICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkg
PT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9wZXJh
bmQgPSBwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIHVz
ZXNSZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJl
ZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2NhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
bV9ncmFwaC5zaXplKCksIG5leHRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBuZXh0T2Zm
c2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbjsKICAgICAg
ICAgICAgICAgICBERkc6OkludHJpbnNpYyBpbnRyaW5zaWM7Ci0gICAgICAgICAgICAgICAgaWYg
KGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGludHJp
bnNpYyA9IG1fZ3JhcGgudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNhbGxU
YXJnZXQpLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOwotICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbjsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25D
b25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGlu
dHJpbnNpYyA9IGV4cGVjdGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxs
VHlwZSA9PSBMaW5rZWRGdW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlu
a0luZm8obV9jdXJyZW50SW5kZXgpLmNhbGxlZS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAg
aW50cmluc2ljID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhmdW5jdGlvbiksIGNh
bGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5k
ZXgpLmxhc3RTZWVuQ2FsbGVlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMg
PSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAg
ICAgICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJ
bnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywg
bGFzdEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50cmluc2ljICE9
IE5vSW50cmluc2ljKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2VydGFpbkFib3V0RXhw
ZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tG
dW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNl
c1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZywgcHJl
ZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFz
IHRvIGJlIGluc2lkZSBicmFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9jYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2VydGFpbkFib3V0RXhwZWN0ZWRG
dW5jdGlvbiwgZXhwZWN0ZWRGdW5jdGlvbiwgZmlyc3RBcmcsIGxhc3RBcmcsIG5leHRPZmZzZXQp
KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJlIGluc2lk
ZSBicmFjZXMuCiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTE3MzIsNyArMjA1MywxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJsZS4KICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXggPT0gYmxv
Y2tCZWdpbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09T
UlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZXZlciBkbyBPU1IgaW50byBhbiBp
bmxpbmVkIGNvZGUgYmxvY2suIFRoYXQgY291bGQgbm90IGhhcHBlbiwgc2luY2UgT1NSCisgICAg
ICAgICAgICAvLyBsb29rcyB1cCB0aGUgY29kZSBibG9jayB0aGF0IGlzIHRoZSByZXBsYWNlbWVu
dCBmb3IgdGhlIGJhc2VsaW5lIEpJVCBjb2RlCisgICAgICAgICAgICAvLyBibG9jay4gSGVuY2Us
IG1hY2hpbmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBpbmxpbmUgY29kZSBi
bG9jay4KKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIpCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50b20gbm9kZSB0byBlbnN1cmUgdGhhdCB0
aGVyZSBpcyBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIHRoaXMgYnl0ZWNvZGUKKyAgICAgICAgICAg
IC8vIG9wLgorICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAgICAgfQpAQCAtMTc4
NCw3ICsyMTEzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8
IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQ
aGlTdGFjaykpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhp
IHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBGbHVzaCB8fCAobV9ncmFwaFt2
YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1
bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCkBAIC0xODI1LDQ2ICsyMTU0LDgzIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgfQogfQogCi12b2lk
IEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCbG9j
a0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2Nr
KEJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHBvc3NpYmxlVGFyZ2V0
cykKIHsKICAgICBBU1NFUlQoYmxvY2stPmVuZCAhPSBOb05vZGUpOworICAgIEFTU0VSVCghYmxv
Y2stPmlzTGlua2VkKTsKKyAgICBBU1NFUlQoYmxvY2stPmVuZCA+IGJsb2NrLT5iZWdpbik7CiAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgIEFTU0VSVChub2Rl
LmlzVGVybWluYWwoKSk7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgY2FzZSBK
dW1wOgogICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dER1cmluZ1BhcnNpbmcoKSkpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAg
ICAgcHJpbnRmKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBt
X2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2Fz
ZSBCcmFuY2g6CiAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVjb2Rl
T2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CiAgICAgICAgIG5vZGUuc2V0Tm90VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkxpbmtlZCBiYXNpYyBibG9jayAl
cCB0byAlcCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9k
ZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCksIG1fZ3Jh
cGgubV9ibG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUubm90VGFr
ZW5CbG9ja0luZGV4KCkpOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBk
ZWZhdWx0OgorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJN
YXJraW5nIGJhc2ljIGJsb2NrICVwIGFzIGxpbmtlZC5cbiIsIGJsb2NrKTsKKyNlbmRpZgogICAg
ICAgICBicmVhazsKICAgICB9CisgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJsb2Nr
LT5pc0xpbmtlZCA9IHRydWU7CisjZW5kaWYKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlu
a0Jsb2NrcyhWZWN0b3I8QmxvY2tJbmRleD4mIHVubGlua2VkQmxvY2tzKQordm9pZCBCeXRlQ29k
ZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tz
KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ld
XS5nZXQoKSwgdW5saW5rZWRCbG9ja3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5s
aW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ld
Lm1fbmVlZHNOb3JtYWxMaW5raW5nKSB7CisgICAgICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5t
X2Jsb2Nrc1t1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpLCB1bmxpbmtlZEJs
b2Nrcyk7CisgICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2lu
ZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5k
ZXggYmxvY2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3sKKyAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsK
KyAgICBpZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgc3VjY2Vzc29yLT5p
c1JlYWNoYWJsZSA9IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRl
eCk7CisgICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJs
b2NrSW5kZXgpOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygp
Cit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewotICAgIGZv
ciAoQmxvY2tJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7
ICsraW5kZXgpIHsKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OworICAgIHdv
cmtsaXN0LmFwcGVuZCgwKTsKKyAgICBtX2dyYXBoLm1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9
IHRydWU7CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxvY2tJ
bmRleCBpbmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFz
dCgpOworICAgICAgICAKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxv
Y2tzW2luZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5lbmQgIT0gTm9Ob2RlKTsK
KyAgICAgICAgQVNTRVJUKGJsb2NrLT5pc0xpbmtlZCk7CisgICAgICAgIAogICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CiAgICAgICAgIEFTU0VSVChub2RlLmlz
VGVybWluYWwoKSk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAg
ICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVk
ZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBlbHNlIGlmIChu
b2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtl
bkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vz
c29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0
LCBpbmRleCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVTdWNj
ZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTE4NzcsMzAgKzIyNDMsMzUgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6YnVpbGRPcGVyYW5kTWFwc0lmTgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICBtX2lkZW50aWZpZXJN
YXAuYWRkKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmltcGwoKSwgaSk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygp
OyArK2kpCi0gICAgICAgIG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKSwgaSk7Cisg
ICAgICAgIG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKSwgaSArIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKICAgICAKICAgICBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzID0gdHJ1
ZTsKIH0KIAotQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50
cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBW
aXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpCitCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQYXJzZXIsIENvZGVC
bG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXggY2Fs
bHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwgVmlydHVhbFJlZ2lzdGVy
IHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCkKICAg
ICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhj
b2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1f
Y2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9ja0hlYWQpCi0gICAgLCBtX2NhbGxlZShieXRl
Q29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKKyAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJu
VmFsdWVWUikKKyAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQorICAgICwgbV9kaWRFYXJseVJldHVy
bihmYWxzZSkKKyAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9w
KQogewotICAgIGlmIChtX2NhbGxlZSkgeworICAgIGlmIChtX2NhbGxlcikgewogICAgICAgICAv
LyBJbmxpbmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNl
ci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgIT0gSW52YWxpZFZpcnR1
YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkICE9
IE5vQmxvY2spOwogICAgICAgICAKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lIGlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpOwotICAgICAgICBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBt
X2NhbGxlZS0+bV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgICAgICBpbmxp
bmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxl
ZVZSID0gY2FsbGVlVlI7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29k
ZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLm51
bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMgPSBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKKyAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IHRydWU7CiAgICAgICAgIGJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1lcygpLmFwcGVuZChpbmxpbmVDYWxsRnJh
bWUpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9ICZieXRlQ29kZVBhcnNlci0+bV9jb2Rl
QmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5sYXN0KCk7CiAgICAgICAgIApAQCAtMTkxOCwxNSAr
MjI4OSwyMSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
Y29kZUJsb2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwot
ICAgICAgICAgICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gYnl0
ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHBh
aXI8SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5t
X2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXgpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAg
ICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0
YW50UmVjb3JkKCkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9jb25zdGFudFJlbWFw
W2ldID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJs
b2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVChjYWxs
ZWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgQVNTRVJUKHJldHVyblZh
bHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChpbmxpbmVD
YWxsRnJhbWVTdGFydCA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKICAgICAgICAgQVNTRVJU
KGNhbGxzaXRlQmxvY2tIZWFkID09IE5vQmxvY2spOwogCiAgICAgICAgIG1faW5saW5lQ2FsbEZy
YW1lID0gMDsKQEAgLTE5MzcsOSArMjMxNCwxNCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2Nr
LT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1faWRlbnRpZmllclJl
bWFwW2ldID0gaTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51
bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKQotICAgICAgICAgICAgbV9jb25zdGFudFJl
bWFwW2ldID0gaTsKKyAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IGkgKyBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleDsKKworICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNM
aW5raW5nID0gZmFsc2U7CiAgICAgfQogICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9jb25zdGFudFJlbWFwLnNpemUoKTsgKytpKQorICAgICAgICBBU1NFUlQobV9jb25zdGFudFJl
bWFwW2ldID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAKICAgICBieXRlQ29k
ZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9IHRoaXM7CiB9CiAKQEAgLTE5NTAsMjEgKzIzMzIs
NDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgIGZvciAodW5z
aWduZWQganVtcFRhcmdldEluZGV4ID0gMDsganVtcFRhcmdldEluZGV4IDw9IGNvZGVCbG9jay0+
bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyArK2p1bXBUYXJnZXRJbmRleCkgewogICAgICAgICAvLyBU
aGUgbWF4aW11bSBieXRlY29kZSBvZmZzZXQgdG8gZ28gaW50byB0aGUgY3VycmVudCBiYXNpY2Js
b2NrIGlzIGVpdGhlciB0aGUgbmV4dCBqdW1wIHRhcmdldCwgb3IgdGhlIGVuZCBvZiB0aGUgaW5z
dHJ1Y3Rpb25zLgogICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGp1bXBUYXJnZXRJbmRleCA8IGNv
ZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpID8gY29kZUJsb2NrLT5qdW1wVGFyZ2V0KGp1
bXBUYXJnZXRJbmRleCkgOiBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiUGFyc2luZyBieXRlY29k
ZSB3aXRoIGxpbWl0ICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIG1faW5saW5lU3Rh
Y2tUb3AtPmV4ZWN1dGFibGUoKSwgbGltaXQsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2Fs
bEZyYW1lKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDwgbGltaXQpOwogCiAgICAgICAgIC8vIExvb3Ag
dW50aWwgd2UgcmVhY2ggdGhlIGN1cnJlbnQgbGltaXQgKGkuZS4gbmV4dCBqdW1wIHRhcmdldCku
CiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFk
b3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX2dyYXBoLnNpemUoKSwgbV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrLmdldCgpOwotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpOwotICAgICAgICAgICAgbV9ncmFw
aC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGlmICghbV9j
dXJyZW50QmxvY2spIHsKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gdXNlIHRo
ZSBsYXN0IGJsb2NrLgorICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaC5tX2Jsb2Nrcy5pc0Vt
cHR5KCkgJiYgbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCktPmJlZ2luID09IG1fZ3JhcGgubV9ibG9j
a3MubGFzdCgpLT5lbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEg
YmxvY2sgYmVsb25naW5nIHRvIHVzLgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxp
bmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBp
dHMgYnl0ZWNvZGUgYmVnaW4gYW5kIGNvbnRpbnVlLgorICAgICAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOworI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWFzY3JpYmlu
ZyBieXRlY29kZSBpbmRleCBvZiBibG9jayAlcCBmcm9tIGJjIyV1IHRvIGJjIyV1IChwZWVwaG9s
ZSBjYXNlKS5cbiIsIG1fY3VycmVudEJsb2NrLCBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdp
biwgbV9jdXJyZW50SW5kZXgpOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
YWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgsIG1fZ3JhcGguc2l6ZSgpLCBt
X251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3JlYXRpbmcgYmFzaWMgYmxvY2sgJXAs
ICMlbHUgZm9yICVwIGJjIyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBt
X2N1cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxp
bmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9n
cmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5t
X2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luIDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxp
bmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIXBhcnNlQmxvY2sobGltaXQp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIC8vIFdlIHNob3Vs
ZCBub3QgaGF2ZSBnb25lIGJleW9uZCB0aGUgbGltaXQuCiAgICAgICAgICAgICBBU1NFUlQobV9j
dXJyZW50SW5kZXggPD0gbGltaXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBz
aG91bGQgaGF2ZSBwbGFudGVkIGEgdGVybWluYWwsIG9yIHdlIGp1c3QgZ2F2ZSB1cCBiZWNhdXNl
CisgICAgICAgICAgICAvLyB3ZSByZWFsaXplZCB0aGF0IHRoZSBqdW1wIHRhcmdldCBpbmZvcm1h
dGlvbiBpcyBpbXByZWNpc2UsIG9yIHdlCisgICAgICAgICAgICAvLyBhcmUgYXQgdGhlIGVuZCBv
ZiBhbiBpbmxpbmUgZnVuY3Rpb24uCisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2st
PmJlZ2luID09IG1fZ3JhcGguc2l6ZSgpIHx8IG1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSB8
fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYg
bV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmVuZCA9IG1fZ3JhcGguc2l6ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2sgPSAwOwogICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAg
ICB9CiAKQEAgLTE5NzksMTIgKzIzODgsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2Uo
KQogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50
SW5kZXgpOwogICAgIAotICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlz
LCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2NrLCBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKTsKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgbV9j
b2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
CiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRy
eS5tX3VubGlua2VkQmxvY2tzKTsKLSAgICBzZXR1cFByZWRlY2Vzc29ycygpOworICAgIGRldGVy
bWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHByb2Nlc3NQaGlTdGFjazxMb2NhbFBoaVN0YWNrPigp
OwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1bWVudFBoaVN0YWNrPigpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLWJvb2wgY2FuQ29tcGlsZU9wY29k
ZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit0ZW1wbGF0ZTxib29sICgqY2FuSGFuZGxlT3Bjb2Rl
KShPcGNvZGVJRCk+Citib29sIGNhbkhhbmRsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyID0gY29kZUJsb2NrLT5nbG9iYWxEYXRh
KCktPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKQEAgLTQzLDcgKzQ0LDcgQEAgYm9vbCBj
YW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbAogICAgICAgICBzd2l0Y2ggKGludGVy
cHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5v
cGNvZGUpKSB7CiAjZGVmaW5lIERFRklORV9PUChvcGNvZGUsIGxlbmd0aCkgICAgICAgICAgIFwK
ICAgICAgICAgY2FzZSBvcGNvZGU6ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg
ICAgaWYgKCFjYW5Db21waWxlT3Bjb2RlKG9wY29kZSkpICBcCisgICAgICAgICAgICBpZiAoIWNh
bkhhbmRsZU9wY29kZShvcGNvZGUpKSAgXAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBieXRlY29kZU9mZnNldCArPSBsZW5ndGg7ICAg
ICAgIFwKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTgsNiArNTksMTYgQEAgYm9vbCBjYW5Db21w
aWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbAogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBj
YW5IYW5kbGVPcGNvZGVzPGNhbkNvbXBpbGVPcGNvZGU+KGNvZGVCbG9jayk7Cit9CisKK2Jvb2wg
Y2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY2Fu
SGFuZGxlT3Bjb2RlczxjYW5JbmxpbmVPcGNvZGU+KGNvZGVCbG9jayk7Cit9CisKICNlbmRpZgog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjAg
KzI2LDQyIEBACiAjaWZuZGVmIERGR0NhcGFiaWxpdGllc19oCiAjZGVmaW5lIERGR0NhcGFiaWxp
dGllc19oCiAKKyNpbmNsdWRlICJERkdJbnRyaW5zaWMuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgi
CisjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLSNpbmNsdWRlICJERkdOb2RlLmgiCi0KIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogLy8gRmFzdCBj
aGVjayBmdW5jdGlvbnM7IGlmIHRoZXkgcmV0dXJuIHRydWUgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5
IHRvCiAvLyBjaGVjayBvcGNvZGVzLgotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2Rl
QmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFt
KENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1
bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVl
OyB9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQor
eworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNz
OjptYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9Citp
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjpt
YXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9Citp
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJp
c3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVj
dGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1
Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9w
dGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CisKK2lubGluZSBib29sIG1p
Z2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJl
dHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVt
RnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGlu
ZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIE9wY29kZSBjaGVja2luZy4KIGlubGluZSBib29sIGNh
bkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCkBAIC0xNDYsMTQgKzE2OCw0NSBAQCBp
bmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wCiAgICAgfQogfQogCitpbmxp
bmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3Bjb2RlSUQpCit7CisgICAgc3dpdGNo
IChvcGNvZGVJRCkgeworICAgICAgICAKKyAgICAvLyBUaGVzZSBvcGNvZGVzIHdvdWxkIGJlIGVh
c3kgdG8gc3VwcG9ydCB3aXRoIGlubGluaW5nLCBidXQgd2UgY3VycmVudGx5IGRvbid0IGRvIGl0
LgorICAgIC8vIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBzY29wZSBjaGFpbiB3aWxsIG5vdCBiZSBz
ZXQgY29ycmVjdGx5LgorICAgIGNhc2Ugb3BfZ2V0X3Njb3BlZF92YXI6CisgICAgY2FzZSBvcF9w
dXRfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9wX3Jlc29sdmU6CisgICAgY2FzZSBvcF9yZXNvbHZl
X2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKKyAgICAgICAgCisgICAgLy8gVHJp
dmlhbCB0byBzdXBwb3J0IHdpdGggdGhlIGNvcHkgcHJvcGFnYXRpb24gbWFjaGluZSB3ZSBhbHJl
YWR5IGhhdmUsIGJ1dCB0aGUgZ2x1ZQorICAgIC8vIGlzbid0IHRoZXJlLCB5ZXQuCisgICAgY2Fz
ZSBvcF9nZXRfY2FsbGVlOgorICAgICAgICAKKyAgICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJl
Y3RseSByZW1hcCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCisgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bjb2RlKG9wY29kZUlEKTsKKyAgICB9Cit9CisKIGJv
b2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKik7Citib29sIGNhbklubGluZU9wY29kZXMo
Q29kZUJsb2NrKik7CiAjZWxzZSAvLyBFTkFCTEUoREZHX0pJVCkKIGlubGluZSBib29sIG1pZ2h0
Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1p
Z2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBi
b29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxz
ZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJs
b2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJv
b2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBm
YWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVy
biBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVy
biBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKikg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogaW5saW5lIGJv
b2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0xNzYsNiArMjI5LDE2
IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnUKICAgICByZXR1cm4g
bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5Db21waWxl
T3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZv
ckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVu
Y3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5saW5lT3Bjb2Rlcyhjb2RlQmxvY2spOwor
fQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gREZHQ2FwYWJpbGl0aWVzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5Nzk0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw0NiBAQCBjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NE
CiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKHVuc2ln
bmVkIGFtb3VudCkKK3sKKyAgICB3aGlsZSAoYW1vdW50LS0gPiAwKQorICAgICAgICBwcmludGYo
IiAiKTsKK30KKwordm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4IG5vZGVJbmRl
eCkKK3sKKyAgICBpZiAoIW5vZGVJbmRleCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5v
ZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBOb2RlJiBwcmV2aW91c05vZGUg
PSBhdChub2RlSW5kZXggLSAxKTsKKyAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5s
aW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5saW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3Jp
Z2luLmlubGluZVN0YWNrKCk7CisgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHBy
ZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKKyAg
ICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgeworICAgICAgICBpZiAocHJldmlvdXNJ
bmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUgIT0gY3VycmVudElubGluZVN0YWNrW2ldLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaW5kZXhPZkRpdmVyZ2VuY2UgPSBpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHJpbnQgdGhl
IHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7
IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykgeworICAgICAgICBwcmludFdoaXRlU3BhY2UoaSAq
IDIpOworICAgICAgICBwcmludGYoIjwtLSAlcFxuIiwgcHJldmlvdXNJbmxpbmVTdGFja1tpXS5p
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpOworICAgIH0KKyAgICAKKyAgICAvLyBQcmludCB0
aGUgcHVzaGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNlOyBpIDwg
Y3VycmVudElubGluZVN0YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAgIHByaW50V2hpdGVTcGFj
ZShpICogMik7CisgICAgICAgIHByaW50ZigiLS0+ICVwXG4iLCBjdXJyZW50SW5saW5lU3RhY2tb
aV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6
OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAg
Tm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC05MSw2ICsxMzEsOSBAQCB2b2lkIEdyYXBo
OjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIEFTU0VSVChyZWZDb3VudCk7
CiAgICAgICAgIC0tcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIGR1bXBDb2RlT3JpZ2luKG5v
ZGVJbmRleCk7CisgICAgcHJpbnRXaGl0ZVNwYWNlKChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVw
dGgoKSAtIDEpICogMik7CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93
IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTI0MCw3ICsyODMsNyBAQCB2b2lkIEdyYXBoOjpkdW1w
KENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
c1tiXS5nZXQoKTsKLSAgICAgICAgcHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1KTogICVzXG4iLCAo
aW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1Ig
dGFyZ2V0KSIgOiAiIik7CisgICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNc
biIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIi
IDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAi
Iik7CiAgICAgICAgIHByaW50ZigiICB2YXJzOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFI
YXNWaXNpdGVkKQogICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQs
IHN0ZG91dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlz
IG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVt
cGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChDb2RlQmxvY2sqID0g
MCk7CiAgICAgdm9pZCBkdW1wKE5vZGVJbmRleCwgQ29kZUJsb2NrKiA9IDApOworCisgICAgLy8g
RHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhl
IGNvZGUgb3JpZ2luIG9mIHRoZQorICAgIC8vIHByZWNlZGluZyBub2RlLgorICAgIHZvaWQgZHVt
cENvZGVPcmlnaW4oTm9kZUluZGV4KTsKICNlbmRpZgogCi0gICAgQmxvY2tJbmRleCBibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVk
IGJ5dGVjb2RlQmVnaW4pOworICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2lu
KTsKIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CkBAIC0yNDgsMTggKzI1MiwxOCBAQCBwdWJsaWM6
CiAgICAgewogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBvcGVyYXRvcigpKEJsb2NrSW5kZXgq
IGJsb2NrSW5kZXgpIGNvbnN0CisgICAgdW5zaWduZWQgb3BlcmF0b3IoKShVbmxpbmtlZEJsb2Nr
KiB1bmxpbmtlZEJsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV9i
bG9ja3NbKmJsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOworICAgICAgICByZXR1cm4gbV9ncmFw
aC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2NrLT5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOwog
ICAgIH0KIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKLWlubGluZSBCbG9j
a0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5k
ZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCitpbmxpbmUgQmxvY2tJbmRleCBH
cmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYg
YmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQogewotICAgIHJldHVybiAqV1RGOjpiaW5h
cnlTZWFyY2hXaXRoRnVuY3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4oYmxvY2tzLmJlZ2luKCks
IGJsb2Nrcy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJy
YXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiBXVEY6OmJp
bmFyeVNlYXJjaFdpdGhGdW5jdG9yPFVubGlua2VkQmxvY2ssIHVuc2lnbmVkPihibG9ja3MuYmVn
aW4oKSwgYmxvY2tzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlNdXN0QmVQcmVzZW50
SW5BcnJheSwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSktPm1fYmxvY2tJbmRleDsK
IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5LDEzICszOSwyMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhp
dCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnksIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCkKK3ZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxh
dGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVj
b3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgogICAgIGV4aXQubV9jaGVjay5s
aW5rKHRoaXMpOwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYo
c3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4
ICAiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09m
ZnNldCgpKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwg
KGludClleGl0Lm1fbm9kZUluZGV4KTsKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVw
ICIsIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKTsKKyAgICB9CisgICAg
ZnByaW50ZihzdGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgZGVidWdPZmZzZXQoKSk7
CiAgICAgZXhpdC5kdW1wKHN0ZGVycik7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0Vf
U1BFQ1VMQVRJT05fRkFJTFVSRSkKQEAgLTQ4MiwxOSArNDg5LDU1IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5k
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQdHIoYWRk
cmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86
OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUu
CisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lKHMpLgogICAgIAogICAgIEFTU0VSVChjb2RlQmxv
Y2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgp
KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7
CiAgICAgCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdp
bjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsK
KyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBG
b3IoYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIpOworICAgICAgICB1bnNpZ25lZCByZXR1cm5C
eXRlY29kZUluZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9Q
Q09ERV9MRU5HVEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCog
bWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVk
LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2Rl
TWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAgIEFTU0VSVChtYXBw
aW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAor
ICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRD
b2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKworICAgICAg
ICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZVZSKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKEdQUkluZm86OnJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9z
Y29wZUNoYWluKSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1l
R1BSOworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KSB7CisgICAgICAgICAgICBhZGRQdHIoSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2Fs
bGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAK
KyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdU
MiwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOworICAgICAgICBzdG9yZVB0cihjYWxs
ZXJGcmFtZUdQUiwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5Q
QykpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzKSkpLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86
OnJlZ1QxLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKKyAgICB9CisgICAgCisgICAgaWYg
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgYWRkUHRyKEltbTMy
KGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAogICAg
IC8vIDE0KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCiAg
ICAgCi0gICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNo
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENv
ZGVNYXAuc2l6ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsK
KyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBk
ZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CisgICAgCisgICAgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJ
bmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBBU1NFUlQobWFwcGluZyk7
Ci0gICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fYnl0ZWNvZGVJ
bmRleCk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21h
Y2hpbmVDb2RlT2Zmc2V0KTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5n
ZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKICAg
ICAKICAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVn
aXN0ZXIpOwogICAgIApAQCAtNTA2LDIwICs1NDksMjggQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUgogI2VuZGlmCiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6OmxpbmtP
U1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCitWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgSklUQ29tcGlsZXI6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29k
ZWRDb2RlTWFwOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAg
QVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+
aml0Q29kZU1hcCgpKTsKLSAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1h
cCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY29k
ZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5q
aXRDb2RlTWFwKCkpOworICAgIAorICAgIHN0ZDo6cGFpcjxIYXNoTWFwPENvZGVCbG9jayosIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQg
PSBtX2RlY29kZWRDb2RlTWFwcy5hZGQoY29kZUJsb2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PigpKTsKKyAgICAKKyAgICBpZiAocmVzdWx0LnNlY29uZCkKKyAgICAgICAgY29k
ZUJsb2NrLT5qaXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuZmlyc3QtPnNlY29uZCk7CiAgICAg
CisgICAgcmV0dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kOworfQorCit2b2lkIEpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQorewogICAgIE9TUkV4
aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVn
aW4oKTsKICAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZl
Lm9zckV4aXRzKCkuZW5kKCk7CiAgICAgCiAgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0Vu
ZCkgewogICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKLSAgICAgICAg
ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292
ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICBleGl0
U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3Zlcnko
ZXhpdC5tX3JlY292ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQzMCw4ICs0MzAsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVCb2R5KCk7CiAgICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKIAotICAgIHZvaWQgZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSos
IFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAg
dm9pZCBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJl
Y292ZXJ5Kik7CiAgICAgdm9pZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmKTsKKyAgICAK
KyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGU7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJs
ZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5m
byk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSA9PSBjb2RlQmxvY2so
KS0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIAogICAgIC8vIFRoZSBnbG9iYWxE
YXRhLCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0cnMuCiAgICAgSlNH
bG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC00NDEsNyArNDU0LDkgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIFRoZSBjb2RlQmxvY2sgY3VycmVudGx5IGJlaW5nIGdlbmVyYXRlZCwgdXNlZCB0byBh
Y2Nlc3MgaW5mb3JtYXRpb24gc3VjaCBhcyBjb25zdGFudCB2YWx1ZXMsIGltbWVkaWF0ZXMuCiAg
ICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLQorICAgIAorICAgIEhhc2hNYXA8Q29kZUJsb2Nr
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29kZWRDb2RlTWFwczsK
KyAgICAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUsIGluY2x1ZGlu
ZyBleGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICAvLyBDb3VudCBvZiB0aGUgbnVt
YmVyIG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLgogICAgIFZlY3RvcjxD
YWxsUmVjb3JkPiBtX2NhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNo
YXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBtYWNybyhQ
aGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhpLCAwKSBcCisgICAgbWFj
cm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTWFya2VyIGZvciBh
cmd1bWVudHMgYmVpbmcgc2V0LiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXApAQCAt
NDg1LDYgKzQ4Niw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAg
ICAgICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2Ug
Rmx1c2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzNiw3ICs4MzgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAK
ICAgICBib29sIHNob3VsZEdlbmVyYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlZkNv
dW50ICYmIG9wICE9IFBoaTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0gUGhp
ICYmIG9wICE9IEZsdXNoOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlZkNvdW50KCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDk3OTQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCwxOCArNjQsMzEgQEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsg
cmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdm9pZCBlbnN1cmVMb2Nh
bHMoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSA8PSBtX2xvY2Fscy5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xv
Y2Fscy5zaXplKCk7CisgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShzaXplKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAg
ICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xk
U2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKLSAgICAgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShpZHgg
KyAxKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9sb2NhbHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1
bHRWYWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGVuc3VyZUxvY2FscyhpZHggKyAxKTsKICAg
ICAgICAgCiAgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKICAgICB9CiAgICAgCisgICAg
VCBnZXRMb2NhbChzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fs
cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIG1fbG9jYWxzW2lkeF07CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0QXJn
dW1lbnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNp
b24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNiArNTc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBSZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBQ
aGk6CisgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNh
c2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk3OTQy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjM4LDYgKzYzOCw3IEBAIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqIGV4ZWMs
IENhbGxMaW4KICAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCBzdGF0aWNfY2FzdDxpbnQ+KGV4
ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpID09IGNhbGxlZUNvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzKSB7CiAgICAgICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkp
OwogICAgICAgICBjYWxsTGlua0luZm8uY2FsbGVlLnNldChleGVjLT5jYWxsZXJGcmFtZSgpLT5n
bG9iYWxEYXRhKCksIGNhbGxMaW5rSW5mby5ob3RQYXRoQmVnaW4sIGNhbGxlckNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby5sYXN0U2Vl
bkNhbGxlZS5zZXQoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+Z2xvYmFsRGF0YSgpLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwogICAgICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhjYWxsTGlua0luZm8uaG90UGF0aE90aGVyLCBjb2RlUHRyKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChjYWxsZWVDb2RlQmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0cnVjdGlvbiwgc2luY2Ug
d2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQogICAgICAgICAvLyBTZXRMb2NhbCBhbmQgd2hh
dGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNhbWUKICAgICAg
ICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgotICAgICAgICBBU1NFUlQobV9i
eXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAg
ICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbkZvck9TUiA9PSBub2RlLmNvZGVPcmlnaW4pOwogICAg
ICAgICBOb2RlJiBuZXh0Tm9kZSA9IGF0KG1fY29tcGlsZUluZGV4ICsgMSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBPZGRseSwgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGJ5dGVjb2RlIGluZGV4IGZv
ciB0aGUgbmV4dCBub2RlIHRvIGJlCkBAIC04NjEsNyArODYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBzdGF0ZW1lbnQpIHdvdWxkIGJl
IGRlYWQgYW55d2F5IC0gc28gdGhlIGZhY3QgdGhhdCBERkcgd291bGQgaGF2ZQogICAgICAgICAv
LyBhbHJlYWR5IG1hZGUgdGhlIGFzc2lnbm1lbnQsIGFuZCBiYWtlZCBpdCBpbnRvIHRoZSByZWdp
c3RlciBmaWxlIGR1cmluZwogICAgICAgICAvLyBPU1IgZXhpdCwgd291bGQgbm90IGJlIHZpc2li
bGUgdG8gdGhlIG9sZCBKSVQgaW4gYW55IHdheS4KLSAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9y
T1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luOwogICAgICAgICAKICAgICAgICAgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKQEAgLTE4OTAsNyArMTg5MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CiAgICAgICAgIGlmIChpc09iamVjdFBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAg
ICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE5MTMsMTEgKzE5MTUsMTYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAg
ICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHRo
aXNWYWx1ZSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIzOTEsNiArMjM5OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBo
aToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAg
IGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
MTMgKzEwOSwxMyBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zCiBP
U1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykKICAg
ICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCi0gICAgLCBtX2J5dGVjb2RlSW5k
ZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5t
X2NvZGVPcmlnaW5Gb3JPU1IpCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkK
ICAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQogICAgICwgbV92YXJp
YWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGpp
dC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKLSAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CisgICAgQVNTRVJUKG1fY29kZU9y
aWdpbi5pc1NldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCiAgICAgICAgIG1fYXJndW1lbnRzW2Fy
Z3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1th
cmd1bWVudF0pOwogICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1f
dmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKQEAgLTI2MCw2ICsyNjAsMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogewogICAgIEFTU0VSVChtX2NvbXBp
bGVPa2F5KTsKICAgICBBU1NFUlQobV9jb21waWxlSW5kZXggPT0gYmxvY2suYmVnaW4pOworICAg
IAorICAgIGlmICghYmxvY2suaXNSZWFjaGFibGUpIHsKKyAgICAgICAgbV9jb21waWxlSW5kZXgg
PSBibG9jay5lbmQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoYmxvY2suaXNP
U1JUYXJnZXQpCiAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KGJsb2NrKTsKQEAgLTI5MSwx
MSArMjk2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAg
ICB9CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7Ci0gICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gc3RkOjpudW1lcmljX2xpbWl0
czx1aW50MzJfdD46Om1heCgpOworICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IENvZGVPcmlnaW4o
KTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJ
bmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0gYXQobV9jb21waWxlSW5kZXgpOwotICAgICAg
ICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsK
KyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luOwogICAgICAgICBp
ZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcg
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxl
SW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKQEAgLTM2Niw3ICszNzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAg
IEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IDA7
CisgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdpbigwKTsKIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fYXJndW1l
bnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5Nzk0
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2NoZWNrOwogICAgIE5vZGVJbmRleCBtX25vZGVJbmRl
eDsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgQ29kZU9yaWdpbiBtX2NvZGVP
cmlnaW47CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OwogICAgIApAQCAtNTY2
LDcgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX2FyZ3Vt
ZW50czsKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVzOwogICAgIGludCBt
X2xhc3RTZXRPcGVyYW5kOwotICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKKyAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvck9TUjsKICAgICAKICAgICBBYnN0cmFjdFN0YXRl
IG1fc3RhdGU7CiAgICAgCkBAIC04MDEsNyArODAxLDYgQEAgaW5saW5lIFNwZWN1bGF0aXZlSklU
OjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5t
X251bVBhcmFtZXRlcnMpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFy
cykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQz
Ml90Pjo6bWF4KCkpCiAgICAgLCBtX3N0YXRlKG1faml0LmNvZGVCbG9jaygpLCBtX2ppdC5ncmFw
aCgpKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcg
QEAgQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsZXJGcmFtZVNsbwogICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IG1hY2hpbmVDYWxsZXItPmNvZGVCbG9jaygpLT5jb2RlT3JpZ2luRm9y
UmV0dXJuKHJldHVyblBDKCkpOwogICAgIAogICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxp
bmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1l
OykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG5leHRJbmxpbmVDYWxsRnJhbWUgPSBpbmxp
bmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWU7Cisg
ICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgCiAgICAgICAgIENhbGxGcmFt
ZSogaW5saW5lZENhbGxlciA9IG1hY2hpbmVDYWxsZXIgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlz
aW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MTgsMTIgKzcxOCwxMyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxsZWUsIENvZGVC
bG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9jaywgSklUOjpD
b2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2FsbGVyQXJnQ291
bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2RlQmxvY2spOwot
CisgICAgCiAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbGluayBjYWxscyB3aXRoIHRoZSBleGFj
dCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgY2FsbCBj
YWxsZWVDb2RlQmxvY2sgaXMgbnVsbCBzbyB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXMgdW5p
bXBvcnRhbnQKICAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCAoY2FsbGVyQXJnQ291bnQgPT0g
Y2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKSB7CiAgICAgICAgIEFTU0VSVCghY2Fs
bExpbmtJbmZvLT5pc0xpbmtlZCgpKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0
KCpnbG9iYWxEYXRhLCBjYWxsTGlua0luZm8tPmhvdFBhdGhCZWdpbiwgY2FsbGVyQ29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5sYXN0
U2VlbkNhbGxlZS5zZXQoKmdsb2JhbERhdGEsIGNhbGxlckNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxlZSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGNhbGxMaW5rSW5m
by0+aG90UGF0aE90aGVyLCBjb2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjYWxsZWVDb2Rl
QmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9u
IDk3OTQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dD
YXNlKEluc3RydWN0CiAgICAgLy8gRG9uZSEgLSByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGgu
CiAgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9j
YWxsX2V2YWwpKTsKICAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVf
TEVOR1RIKG9wX2NvbnN0cnVjdCkpOworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBp
ZiAobV9jYW5CZU9wdGltaXplZCkgeworICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNl
UHJvZmlsZSA9IG1fY29kZUJsb2NrLT5yYXJlQ2FzZVByb2ZpbGUobV9jb2RlQmxvY2stPm51bWJl
ck9mUmFyZUNhc2VQcm9maWxlcygpIC0gMSk7CisgICAgICAgIEFTU0VSVCgodW5zaWduZWQpcmFy
ZUNhc2VQcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IG1fYnl0ZWNvZGVPZmZzZXQpOworICAg
ICAgICBhZGQzMihJbW0zMigxKSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1f
Y291bnRlcikpOworICAgIH0KKyNlbmRpZgogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwg
T1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7CiAKICAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5j
dGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lv
biA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDE0LDcgKzIwMTQsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemVfZnJvbQogCiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFj
ZW1lbnQoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIHByaW50Zigi
UmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2Vt
ZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2
ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpKTsKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNh
bGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3Mv
ZmFpbCAldS8ldSIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworICAgICAgICBDYWxs
RnJhbWUqIGNhbGxlckZyYW1lID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgICAgICBp
ZiAoY2FsbGVyRnJhbWUpCisgICAgICAgICAgICBwcmludGYoIiwgY2FsbGVyRnJhbWUgPSAlcCwg
cmV0dXJuUEMgPSAlcCwgY2FsbGVyIGNvZGUgYmxvY2sgPSAlcCIsIGNhbGxlckZyYW1lLCBjYWxs
RnJhbWUtPnJldHVyblBDKCkudmFsdWUoKSwgY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAg
ICAgICAgcHJpbnRmKCJcbiIpOwogI2VuZGlmCiAgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCkBAIC0yMDIyLDYgKzIwMjYsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cHRpbWl6ZV9mcm9tCiAjZW5kaWYKICAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNv
ZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNv
b24oKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk3OTQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw2ICsz
ODQsMjQgQEAgdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlVmlydHVhbAogICAgIEJh
c2U6OmNsZWFyQ29kZVZpcnR1YWwoKTsKIH0KIAorQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sK
KyAgICBDb2RlQmxvY2sqIHJlc3VsdDsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAg
ICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgcmVzdWx0ID0g
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQorICAg
ICAgICByZXN1bHQgPSByZXN1bHQtPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJUKHJlc3VsdCk7
CisgICAgQVNTRVJUKHJlc3VsdC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxl
Ojpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluTm9kZSwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYykKIHsKICAgICBBU1NF
UlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwpAQCAtNDA2LDExICs0
MjQsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdAogICAgIHJl
dHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25F
eGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFp
bk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5kLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBleGNl
cHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6
OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU2NvcGVD
aGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGlsYXRpb25LaW5k
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNPYmplY3QqJiBl
eGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQdHI8RnVuY3Rpb25C
b2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9k
ZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0
ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFs
LCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2Jh
bERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFsT2JqZWN0LCAwLCAw
LCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VT
dHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAoIWJvZHkpIHsKICAg
ICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDIw
LDggKzQzOCw2IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXgKICAg
ICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsKICAgICByZWNvcmRQ
YXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlhYmxlcygpLCBib2R5
LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQoKTsKLQogICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0OwogICAgIEFTU0VSVCgoY29tcGlsYXRpb25L
aW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25L
aW5kKSk7CiAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKHRoaXMs
IEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRlcigpLCBzb3VyY2Uo
KS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkp
OwpAQCAtNDQyLDcgKzQ1OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0KiBleGNlcHRpb247
Ci0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29k
ZUJsb2NrRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9w
dGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNl
cHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJv
ZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5O
b2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0
Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwogICAgIGlmICghbmV3Q29kZUJs
b2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01MDIsNyArNTE4LDcgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAogICAgIEFTU0VSVCgo
aml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3IoZXhlYywgc2NvcGVD
aGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6aW5nQ29tcGlsYXRp
b24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNlcHRpb24pOworICAg
IE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9j
a0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxh
dGlvbiwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9j
aykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3
ICs0NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiwgU2NvcGVD
aGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2Jq
ZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
cHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCosIFNjb3BlQ2hhaW5Ob2RlKiwgQ29t
cGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlv
bik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywg
U2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVj
ID0gMCkKICAgICAgICAgewpAQCAtNTc0LDkgKzU3NCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwogICAgICAg
ICB9CiAKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAgIH0KKyAgICAg
ICAgCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
ICAgICAgICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVl
LmdldCgpOyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9IC8vIEluY2x1ZGluZyAndGhpcychCisgICAgICAgIHNp
emVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgp
OyB9IC8vIEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIHVuc2lnbmVkIGNhcHR1cmVkVmFyaWFi
bGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7IH0KICAgICAg
ICAgVVN0cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkocmV2aXNpb24g
OTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KIAogLy8g
U2V0IHRvIDEgdG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZpcm9ubWVudCB2YXJp
YWJsZXMuCi0jZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAKKyNkZWZpbmUgRU5B
QkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMQogCiAjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJ
Q1MpCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM5LDYgKzM5LDE1IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK3Vuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1p
emF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1Qcm9ncmFt
T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1G
dW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5z
aWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRo
OworCiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7
CiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
OwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29v
bjsKQEAgLTUwLDYgKzU5LDkgQEAgaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
UmV0dQogCiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCit1
bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKK3Vuc2lnbmVkIGNvdWxkVGFr
ZVNsb3dDYXNlVGhyZXNob2xkOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJh
c2U7CiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkBAIC05
OSw2ICsxMTEsMTggQEAgdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYQog
CiB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhNRTogTXVzdCByZXZp
c2l0IHRoZXNlIGhldXJpc3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGltaXppbmcgY29tcGls
ZXIsIG1heQorICAgIC8vIHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1Z2Ug
Y29kZSBibG9ja3MuIFRoZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAvLyB0aGlzIGlzIHRv
IHJlZnVzZSB0byBvcHRpbWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZhbE9wdGltaXphdGlv
bkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJvZ3JhbU9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25z
dHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhpbXVtRnVuY3Rpb25G
b3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKKyAgICAKKyAgICBT
RVQobWF4aW11bUlubGluaW5nRGVwdGgsIDMpOworCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CiAgICAgU0VUKGV4ZWN1dGlv
bkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAwMCk7CiAgICAgU0VU
KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uLCBzdGQ6Om51
bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CkBAIC0xMDksNiArMTMzLDkgQEAgdm9pZCBp
bml0aWFsaXplSGV1cmlzdGljcygpCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JSZXR1cm4sIDE1KTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJh
dGlvLCA2KTsKKyAgICAKKyAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDEw
MCk7CisgICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAxMCk7IC8vIFNob3Vs
ZG4ndCBiZSB6ZXJvIGJlY2F1c2Ugc29tZSBvcHMgd2lsbCBzcHVyaW91c2x5IHRha2Ugc2xvdyBj
YXNlLCBmb3IgZXhhbXBsZSBmb3IgbGlua2luZyBvciBjYWNoaW5nLgogCiAgICAgU0VUKGxhcmdl
RmFpbENvdW50VGhyZXNob2xkQmFzZSwgICAgICAgIDIwKTsKICAgICBTRVQobGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGRCYXNlRm9yTG9vcCwgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiA5Nzk0MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
MTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVyaXN0aWNzIHsKIAorZXh0ZXJu
IHVuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUlu
c3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9w
dGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4
aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25D
b3VudDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5k
aWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUlubGluaW5n
RGVwdGg7IC8vIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0g
b25lIGxldmVsLCBldGMuCisKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwpAQCAtNDEsNiArNTAsOSBAQCBl
eHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50CiAKIGV4dGVybiB1bnNpZ25l
ZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCitleHRlcm4gdW5zaWduZWQg
bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CitleHRlcm4gdW5zaWduZWQgY291bGRUYWtl
U2xvd0Nhc2VUaHJlc2hvbGQ7CisKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVz
aG9sZEJhc2U7CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9y
TG9vcDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
aAkocmV2aXNpb24gOTc5NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgY2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOwogICAgIG5hbWVzcGFjZSBERkcgewogICAg
IGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CisgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAgICAgfQog
CiAgICAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqKTsKQEAgLTQ2LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgY2xhc3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVy
YXRvcjsKKyAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGlsZXI7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111924</attachid>
            <date>2011-10-21 01:53:24 -0700</date>
            <delta_ts>2011-10-21 14:56:39 -0700</delta_ts>
            <desc>it works</desc>
            <filename>inlining_patch_8.diff</filename>
            <type>text/plain</type>
            <size>103761</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgwODcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMwIEBA
CisyMDExLTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4gMiUgb3ZlcmFsbCBzcGVlZC11cCBv
biBhbGwgYmVuY2htYXJrcy4gNyUKKyAgICAgICAgc3BlZWQtdXAgb24gVjgsIDIlIG9uIEtyYWtl
biwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHN0aWxs
IGEgd29yayBpbiBwcm9ncmVzcyBzaW5jZSAzMl82NCBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbik6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bGlrZWx5VG9UYWtlU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdWxk
VGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VTcGVj
aWFsRmFzdENhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZURlZXBl
c3RTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlQW55U2xv
d0Nhc2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6
Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjppbmxpbmVEZXB0aCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAg
ICAgIChKU0M6OkRGRzo6VW5saW5rZWRCbG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpnZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+
SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBy
b2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNl
c3NhcnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9w
Y29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAq
IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVF
dmFsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZH
OjptaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJ
bmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5l
T3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAg
KEpTQzo6REZHOjpjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OmNhbklubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXBDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENv
ZGVNYXBGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZH
T3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wZXJhbmRzOjpnZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9u
cyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJn
dW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGlua0Zvcik6CisgICAgICAgICogaml0
L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJf
RlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbCk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6cHJvZmlsZWRDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3Rp
Y3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGljcyk6
CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1
bmN0aW9uLmg6CisKIDIwMTEtMTAtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgc2hvdWxkIG5vdCB0cnkgdG8gcHJlZGljdCBhcmd1bWVudCB0eXBlcyBi
eSBsb29raW5nIGF0IHRoZSB2YWx1ZXMgb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc5
LDYgKzE1NzksMTEgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdAog
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fbWV0aG9kQ2FsbExpbmtJbmZvc1tpXS5jYWNo
ZWRQcm90b3R5cGUpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IGV4ZWN1dGFibGVzIHRoYXQgd2UgaGF2ZSBpbmxpbmVkIGRvbid0IGRpZS4KKyAgICAvLyBG
SVhNRTogSWYgdGhleSB3b3VsZCBoYXZlIG90aGVyd2lzZSBkaWVkLCB3ZSBzaG91bGQgcHJvYmFi
bHkgdHJpZ2dlciByZWNvbXBpbGF0aW9uLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5s
aW5lQ2FsbEZyYW1lcygpLnNpemUoKTsgKytpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmaW5s
aW5lQ2FsbEZyYW1lcygpW2ldLmV4ZWN1dGFibGUpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVkFM
VUVfUFJPRklMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBhdGNoIDogMTsKICAgICAgICAg
Ym9vbCBpc0NhbGwgOiAxOwogICAgICAgICBib29sIGlzREZHIDogMTsKKyAgICAgICAgYm9vbCBo
YXNTZWVuVW5saW5rYWJsZUNhbGwgOiAxOwogICAgICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4
OwogCiAgICAgICAgIGJvb2wgaXNMaW5rZWQoKSB7IHJldHVybiBjYWxsZWU7IH0KQEAgLTI1MSw2
ICsyNTIsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFBhc3NPd25QdHI8Q29kZUJsb2Nr
PiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2FsdGVybmF0aXZlLnJlbGVhc2UoKTsg
fQogICAgICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBhbHRl
cm5hdGl2ZSkgeyBtX2FsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmU7IH0KICAgICAgICAgCisgICAg
ICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAg
Q29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSdy
ZSBpbiB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyB0aGUgYmFzZWxpbmUgdmVyc2lvbi4KKyAgICAg
ICAgICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gcmVzdWx0LT5hbHRlcm5hdGl2ZSgpOworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCk7
CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwogCiAgICAgICAg
IHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CkBAIC0zNzYsMTAgKzM4OSw4IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+JiBpbnN0cnVjdGlvbnMoKSB7
IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAgICB2b2lkIGRpc2NhcmRCeXRlY29kZSgp
IHsgbV9pbnN0cnVjdGlvbnMuY2xlYXIoKTsgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgICAgICB1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbkNvdW50OyB9
CiAgICAgICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Db3VudCh1bnNpZ25lZCBpbnN0cnVjdGlvbkNv
dW50KSB7IG1faW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9uQ291bnQ7IH0KLSNlbmRpZgog
CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBzZXRKSVRDb2RlKGNvbnN0IEpJVENvZGUm
IGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0aEFyaXR5Q2hlY2spCkBAIC01MzEs
MTAgKzU0MiwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBXVEY6Omdl
bmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQsIGdldFJhcmVDYXNlUHJvZmls
ZUJ5dGVjb2RlT2Zmc2V0PihtX3JhcmVDYXNlUHJvZmlsZXMsIG1fcmFyZUNhc2VQcm9maWxlcy5z
aXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgc3Rh
dGljIHVpbnQzMl90IHNsb3dDYXNlVGhyZXNob2xkKCkgeyByZXR1cm4gMTAwOyB9CiAgICAgICAg
IGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAg
ICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCktPm1fY291bnRlciA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9s
ZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjb3VsZFRha2VTbG93Q2FzZShp
bnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByYXJlQ2Fz
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlciA+PSBI
ZXVyaXN0aWNzOjpjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRTcGVjaWFsRmFzdENhc2VQcm9maWxlKGlu
dCBieXRlY29kZU9mZnNldCkKQEAgLTU1MiwyMSArNTY3LDIxIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNvZGVPZmZz
ZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50
ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49
IHNsb3dDYXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNl
Q291bnQgPj0gSGV1cmlzdGljczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNl
KGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAgICAgICAgICAgdW5zaWduZWQgc2xv
d0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291
bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZz
ZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgLSBzcGVj
aWFsRmFzdENhc2VDb3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNpYWxGYXN0Q2FzZUNvdW50KSA+PSBIZXVyaXN0aWNz
OjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgYm9vbCBsaWtlbHlUb1Rha2VBbnlTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAg
ICAgICAgcmV0dXJuIChzbG93Q2FzZUNvdW50ICsgc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IHNs
b3dDYXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgKyBz
cGVjaWFsRmFzdENhc2VDb3VudCkgPj0gSGV1cmlzdGljczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VU
aHJlc2hvbGQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVzZXRSYXJlQ2Fz
ZVByb2ZpbGVzKCk7CkBAIC05NDUsOSArOTYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAgICAgICAgIFZlY3RvcjxJbnN0cnVjdGlv
bj4gbV9pbnN0cnVjdGlvbnM7Ci0jaWZuZGVmIE5ERUJVRwogICAgICAgICB1bnNpZ25lZCBtX2lu
c3RydWN0aW9uQ291bnQ7Ci0jZW5kaWYKIAogICAgICAgICBpbnQgbV90aGlzUmVnaXN0ZXI7CiAg
ICAgICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDkgQEAKICNpZm5kZWYgQ29kZU9yaWdpbl9oCiAjZGVmaW5lIENvZGVPcmlnaW5faAog
CisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTU2LDE0
ICs1OCwyOCBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIC8vIFRoZSBpbmxpbmUgZGVwdGggaXMgdGhl
IGRlcHRoIG9mIHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBub3QgaW5saW5lZCwKKyAgICAvLyAy
ID0gaW5saW5lZCBvbmUgZGVlcCwgZXRjLgorICAgIHVuc2lnbmVkIGlubGluZURlcHRoKCkgY29u
c3Q7CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGlubGluZURlcHRoRm9yQ2FsbEZyYW1lKElu
bGluZUNhbGxGcmFtZSopOworICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2RlT3Jp
Z2luJiBvdGhlcikgY29uc3Q7CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIC8vIEdldCB0aGUg
aW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5n
IG9ubHkuCisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CisjZW5k
aWYKIH07CiAKIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewotICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlOworICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gZXhlY3V0YWJsZTsK
ICAgICB1bnNpZ25lZCBzdGFja09mZnNldDsKICAgICB1bnNpZ25lZCBjYWxsZWVWUjsKICAgICBD
b2RlT3JpZ2luIGNhbGxlcjsKLSAgICB1bnNpZ25lZCBudW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlz
OworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMgOiAzMTsKKyAgICBib29s
IGlzQ2FsbCA6IDE7CiB9OwogCiBzdHJ1Y3QgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCB7
CkBAIC03MSw2ICs4NywzOCBAQCBzdHJ1Y3QgQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCB7
CiAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldDsKIH07CiAKK2lubGluZSB1bnNpZ25lZCBD
b2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSkKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAxOworICAgIGZvciAoSW5saW5l
Q2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVzdWx0Kys7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURl
cHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5l
Q2FsbEZyYW1lKTsKK30KKyAgICAKK2lubGluZSBib29sIENvZGVPcmlnaW46Om9wZXJhdG9yPT0o
Y29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJ5dGVjb2RlSW5k
ZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAorICAgICAgICAmJiBpbmxpbmVDYWxsRnJhbWUgPT0g
b3RoZXIuaW5saW5lQ2FsbEZyYW1lOworfQorICAgIAorI2lmbmRlZiBOREVCVUcKKy8vIEdldCB0
aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdn
aW5nIG9ubHkuCitpbmxpbmUgVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46OmlubGluZVN0
YWNrKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGluZURlcHRo
KCkpOworICAgIHJlc3VsdC5sYXN0KCkgPSAqdGhpczsKKyAgICB1bnNpZ25lZCBpbmRleCA9IHJl
c3VsdC5zaXplKCkgLSAyOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5s
aW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgcmVzdWx0W2luZGV4LS1dID0gY3VycmVudC0+Y2FsbGVyOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogaW5saW5lIHVuc2lnbmVkIGdldENhbGxSZXR1
cm5PZmZzZXRGb3JDb2RlT3JpZ2luKENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQqIGRhdGEp
CiB7CiAgICAgcmV0dXJuIGRhdGEtPmNhbGxSZXR1cm5PZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDkgKzE0NCw5
IEBAIEpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogCiAgICAgbV9zY29w
ZU5vZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgbV9jb2Rl
QmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNp
emUoKSk7CiAKKyNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNfZHVtcHNHZW5lcmF0ZWRDb2RlKQog
ICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChtX3Njb3BlQ2hhaW4tPmdsb2JhbE9iamVjdC0+Z2xv
YmFsRXhlYygpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDEwIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2kKICAgICAK
ICAgICBBU1NFUlQoIW1fYmxvY2spOwogICAgIAorICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpKTsKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9m
TG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkp
OworICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+ZW5kIC0gYmFz
aWNCbG9jay0+YmVnaW47ICsraSkKICAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOwogICAgIG1f
dmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwpAQCAtNjI5LDYgKzYzMyw3IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5kZXggbm8KICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtwb2ludDoKQEAgLTY4Myw2ICs2ODgs
NyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUCiAgICAgc3dpdGNo
IChub2RlLm9wKSB7CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICBj
YXNlIEZsdXNoOgogICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9t
IGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gJmluVmFyaWFibGU7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwyNCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7
CiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAgICAgICwgY2ZhSGFzVmlzaXRlZChm
YWxzZSkKICAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICAgICAgLCBpc0xpbmtlZChmYWxzZSkKKyNlbmRpZgorICAgICAgICAsIGlzUmVh
Y2hhYmxlKGZhbHNlKQogICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKICAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2Nh
bHMpCiAgICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAg
ICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICB7CiAgICAg
fQorICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKKyAg
ICB7CisgICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsK
KyAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAg
ICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZh
bHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB9CiAKICAgICAvLyBU
aGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxvY2sgbGlua2luZyBhbmQgT1NSIGVu
dHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAvLyBmb3Igb3RoZXIgcHVycG9zZXMg
ZHVlIHRvIGlubGluaW5nLgpAQCAtNjIsNiArNzQsMTAgQEAgc3RydWN0IEJhc2ljQmxvY2sgewog
ICAgIGJvb2wgaXNPU1JUYXJnZXQ7CiAgICAgYm9vbCBjZmFIYXNWaXNpdGVkOwogICAgIGJvb2wg
Y2ZhU2hvdWxkUmV2aXNpdDsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYm9vbCBpc0xpbmtl
ZDsKKyNlbmRpZgorICAgIGJvb2wgaXNSZWFjaGFibGU7CiAgICAgCiAgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIApAQCAtNzIsNiArODgsMjEgQEAgc3RydWN0IEJhc2lj
QmxvY2sgewogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0VGFpbDsKIH07CiAK
K3N0cnVjdCBVbmxpbmtlZEJsb2NrIHsKKyAgICBCbG9ja0luZGV4IG1fYmxvY2tJbmRleDsKKyAg
ICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOworICAgIGJvb2wgbV9uZWVkc0Vhcmx5UmV0dXJu
TGlua2luZzsKKyAgICAKKyAgICBVbmxpbmtlZEJsb2NrKCkgeyB9CisgICAgCisgICAgZXhwbGlj
aXQgVW5saW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgICAgIDogbV9ibG9j
a0luZGV4KGJsb2NrSW5kZXgpCisgICAgICAgICwgbV9uZWVkc05vcm1hbExpbmtpbmcodHJ1ZSkK
KyAgICAgICAgLCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKGZhbHNlKQorICAgIHsKKyAgICB9
Cit9OworICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICAgICAsIG1f
cHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCisg
ICAgICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQog
ICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jb25zdGFudFVuZGVm
aW5lZChVSU5UX01BWCkKQEAgLTc3LDE1ICs3OCwxOSBAQCBwcml2YXRlOgogICAgIC8vIEhlbHBl
ciBmb3IgbWluIGFuZCBtYXguCiAgICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCBmaXJzdEFyZywgaW50IGxhc3RB
cmcpOwogICAgIAotICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLgorICAgIC8vIEhh
bmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBu
ZWVkIHRvIHBsYW50IGEgY2FsbC4KKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jl
c3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQg
cmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBKU0Z1bmN0
aW9uKiwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCk7Cisg
ICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2Nl
ZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJ
bnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBp
bnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAg
IC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4K
ICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpOwotICAgIC8vIFNldHVwIHByZWRl
Y2Vzc29yIGxpbmtzIGluIHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgotICAgIHZvaWQgc2V0dXBQ
cmVkZWNlc3NvcnMoKTsKKyAgICAvLyBGaW5kIHJlYWNoYWJsZSBjb2RlIGFuZCBzZXR1cCBwcmVk
ZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Jsb2Nrcy4KKyAgICB2b2lkIGRldGVy
bWluZVJlYWNoYWJpbGl0eSgpOworICAgIC8vIEVucXVldWUgYSBibG9jayBvbnRvIHRoZSB3b3Jr
bGlzdCwgaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgaGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9j
a0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBCbG9ja0luZGV4IHN1Y2Nlc3Nvcik7
CiAgICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgotICAgIHZvaWQgbGlua0Jsb2NrKEJhc2lj
QmxvY2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cyk7Ci0gICAgdm9pZCBs
aW5rQmxvY2tzKFZlY3RvcjxCbG9ja0luZGV4PiYgdW5saW5rZWRCbG9ja3MpOworICAgIHZvaWQg
bGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHBvc3NpYmxlVGFy
Z2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5r
ZWRCbG9ja3MpOwogICAgIC8vIExpbmsgR2V0TG9jYWwgJiBTZXRMb2NhbCBub2RlcywgdG8gZW5z
dXJlIGxpdmUgdmFsdWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAgZW51bSBQaGlTdGFja1R5cGUgewog
ICAgICAgICBMb2NhbFBoaVN0YWNrLApAQCAtMTA1LDEwICsxMTAsOCBAQCBwcml2YXRlOgogICAg
IH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29k
ZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGVJ
bmRleCBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBvcGVyYW5kID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAKICAgICAgICAg
Ly8gSXMgdGhpcyBhIGNvbnN0YW50PwogICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCkgewogICAgICAgICAgICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVy
YW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC0xMjMsMTAgKzEyNiwxMiBAQCBw
cml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVybiBnZXRM
b2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIHZvaWQgc2V0KGludCBvcGVyYW5k
LCBOb2RlSW5kZXggdmFsdWUpCisgICAgTm9kZUluZGV4IGdldChpbnQgb3BlcmFuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KG9wZXJhbmQpKTsKKyAgICB9CisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGVJ
bmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFy
Z3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAg
ICAgICAgIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlKTsKQEAgLTEzNiwxOCArMTQxLDM1IEBA
IHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgc2V0TG9jYWwo
KHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXQoaW50IG9wZXJh
bmQsIE5vZGVJbmRleCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCksIHZhbHVlKTsKKyAgICB9CiAKICAgICAvLyBV
c2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMg
YSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFu
ZCkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwotCisgICAgICAgIAogICAgICAgICBpZiAo
bm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAg
ICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBp
ZiAobm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2li
aWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAg
ICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBs
b2FkZWQgaXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUg
ZG9uZS4KKyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRy
LT5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7
CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NE
YXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVy
biBub2RlSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
UHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Y2hpbGQx
KCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJp
ZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0xNzksMjEgKzIwMSwzNCBAQCBwcml2YXRlOgogICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUp
IHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAg
ICAgICBpZiAobm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogbm9k
ZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3Ag
PT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVy
IHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAgICAgICAgIC8v
IGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVl
LCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KKyAgICAgICAg
ICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07Cisg
ICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGls
ZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHIt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9k
ZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGVQ
dHItPm9wID09IFNldEFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGlu
ZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKICAgICAgICAgICAg
ICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVy
YW5kKSk7Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwg
T3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChub2RlUHRyLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4ob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJ
bmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUu
b3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gR2V0TG9jYWwp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5v
ZGUuY2hpbGQxKCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwp
OworICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKQEAgLTIxNCw2ICsyNDksNTEgQEAgcHJpdmF0
ZToKIAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2goaW50IG9w
ZXJhbmQpCisgICAgeworICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4OworICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kICsgbV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAg
ICAgICAgICAgIG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJn
dW1lbnQoaW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5kZXggPSBvcGVy
YW5kOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJh
bmQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9k
ZSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAg
ICAgICAgIGlmIChub2RlLm9wID09IEZsdXNoIHx8IG5vZGUub3AgPT0gU2V0QXJndW1lbnQpIHsK
KyAgICAgICAgICAgICAgICAvLyBJZiBhIGxvY2FsIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCwg
b3IgaWYgaXQncyBhbiBhcmd1bWVudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBi
YXNpYyBibG9jaywgdGhlbiB0aGVyZSBpcyByZWFsbHkgbm8gbmVlZCB0byBmbHVzaCBpdC4gSW4g
ZmFjdAorICAgICAgICAgICAgICAgIC8vIGVtaXR0aW5nIGEgRmx1c2ggaW5zdHJ1Y3Rpb24gY291
bGQganVzdCBjb25mdXNlIHRoaW5ncywgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgLy8gZ2V0
QXJndW1lbnQoKSBjb2RlIGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBzZWUgYSBGbHVzaCBvZiBhIFNl
dEFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8obm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBOb2RlSW5kZXggcGhp
ID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAg
bm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IHBoaSk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAg
ICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJs
b2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJ
bmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBw
ZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKKyAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpID0gbm9kZUlu
ZGV4OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2Nh
bEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8v
IEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lv
biBvbiBpdC4KICAgICBOb2RlSW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKQEAgLTY2Myw4
ICs3NDMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9hcmd1
bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9sb2NhbFBoaVN0
YWNrOwogICAgIAotICAgIFZlY3RvcjxOb2RlKiwgMTY+IG1fcmV1c2FibGVOb2RlU3RhY2s7Ci0g
ICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAgICAgICBCeXRlQ29kZVBhcnNl
ciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC02ODQsNyArNzYyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gQmxvY2tzIGludHJvZHVjZWQgYnkgdGhpcyBjb2RlIGJsb2NrLCB3aGlj
aCBuZWVkIHN1Y2Nlc3NvciBsaW5raW5nLgogICAgICAgICAvLyBNYXkgaW5jbHVkZSB1cCB0byBv
bmUgYmFzaWMgYmxvY2sgdGhhdCBpbmNsdWRlcyB0aGUgY29udGludWF0aW9uIGFmdGVyCiAgICAg
ICAgIC8vIHRoZSBjYWxsc2l0ZSBpbiB0aGUgY2FsbGVyLgotICAgICAgICBWZWN0b3I8QmxvY2tJ
bmRleD4gbV91bmxpbmtlZEJsb2NrczsKKyAgICAgICAgVmVjdG9yPFVubGlua2VkQmxvY2s+IG1f
dW5saW5rZWRCbG9ja3M7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgY2FsbHNpdGUncyBi
YXNpYyBibG9jayB3YXMgc3BsaXQgaW50byB0d28sIHRoZW4gdGhpcyB3aWxsIGJlCiAgICAgICAg
IC8vIHRoZSBoZWFkIG9mIHRoZSBjYWxsc2l0ZSBibG9jay4gSXQgbmVlZHMgaXRzIHN1Y2Nlc3Nv
cnMgbGlua2VkIHRvIHRoZQpAQCAtNjkyLDIyICs3NzAsNDAgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxvY2tzIHRvIGp1bXAgYmFjayBpbnRvIHRoaXMg
YmxvY2suCiAgICAgICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0ZUJsb2NrSGVhZDsKICAgICAgICAg
Ci0gICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVlOworICAgICAgICAvLyBEb2VzIHRo
ZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhpcyBpcyB0eXBpY2FsbHkgdHJ1
ZQorICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhlIG1hY2hpbmUgY29kZSBibG9j
aydzIGlubGluZSBzdGFjayBlbnRyeQorICAgICAgICAvLyAoc2luY2UgdGhhdCBvbmUgaXMgbm90
IGlubGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5lIGNhbGxlZQorICAgICAgICAv
LyBkaWQgdGhlIGxpbmtpbmcgZm9yIHVzLgorICAgICAgICBib29sIG1fY2FsbHNpdGVCbG9ja0hl
YWROZWVkc0xpbmtpbmc7CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVD
b2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0lu
ZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIpOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1cm5WYWx1ZTsKKyAgICAgICAgCisgICAgICAgIC8vIERp
ZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8gaGFuZGxlIHRoZSAodW5jb21tb24gYnV0
IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8gY2FzZSB3aGVyZSBhIHByb2NlZHVyZSB0aGF0IGRvZXMg
bm90IHJldHVybiB3YXMgaW5saW5lZC4KKyAgICAgICAgYm9vbCBtX2RpZFJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIERpZCB3ZSBoYXZlIGFueSBlYXJseSByZXR1cm5zPworICAgICAgICBi
b29sIG1fZGlkRWFybHlSZXR1cm47CisgICAgICAgIAorICAgICAgICBJbmxpbmVTdGFja0VudHJ5
KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAgICAgIElubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQ
YXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXgg
Y2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwgVmlydHVhbFJlZ2lz
dGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCk7
CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlZTsKKyAg
ICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSBtX2NhbGxlcjsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFu
ZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG9wZXJhbmQgPj0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29u
c3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdICsgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7CisgICAgICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCkgeworICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBtX2Nv
bnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4XTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZCArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldDsKICAgICAgICAgfQpAQCAtNzU2LDYgKzg1MiwxNzkgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRh
cmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBi
b29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVu
Y3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5leHRPZmZzZXQpCit7
CisgICAgLy8gRmlyc3QsIHRoZSByZWFsbHkgc2ltcGxlIGNoZWNrczogZG8gd2UgaGF2ZSBhbiBh
Y3R1YWwgSlMgZnVuY3Rpb24/CisgICAgaWYgKCFleHBlY3RlZEZ1bmN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKKyAgICAKKyAgICAv
LyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBhc3NpbmcgbWF0Y2ggdGhlIGFy
aXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGNvdWxkCisgICAgLy8gaW5saW5lIGFyaXR5IGNoZWNrIGZh
aWx1cmVzLCBidXQgZm9yIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5IGRvbid0LgorICAgIGlmIChz
dGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpICsgMSAhPSBsYXN0
QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8g
SGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3RhY2sgZGVwdGgsIG9yIGFyZSB3ZSB0cnlpbmcgdG8g
aW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/CisgICAgLy8gSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBk
ZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUuCisgICAgdW5zaWduZWQgZGVwdGggPSAwOworICAg
IGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsg
ZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKKyAgICAgICAgKytkZXB0aDsKKyAgICAgICAgaWYg
KGRlcHRoID49IEhldXJpc3RpY3M6Om1heGltdW1JbmxpbmluZ0RlcHRoKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KKyAgICAgICAgCisgICAgICAgIGlmIChl
bnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIFJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICB9CisgICAgCisgICAgLy8gRG9lcyB0aGUg
Y29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3RpY3MvcmVxdWlyZW1lbnRzIGZvciBi
ZWluZworICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/CisgICAgQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZUZvckNhbGwpOwor
ICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwocHJvZmlsZWRCbG9jaykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgaGVyZSB0aGVuIGl0IGxv
b2tzIGxpa2Ugd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5saW5lIHRoaXMgY29kZS4gUHJvY2VlZAor
ICAgIC8vIHdpdGggcGFyc2luZyB0aGUgY29kZSB0byBnZXQgYnl0ZWNvZGUsIHNvIHRoYXQgd2Ug
Y2FuIHRoZW4gcGFyc2UgdGhlIGJ5dGVjb2RlLgorICAgIC8vIE5vdGUgdGhhdCB0aGUgY29kZSBi
bG9jayB3ZSBnZXQgaGVyZSBpcyBpbnRlbmRlZCB0byBkaWUgYWZ0ZXIgaGFuZGxlSW5saW5pbmco
KQorICAgIC8vIHJldHVybnMuCisgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKKyAgICBPd25QdHI8
Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5wcm9kdWNlQ29kZUJsb2NrRm9yKHBy
b2ZpbGVkQmxvY2stPmdsb2JhbE9iamVjdCgpLCBleHBlY3RlZEZ1bmN0aW9uLT5zY29wZSgpLCBP
cHRpbWl6aW5nQ29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOworICAgIGlmICgh
Y29kZUJsb2NrKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFleGNlcHRpb24p
OworICAgIAorICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIGJ5dGVjb2RlLCBjaGVjayBpZiB3
ZSByZWFsbHkgY2FuIGlubGluZSBpdC4gVGhpcyBtYXkgZmFpbAorICAgIC8vIGlmIHRoZSBjb2Rl
IGJsb2NrIGNvbnRhaW5zIHNvbWUgbmFzdHkgb3Bjb2Rlcy4KKyAgICBpZiAoIWNhbklubGluZUZ1
bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2suZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJpbnRmKCJJbmxpbmluZyBleGVj
dXRhYmxlICVwLlxuIiwgZXhlY3V0YWJsZSk7CisjZW5kaWYKKyAgICAKKyAgICAvLyBOb3cgd2Ug
a25vdyB3aXRob3V0IGEgZG91YnQgdGhhdCB3ZSBhcmUgY29tbWl0dGVkIHRvIGlubGluaW5nLiBT
byBiZWdpbiB0aGUgcHJvY2VzcworICAgIC8vIGJ5IGNoZWNraW5nIHRoZSBjYWxsZWUgKGlmIG5l
Y2Vzc2FyeSkgYW5kIG1ha2luZyBzdXJlIHRoYXQgYXJndW1lbnRzIGFuZCB0aGUgY2FsbGVlCisg
ICAgLy8gYXJlIGZsdXNoZWQuCisgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9u
KQorICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0
aW9uKSwgY2FsbFRhcmdldE5vZGVJbmRleCk7CisgICAgCisgICAgZmx1c2goY2FsbFRhcmdldCk7
CisgICAgZm9yIChpbnQgYXJnID0gZmlyc3RBcmcgKyAxOyBhcmcgPD0gbGFzdEFyZzsgKythcmcp
CisgICAgICAgIGZsdXNoKGFyZyk7CisgICAgCisgICAgaW50IGlubGluZUNhbGxGcmFtZVN0YXJ0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGxhc3RBcmcpICsgMTsKKyAgICAKKyAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSB1c2VkIGJ5IHRoZSBjYWxsIGZyYW1lIGlzIHJl
c2VydmVkLgorICAgIGZvciAoaW50IGFyZyA9IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgY29kZUJsb2NrLT5tX251bVZhcnM7IGFyZy0t
ID4gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyAxOykKKyAgICAgICAgbV9wcmVzZXJ2ZWRWYXJzLnNl
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoYXJnKSk7CisgICAgCisgICAgLy8gTWFr
ZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggbG9jYWxzLgorICAgIHVuc2lnbmVkIG5ld051bUxv
Y2FscyA9IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplICsgY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICBpZiAobmV3TnVt
TG9jYWxzID4gbV9udW1Mb2NhbHMpIHsKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2Nh
bHM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOworICAgIH0KKworICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tF
bnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdp
c3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQpOworICAgIAorICAg
IC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KKyAg
ICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OworICAgIG1fY3VycmVudEluZGV4
ID0gMDsKKyAgICBwYXJzZUNvZGVCbG9jaygpOworICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5k
ZXg7CisgICAgCisgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJh
c2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCisgICAgaWYgKGlubGluZVN0
YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAt
IDEpIHsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghaW5saW5lU3RhY2tFbnRyeS5tX3VubGlu
a2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpCisgICAgICAgICAgICBsaW5rQmxvY2sobV9ncmFw
aC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWRdLmdldCgpLCBp
bmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBBU1NFUlQobV9ncmFwaC5tX2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVC
bG9ja0hlYWRdLT5pc0xpbmtlZCk7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIHBvc3NpYmxl
IHRoYXQgdGhlIGNhbGxzaXRlIGJsb2NrIGhlYWQgaXMgbm93IG93bmVkIGJ5IHRoZSBjYWxsZXIu
CisgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2Fs
bGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXggPT0gaW5saW5lU3RhY2tF
bnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFj
a0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlu
a2luZyk7CisgICAgICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2Vk
QmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcpOworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0
YWNrRW50cnkubV9jYWxsZXItPm1fY2FsbHNpdGVCbG9ja0hlYWQgPT0gaW5saW5lU3RhY2tFbnRy
eS5tX2NhbGxzaXRlQmxvY2tIZWFkKTsKKyAgICAgICAgICAgIGlubGluZVN0YWNrRW50cnkubV9j
YWxsZXItPm1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5r
ZWRCbG9ja3MpOworICAgIH0gZWxzZQorICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5t
X3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gSWYgdGhlcmUgd2FzIGEg
cmV0dXJuLCBidXQgbm8gZWFybHkgcmV0dXJucywgdGhlbiB3ZSdyZSBkb25lLiBXZSBhbGxvdyBw
YXJzaW5nIG9mCisgICAgLy8gdGhlIGNhbGxlciB0byBjb250aW51ZSBpbiB3aGF0ZXZlciBiYXNp
YyBibG9jayB3ZSdyZSBpbiByaWdodCBub3cuCisgICAgaWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1f
ZGlkRWFybHlSZXR1cm4gJiYgaW5saW5lU3RhY2tFbnRyeS5tX2RpZFJldHVybikgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBsYXN0QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsK
KyAgICAgICAgQVNTRVJUKGxhc3RCbG9jay0+YmVnaW4gPT0gbGFzdEJsb2NrLT5lbmQgfHwgIW1f
Z3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB3ZSBj
cmVhdGVkIG5ldyBibG9ja3MgdGhlbiB0aGUgbGFzdCBibG9jayBuZWVkcyBsaW5raW5nLCBidXQg
aW4gdGhlCisgICAgICAgIC8vIGNhbGxlci4gSXQgZG9lc24ndCBuZWVkIHRvIGJlIGxpbmtlZCB0
bywgYnV0IGl0IG5lZWRzIG91dGdvaW5nIGxpbmtzLgorICAgICAgICBpZiAoIWlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIEdpdmUg
aXQgYSB2YWx1ZSB0aGF0IHdvbid0IHBlcnR1cmIgYmluYXJ5IHNlYXJjaCwgYW5kIHdvbid0IGJl
IGZvdW5kLiBUaGlzIHdvdWxkCisgICAgICAgICAgICAvLyBmYWlsIGlmIG9wX2NhbGwgY291bGQg
YXBwZWFyIGF0IHRoZSBoZWFkIG9mIGEgYmFzaWMgYmxvY2suIFRoYXQgc2hvdWxkbid0IGhhcHBl
biwKKyAgICAgICAgICAgIC8vIGdpdmVuIHRoZSB3YXkgdGhlIGJ5dGVjb2RlIGdlbmVyYXRvciB3
b3Jrcy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICBwcmludGYo
IlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMjJXUgdG8gYmMj
JXUgKGlubGluZSByZXR1cm4gY2FzZSkuXG4iLCBsYXN0QmxvY2ssIGxhc3RCbG9jay0+Ynl0ZWNv
ZGVCZWdpbiwgbV9jdXJyZW50SW5kZXgpOworI2VuZGlmCisgICAgICAgICAgICBsYXN0QmxvY2st
PmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKKyAgICAgICAgICAgIEFTU0VSVChtX2lu
bGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9n
cmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IGxhc3RCbG9jay0+Ynl0ZWNv
ZGVCZWdpbik7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxp
bmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAt
IDEpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVp
bmcgY29kZSBnZW5lcmF0aW9uIGF0IGVwaWxvZ3VlLlxuIiwgZXhlY3V0YWJsZSk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCB0byB0
aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWlu
YWxzLgorICAgIEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgIAorICAg
IC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0
IHRvIGNyZWF0ZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50cnku
bV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOworICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CisgICAgICAgIEFTU0VSVChub2RlLm9w
ID09IEp1bXApOworICAgICAgICBBU1NFUlQobm9kZS50YWtlbkJsb2NrSW5kZXgoKSA9PSBOb0Js
b2NrKTsKKyAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCkpOworICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9u
ZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IGZhbHNlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICAv
LyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBh
dCB0aGUgY2FsbGVyLgorICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UHRyKG5l
dyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJpbnRm
KCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMlbHUgZm9yICVwIGJj
IyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRleCwg
Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUpKTsKKyNlbmRpZgorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0
KCk7CisgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxv
Y2tzLmlzRW1wdHkoKSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fY2Fs
bGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2lu
IDwgbmV4dE9mZnNldCk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5r
ZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsK
KyAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAgIAorICAg
IC8vIEF0IHRoaXMgcG9pbnQgd2UgcmV0dXJuIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZSBjb2Rl
IGZvciB0aGUgY2FsbGVyLCBidXQKKyAgICAvLyBpbiB0aGUgbmV3IGJhc2ljIGJsb2NrLgorI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBwcmludGYoIkRvbmUgaW5saW5pbmcgZXhl
Y3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdlbmVyYXRpb24gaW4gbmV3IGJsb2NrLlxuIiwg
ZXhlY3V0YWJsZSk7CisjZW5kaWYKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJh
bmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewpAQCAtODUz
LDcgKzExMjIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgLy8gSWYgd2UgYXJlIHRoZSBmaXJzdCBiYXNpYyBibG9jaywgaW50cm9kdWNlIG1hcmtlcnMg
Zm9yIGFyZ3VtZW50cy4gVGhpcyBhbGxvd3MKICAgICAvLyB1cyB0byB0cmFjayBpZiBhIHVzZSBv
ZiBhbiBhcmd1bWVudCBtYXkgdXNlIHRoZSBhY3R1YWwgYXJndW1lbnQgcGFzc2VkLCBhcwogICAg
IC8vIG9wcG9zZWQgdG8gdXNpbmcgYSB2YWx1ZSB3ZSBzZXQgZXhwbGljaXRseS4KLSAgICBpZiAo
bV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkgeworICAgIGlmICht
X2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRz
LnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAg
ICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8o
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKQEAgLTg2OSw3ICsx
MTM4LDIwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0
aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7Ci0gICAgICAgICAg
ICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOworICAgICAgICAgICAg
Ly8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0IHJlZnVzZSB0byBkbyB0
aGlzIGlmIHRoZSBibG9jayBpcworICAgICAgICAgICAgLy8gZW1wdHkuIFRoaXMgaXMgYSBzcGVj
aWFsIGNhc2UgZm9yIGlubGluaW5nLCB3aGljaCBtaWdodCBvdGhlcndpc2UgY3JlYXRlCisgICAg
ICAgICAgICAvLyBzb21lIGVtcHR5IGJsb2NrcyBpbiBzb21lIGNhc2VzLiBXaGVuIHBhcnNlQmxv
Y2soKSByZXR1cm5zIHdpdGggYW4gZW1wdHkKKyAgICAgICAgICAgIC8vIGJsb2NrLCBpdCB3aWxs
IGdldCByZXB1cnBvc2VkIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLiBOb3RlIHRoYXQg
dGhpcworICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5dGVjb2RlIHJlc3Vs
dGluZyBpbiBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKKyAgICAgICAgICAgIC8vIGJl
IHRydWUgYW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBlbWl0cyBhIFBoYW50
b20gdG8gZm9yY2UgdGhpcworICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KKyAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRCbG9jay0+YmVnaW4gIT0gbV9ncmFwaC5zaXplKCkpCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKKyAgICAgICAg
ICAgIGVsc2UgeworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgICAg
ICBwcmludGYoIlJlZnVzaW5nIHRvIHBsYW50IGp1bXAgYXQgbGltaXQgJXUgYmVjYXVzZSBibG9j
ayAlcCBpcyBlbXB0eS5cbiIsIGxpbWl0LCBtX2N1cnJlbnRCbG9jayk7CisjZW5kaWYKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiAhbV9wYXJzZUZhaWxlZDsKICAgICAgICAgfQog
ICAgICAgICAKQEAgLTg4OCw3ICsxMTcwLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczogewogICAgICAg
ICAgICAgTm9kZUluZGV4IG9wMSA9IGdldFRoaXMoKTsKLSAgICAgICAgICAgIHNldFRoaXMoYWRk
VG9HcmFwaChDb252ZXJ0VGhpcywgb3AxKSk7CisgICAgICAgICAgICBpZiAobV9ncmFwaFtvcDFd
Lm9wID09IENvbnZlcnRUaGlzKQorICAgICAgICAgICAgICAgIHNldFRoaXMob3AxKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3JhcGgoQ29udmVydFRo
aXMsIG9wMSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29udmVydF90aGlzKTsKICAg
ICAgICAgfQogCkBAIC0xNjIxLDEwICsxOTA2LDI5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgorICAg
ICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0gSW52YWxp
ZFZpcnR1YWxSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4gPSB0
cnVlOworICAgICAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJs
b2Nrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgaW5saW5pbmcgY3Jl
YXRlZCBibG9ja3MsIGFuZCB3ZSdyZSBkb2luZyBhIHJldHVybiwgdGhlbiB3ZSBuZWVkIHNvbWUK
KyAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBsaW5raW5nLgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9i
bG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNO
b3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSAhPSBtX2lubGluZVN0
YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fZGlkRWFybHlSZXR1cm4pIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpIDw9IG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhOb0Jsb2NrKSk7CisgICAgICAgICAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNFYXJseVJl
dHVybkxpbmtpbmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX2RpZEVhcmx5UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIG9wX2VuZDoKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChSZXR1cm4sIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9l
bmQpOwogCkBAIC0xNjQwLDkgKzE5NDQsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTm9kZUluZGV4IGNhbGxUYXJnZXQgPSBnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBlbnVtIHsgQ29uc3Rh
bnRGdW5jdGlvbiwgTGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9IGNhbGxUeXBlOwog
ICAgICAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAg
cHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMldTogJXUuXG4iLCBt
X2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgp
LT5tX2NvdW50ZXIpOworI2VuZGlmCisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChtX2dy
YXBoLmlzRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCkpCiAgICAgICAg
ICAgICAgICAgY2FsbFR5cGUgPSBDb25zdGFudEZ1bmN0aW9uOwotICAgICAgICAgICAgZWxzZSBp
ZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyht
X2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUgJiYgIW1fcHJvZmlsZWRCbG9jay0+bGlrZWx5
VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKQorICAgICAgICAgICAgZWxzZSBpZiAoISFt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJl
bnRJbmRleCkubGFzdFNlZW5DYWxsZWUgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKQogICAgICAgICAgICAgICAg
IGNhbGxUeXBlID0gTGlua2VkRnVuY3Rpb247CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgY2FsbFR5cGUgPSBVbmtub3duRnVuY3Rpb247CkBAIC0xNjU1LDI1ICsxOTYzLDM4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PwogICAgICAgICAgICAgICAgIGJvb2wgdXNlc1Jlc3Vs
dCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRPZmZzZXQgPSBt
X2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CiAgICAgICAgICAgICAgICAg
SW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudEluc3RydWN0aW9uICsgT1BDT0RF
X0xFTkdUSChvcF9jYWxsKTsKICAgICAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24gPSBQcmVkaWN0Tm9uZTsKICAgICAgICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9w
Y29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7
CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9wZXJhbmQgPSBwdXRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICAgICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwg
bV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG5leHRPZmZz
ZXQpOworICAgICAgICAgICAgICAgICAgICBuZXh0T2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbF9wdXRfcmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSlNG
dW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbjsKICAgICAgICAgICAgICAgICBERkc6OkludHJpbnNp
YyBpbnRyaW5zaWM7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVu
Y3Rpb24pCi0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IG1fZ3JhcGgudmFsdWVPZkZ1
bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNhbGxUYXJnZXQpLT5leGVjdXRhYmxlKCktPmlu
dHJpbnNpYygpOwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wg
Y2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikgeworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1
bmN0aW9uID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2Fs
bFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVjdGVkRnVuY3Rp
b24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7CisgICAgICAgICAgICAgICAgICAgIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBMaW5rZWRGdW5jdGlvbik7
Ci0gICAgICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxh
c3RTZWVuQ2FsbGVlLmdldCgpOwotICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBmdW5j
dGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7CisgICAg
ICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxs
ZWUuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVjdGVkRnVuY3Rp
b24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7CisgICAgICAgICAgICAgICAgICAgIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyh1c2VzUmVz
dWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIGZpcnN0QXJnLCBsYXN0QXJnLCBwcmVkaWN0
aW9uKSkgeworICAgICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8o
ZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1bHRP
cGVyYW5kLCBpbnRyaW5zaWMsIGZpcnN0QXJnLCBsYXN0QXJnLCBwcmVkaWN0aW9uKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gTkVYVF9PUENPREUoKSBoYXMgdG8gYmUgaW5zaWRlIGJy
YWNlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVJbmxp
bmluZyh1c2VzUmVzdWx0LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsVGFy
Z2V0LCByZXN1bHRPcGVyYW5kLCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBmaXJzdEFyZywgbGFzdEFyZywgbmV4dE9mZnNldCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gTkVYVF9PUENPREUoKSBoYXMgdG8gYmUgaW5zaWRlIGJyYWNlcy4KICAgICAg
ICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTczMiw3ICsyMDUzLDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgIC8vIGFyZSBjb21wYXRpYmxlLgogICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChibG9ja0JlZ2luLCBtX2N1cnJlbnRJbmRleCA9PSBibG9ja0JlZ2luKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIC8vIFdlIG5ldmVyIGRvIE9TUiBpbnRvIGFuIGlubGluZWQgY29kZSBibG9j
ay4gVGhhdCBjb3VsZCBub3QgaGFwcGVuLCBzaW5jZSBPU1IKKyAgICAgICAgICAgIC8vIGxvb2tz
IHVwIHRoZSBjb2RlIGJsb2NrIHRoYXQgaXMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgYmFzZWxp
bmUgSklUIGNvZGUKKyAgICAgICAgICAgIC8vIGJsb2NrLiBIZW5jZSwgbWFjaGluZSBjb2RlIGJs
b2NrID0gdHJ1ZSBjb2RlIGJsb2NrID0gbm90IGlubGluZSBjb2RlIGJsb2NrLgorICAgICAgICAg
ICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlcikKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBFbWl0IGEgcGhhbnRvbSBub2RlIHRvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgcGxhY2Vo
b2xkZXIgbm9kZSBmb3IgdGhpcyBieXRlY29kZQorICAgICAgICAgICAgLy8gb3AuCisgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9sb29wX2hpbnQpOwogICAgICAgICB9CkBAIC0xNzg0LDcgKzIxMTMsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5jaGlsZDEoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChtX2dy
YXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLm9wID09IFBoaSB8fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9w
ID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CisgICAg
ICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2Fs
IHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgbV9ncmFwaFt2YWx1
ZUluUHJlZGVjZXNzb3JdLm9wID09IEZsdXNoIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gU2V0QXJndW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhRm9yUHJl
ZGVjZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0udmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgICAgICAKQEAgLTE4MjUsNDYgKzIxNTQsODMgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICB9CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJs
ZVRhcmdldHMpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxv
Y2ssIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIEFTU0VS
VChibG9jay0+ZW5kICE9IE5vTm9kZSk7CisgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOwor
ICAgIEFTU0VSVChibG9jay0+ZW5kID4gYmxvY2stPmJlZ2luKTsKICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CiAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsK
ICAgICAKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICBjYXNlIEp1bXA6CiAgICAgICAgIG5v
ZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygp
KSk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkxpbmtl
ZCBiYXNpYyBibG9jayAlcCB0byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nb
bm9kZS50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwor
I2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDoKICAgICAg
ICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJz
aW5nKCkpKTsKICAgICAgICAgbm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLm5vdFRha2VuQnl0
ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgIHByaW50ZigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5k
ICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSwgbV9ncmFwaC5tX2Jsb2Nrc1tub2Rl
Lm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7
CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIk1hcmtpbmcgYmFzaWMgYmxv
Y2sgJXAgYXMgbGlua2VkLlxuIiwgYmxvY2spOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAg
IH0KKyAgICAKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1
ZTsKKyNlbmRpZgogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxC
bG9ja0luZGV4PiYgdW5saW5rZWRCbG9ja3MpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxv
Y2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MpCiB7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlu
a0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV1dLmdldCgpLCB1bmxpbmtl
ZEJsb2Nrcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1bmxpbmtlZEJsb2Nrcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAodW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExp
bmtpbmcpIHsKKyAgICAgICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2Vk
QmxvY2tzW2ldLm1fYmxvY2tJbmRleF0uZ2V0KCksIHVubGlua2VkQmxvY2tzKTsKKyAgICAgICAg
ICAgIHVubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVN1Y2Nlc3NvcihW
ZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxvY2tJbmRleCBibG9ja0luZGV4LCBC
bG9ja0luZGV4IHN1Y2Nlc3NvckluZGV4KQoreworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA9
IG1fZ3JhcGgubV9ibG9ja3Nbc3VjY2Vzc29ySW5kZXhdLmdldCgpOworICAgIGlmICghc3VjY2Vz
c29yLT5pc1JlYWNoYWJsZSkgeworICAgICAgICBzdWNjZXNzb3ItPmlzUmVhY2hhYmxlID0gdHJ1
ZTsKKyAgICAgICAgd29ya2xpc3QuYXBwZW5kKHN1Y2Nlc3NvckluZGV4KTsKKyAgICB9CisgICAg
CisgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRleCk7CiB9CiAK
LXZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNzb3JzKCkKK3ZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmRldGVybWluZVJlYWNoYWJpbGl0eSgpCiB7Ci0gICAgZm9yIChCbG9ja0luZGV4IGlu
ZGV4ID0gMDsgaW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpbmRleCkgeworICAg
IFZlY3RvcjxCbG9ja0luZGV4LCAxNj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3QuYXBwZW5kKDAp
OworICAgIG1fZ3JhcGgubV9ibG9ja3NbMF0tPmlzUmVhY2hhYmxlID0gdHJ1ZTsKKyAgICB3aGls
ZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBCbG9ja0luZGV4IGluZGV4ID0gd29y
a2xpc3QubGFzdCgpOworICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgIAog
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbaW5kZXhdLmdldCgp
OwotICAgICAgICBBU1NFUlQoYmxvY2stPmVuZCAhPSBOb05vZGUpOworICAgICAgICBBU1NFUlQo
YmxvY2stPmlzTGlua2VkKTsKKyAgICAgICAgCiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W2Jsb2NrLT5lbmQgLSAxXTsKICAgICAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKLQor
ICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBtX2dyYXBo
Lm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQo
aW5kZXgpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS50YWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkg
ewotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS0+
bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRl
eCk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRh
a2VuQmxvY2tJbmRleCgpKTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwg
aW5kZXgsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtMTg3NywzMCArMjI0MywzNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRN
YXBzSWZOCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJ
ZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgIG1faWRlbnRpZmllck1hcC5hZGQobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoaSkuaW1wbCgpLCBpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKLSAgICAgICAg
bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50
KGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpLCBpKTsKKyAgICAgICAgbV9qc1ZhbHVl
TWFwLmFkZChKU1ZhbHVlOjplbmNvZGUobV9jb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCkpLCBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OwogICAgIAogICAgIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMgPSB0cnVlOwogfQogCi1CeXRlQ29k
ZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNl
ciogYnl0ZUNvZGVQYXJzZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWVWUikKK0J5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0Vu
dHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwg
VmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwg
VmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0KQogICAgIDogbV9ieXRlQ29kZVBh
cnNlcihieXRlQ29kZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAs
IG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICwgbV9jYWxsc2l0ZUJsb2NrSGVh
ZChjYWxsc2l0ZUJsb2NrSGVhZCkKLSAgICAsIG1fY2FsbGVlKGJ5dGVDb2RlUGFyc2VyLT5tX2lu
bGluZVN0YWNrVG9wKQorICAgICwgbV9yZXR1cm5WYWx1ZShyZXR1cm5WYWx1ZVZSKQorICAgICwg
bV9kaWRSZXR1cm4oZmFsc2UpCisgICAgLCBtX2RpZEVhcmx5UmV0dXJuKGZhbHNlKQorICAgICwg
bV9jYWxsZXIoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3ApCiB7Ci0gICAgaWYgKG1f
Y2FsbGVlKSB7CisgICAgaWYgKG1fY2FsbGVyKSB7CiAgICAgICAgIC8vIElubGluZSBjYXNlLgog
ICAgICAgICBBU1NFUlQoY29kZUJsb2NrICE9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jayk7
CiAgICAgICAgIEFTU0VSVChjYWxsZWVWUiAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgIT0gTm9CbG9jayk7CiAgICAg
ICAgIAogICAgICAgICBJbmxpbmVDYWxsRnJhbWUgaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuZXhlY3V0YWJsZSA9IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7
Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IG1fY2FsbGVlLT5tX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVj
dXRhYmxlLnNldCgqYnl0ZUNvZGVQYXJzZXItPm1fZ2xvYmFsRGF0YSwgYnl0ZUNvZGVQYXJzZXIt
Pm1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSk7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5zdGFja09mZnNldCA9IGlubGluZUNhbGxG
cmFtZVN0YXJ0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBp
bmxpbmVDYWxsRnJhbWUuY2FsbGVlVlIgPSBjYWxsZWVWUjsKICAgICAgICAgaW5saW5lQ2FsbEZy
YW1lLmNhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdpbigpOwogICAgICAg
ICBpbmxpbmVDYWxsRnJhbWUubnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA9IGNvZGVCbG9jay0+
bV9udW1QYXJhbWV0ZXJzOworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuaXNDYWxsID0gdHJ1ZTsK
ICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCku
YXBwZW5kKGlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gJmJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2FsbEZyYW1lcygpLmxhc3QoKTsKICAg
ICAgICAgCkBAIC0xOTE4LDE1ICsyMjg5LDIxIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmUKICAgICAgICAgfQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgICAgICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9y
LCBib29sPiByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVl
OjplbmNvZGUodmFsdWUpLCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSAr
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuc2Vj
b25kKQorICAgICAgICAgICAgcGFpcjxKU1ZhbHVlTWFwOjppdGVyYXRvciwgYm9vbD4gcmVzdWx0
ID0gYnl0ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
LnNlY29uZCkgewogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+
YWRkQ29uc3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
bnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuZmlyc3QtPnNlY29uZDsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRy
dWU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNhc2UuCiAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsK
ICAgICAgICAgQVNTRVJUKGNhbGxlZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAg
ICAgICBBU1NFUlQocmV0dXJuVmFsdWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAg
ICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZVN0YXJ0ID09IEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgICAgICBBU1NFUlQoY2FsbHNpdGVCbG9ja0hlYWQgPT0gTm9CbG9jayk7CiAKICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwpAQCAtMTkzNyw5ICsyMzE0LDE0IEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAg
ICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpCi0gICAg
ICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpOworICAgICAgICAgICAgbV9jb25zdGFudFJl
bWFwW2ldID0gaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OworCisgICAgICAgIG1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVtYXAuc2l6ZSgpOyArK2kpCisgICAgICAg
IEFTU0VSVChtX2NvbnN0YW50UmVtYXBbaV0gPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgp
OworICAgIAogICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wID0gdGhpczsKIH0K
IApAQCAtMTk1MCwyMSArMjMzMiw0OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVC
bG9jaygpCiAgICAgZm9yICh1bnNpZ25lZCBqdW1wVGFyZ2V0SW5kZXggPSAwOyBqdW1wVGFyZ2V0
SW5kZXggPD0gY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCk7ICsranVtcFRhcmdldElu
ZGV4KSB7CiAgICAgICAgIC8vIFRoZSBtYXhpbXVtIGJ5dGVjb2RlIG9mZnNldCB0byBnbyBpbnRv
IHRoZSBjdXJyZW50IGJhc2ljYmxvY2sgaXMgZWl0aGVyIHRoZSBuZXh0IGp1bXAgdGFyZ2V0LCBv
ciB0aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMuCiAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0g
anVtcFRhcmdldEluZGV4IDwgY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkgPyBjb2Rl
QmxvY2stPmp1bXBUYXJnZXQoanVtcFRhcmdldEluZGV4KSA6IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCJQYXJzaW5nIGJ5dGVjb2RlIHdpdGggbGltaXQgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRo
ICV1LlxuIiwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBsaW1pdCwgQ29kZU9yaWdp
bjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxs
RnJhbWUpKTsKKyNlbmRpZgogICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPCBsaW1pdCk7
CiAKICAgICAgICAgLy8gTG9vcCB1bnRpbCB3ZSByZWFjaCB0aGUgY3VycmVudCBsaW1pdCAoaS5l
LiBuZXh0IGp1bXAgdGFyZ2V0KS4KICAgICAgICAgZG8gewotICAgICAgICAgICAgT3duUHRyPEJh
c2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9jdXJyZW50SW5kZXgs
IG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMpKTsKLSAgICAgICAg
ICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7Ci0gICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7
Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykgeworICAgICAgICAgICAgICAgIC8vIENo
ZWNrIGlmIHdlIGNhbiB1c2UgdGhlIGxhc3QgYmxvY2suCisgICAgICAgICAgICAgICAgaWYgKCFt
X2dyYXBoLm1fYmxvY2tzLmlzRW1wdHkoKSAmJiBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+YmVn
aW4gPT0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCktPmVuZCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIG11c3QgYmUgYSBibG9jayBiZWxvbmdpbmcgdG8gdXMuCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5t
X2Jsb2NrSW5kZXggPT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQ2hhbmdlIGl0cyBieXRlY29kZSBiZWdpbiBhbmQgY29udGludWUuCisgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCku
Z2V0KCk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIlJlYXNjcmliaW5nIGJ5dGVjb2RlIGluZGV4IG9mIGJsb2NrICVwIGZyb20gYmMj
JXUgdG8gYmMjJXUgKHBlZXBob2xlIGNhc2UpLlxuIiwgbV9jdXJyZW50QmxvY2ssIG1fY3VycmVu
dEJsb2NrLT5ieXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmJ5dGVjb2RlQmVnaW4gPSBtX2N1cnJlbnRJbmRl
eDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBPd25QdHI8
QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRl
eCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOworI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDcmVh
dGluZyBiYXNpYyBibG9jayAlcCwgIyVsdSBmb3IgJXAgYmMjJXUgYXQgaW5saW5lIGRlcHRoICV1
LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBtX2lubGluZVN0YWNr
VG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0
aEZvckNhbGxGcmFtZShtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkpOworI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxv
Y2tzLmlzRW1wdHkoKSB8fCBtX2dyYXBoLm1fYmxvY2tzW21faW5saW5lU3RhY2tUb3AtPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW4gPCBtX2N1cnJl
bnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5r
ZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
ICghcGFyc2VCbG9jayhsaW1pdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBoYXZlIGdvbmUgYmV5b25kIHRoZSBsaW1pdC4KICAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIHBsYW50ZWQgYSB0ZXJtaW5hbCwgb3Igd2Ug
anVzdCBnYXZlIHVwIGJlY2F1c2UKKyAgICAgICAgICAgIC8vIHdlIHJlYWxpemVkIHRoYXQgdGhl
IGp1bXAgdGFyZ2V0IGluZm9ybWF0aW9uIGlzIGltcHJlY2lzZSwgb3Igd2UKKyAgICAgICAgICAg
IC8vIGFyZSBhdCB0aGUgZW5kIG9mIGFuIGlubGluZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIEFT
U0VSVChtX2N1cnJlbnRCbG9jay0+YmVnaW4gPT0gbV9ncmFwaC5zaXplKCkgfHwgbV9ncmFwaC5s
YXN0KCkuaXNUZXJtaW5hbCgpIHx8IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLnNpemUoKSAmJiBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkp
OwogCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+ZW5kID0gbV9ncmFwaC5zaXplKCk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IDA7CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVu
dEluZGV4IDwgbGltaXQpOwogICAgIH0KIApAQCAtMTk3OSwxMiArMjM4OCwxMiBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgLy8gU2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAg
ICAgQVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAgICAgCi0gICAgSW5saW5lU3RhY2tFbnRyeSBp
bmxpbmVTdGFja0VudHJ5KHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxv
Y2ssIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgIElubGluZVN0YWNrRW50cnkgaW5saW5l
U3RhY2tFbnRyeSh0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2NrLCBJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwogCiAgICAgbGlua0Js
b2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MpOwotICAgIHNldHVwUHJlZGVj
ZXNzb3JzKCk7CisgICAgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCk7CiAgICAgcHJvY2Vzc1BoaVN0
YWNrPExvY2FsUGhpU3RhY2s+KCk7CiAgICAgcHJvY2Vzc1BoaVN0YWNrPEFyZ3VtZW50UGhpU3Rh
Y2s+KCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAot
Ym9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3RlbXBsYXRlPGJv
b2wgKCpjYW5IYW5kbGVPcGNvZGUpKE9wY29kZUlEKT4KK2Jvb2wgY2FuSGFuZGxlT3Bjb2RlcyhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBj
b2RlQmxvY2stPmdsb2JhbERhdGEoKS0+aW50ZXJwcmV0ZXI7CiAgICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAt
NDMsNyArNDQsNyBAQCBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsCiAg
ICAgICAgIHN3aXRjaCAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIHsKICNkZWZpbmUgREVGSU5FX09QKG9wY29kZSwg
bGVuZ3RoKSAgICAgICAgICAgXAogICAgICAgICBjYXNlIG9wY29kZTogICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICBpZiAoIWNhbkNvbXBpbGVPcGNvZGUob3Bjb2RlKSkgIFwK
KyAgICAgICAgICAgIGlmICghY2FuSGFuZGxlT3Bjb2RlKG9wY29kZSkpICBcCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJ5dGVjb2Rl
T2Zmc2V0ICs9IGxlbmd0aDsgICAgICAgXAogICAgICAgICAgICAgYnJlYWs7CkBAIC01OCw2ICs1
OSwxNiBAQCBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuQ29tcGlsZU9wY29kZT4oY29k
ZUJsb2NrKTsKK30KKworYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbklubGluZU9wY29kZT4oY29kZUJs
b2NrKTsKK30KKwogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTgw
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwyMCArMjYsNDIgQEAKICNpZm5kZWYgREZHQ2FwYWJpbGl0aWVzX2gK
ICNkZWZpbmUgREZHQ2FwYWJpbGl0aWVzX2gKIAorI2luY2x1ZGUgIkRGR0ludHJpbnNpYy5oIgor
I2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCiAjaW5jbHVkZSAi
SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KIAotI2luY2x1ZGUgIkRG
R05vZGUuaCIKLQogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAvLyBGYXN0IGNoZWNrIGZ1bmN0aW9uczsgaWYgdGhleSByZXR1cm4gdHJ1ZSBp
dCBpcyBzdGlsbCBuZWNlc3NhcnkgdG8KIC8vIGNoZWNrIG9wY29kZXMuCi1pbmxpbmUgYm9vbCBt
aWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7IH0KLWlubGluZSBib29s
IG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5l
IGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayopIHsgcmV0dXJuIHRy
dWU7IH0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVC
bG9jayopIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25D
b3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3Vu
dCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBp
bGVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1
bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsK
K30KKworaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9
IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0cnVj
dGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dChDb2RlQmxvY2sqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KIAogLy8gT3Bjb2RlIGNoZWNr
aW5nLgogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcGNvZGVJRCkKQEAg
LTE0NiwxNCArMTY4LDQ1IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQg
b3AKICAgICB9CiB9CiAKK2lubGluZSBib29sIGNhbklubGluZU9wY29kZShPcGNvZGVJRCBvcGNv
ZGVJRCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIAorICAgIC8vIFRoZXNl
IG9wY29kZXMgd291bGQgYmUgZWFzeSB0byBzdXBwb3J0IHdpdGggaW5saW5pbmcsIGJ1dCB3ZSBj
dXJyZW50bHkgZG9uJ3QgZG8gaXQuCisgICAgLy8gVGhlIGlzc3VlIGlzIHRoYXQgdGhlIHNjb3Bl
IGNoYWluIHdpbGwgbm90IGJlIHNldCBjb3JyZWN0bHkuCisgICAgY2FzZSBvcF9nZXRfc2NvcGVk
X3ZhcjoKKyAgICBjYXNlIG9wX3B1dF9zY29wZWRfdmFyOgorICAgIGNhc2Ugb3BfcmVzb2x2ZToK
KyAgICBjYXNlIG9wX3Jlc29sdmVfYmFzZToKKyAgICBjYXNlIG9wX3Jlc29sdmVfZ2xvYmFsOgor
ICAgICAgICAKKyAgICAvLyBUcml2aWFsIHRvIHN1cHBvcnQgd2l0aCB0aGUgY29weSBwcm9wYWdh
dGlvbiBtYWNoaW5lIHdlIGFscmVhZHkgaGF2ZSwgYnV0IHRoZSBnbHVlCisgICAgLy8gaXNuJ3Qg
dGhlcmUsIHlldC4KKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgICAgIAorICAgIC8vIElu
bGluaW5nIGRvZXNuJ3QgY29ycmVjdGx5IHJlbWFwIHJlZ3VsYXIgZXhwcmVzc2lvbiBvcGVyYW5k
cy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGNhbkNvbXBpbGVPcGNvZGUob3Bjb2Rl
SUQpOworICAgIH0KK30KKwogYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqKTsKK2Jv
b2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sqKTsKICNlbHNlIC8vIEVOQUJMRShERkdfSklU
KQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxz
ZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVy
biBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVC
bG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlv
bkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wg
bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsgcmV0dXJu
IGZhbHNlOyB9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENv
ZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CisKIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNv
ZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNv
ZGUoT3Bjb2RlSUQpIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bj
b2RlcyhDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5l
T3Bjb2RlcyhDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9j
aykKQEAgLTE3Niw2ICsyMjksMTYgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZUZ1bmN0aW9uRm9y
Q29uc3RydQogICAgIHJldHVybiBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2Rl
QmxvY2spICYmIGNhbkNvbXBpbGVPcGNvZGVzKGNvZGVCbG9jayk7CiB9CiAKK2lubGluZSBib29s
IGNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBy
ZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrKSAmJiBjYW5JbmxpbmVP
cGNvZGVzKGNvZGVCbG9jayk7Cit9CisKK2lubGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9y
Q29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykgJiYgY2FuSW5saW5lT3Bjb2Rlcyhjb2Rl
QmxvY2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBERkdD
YXBhYmlsaXRpZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDQ2IEBAIGNvbnN0IGNoYXIqIEdyYXBoOjpu
YW1lT2ZWYXJpYWJsZUFjY2Vzc0QKICAgICByZXR1cm4gYnVmOwogfQogCitzdGF0aWMgdm9pZCBw
cmludFdoaXRlU3BhY2UodW5zaWduZWQgYW1vdW50KQoreworICAgIHdoaWxlIChhbW91bnQtLSA+
IDApCisgICAgICAgIHByaW50ZigiICIpOworfQorCit2b2lkIEdyYXBoOjpkdW1wQ29kZU9yaWdp
bihOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIGlmICghbm9kZUluZGV4KQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgTm9kZSYgY3VycmVudE5vZGUgPSBhdChub2RlSW5kZXgpOworICAg
IE5vZGUmIHByZXZpb3VzTm9kZSA9IGF0KG5vZGVJbmRleCAtIDEpOworICAgIGlmIChwcmV2aW91
c05vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gY3VycmVudE5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8Q29k
ZU9yaWdpbj4gcHJldmlvdXNJbmxpbmVTdGFjayA9IHByZXZpb3VzTm9kZS5jb2RlT3JpZ2luLmlu
bGluZVN0YWNrKCk7CisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGN1cnJlbnRJbmxpbmVTdGFjayA9
IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lU3RhY2soKTsKKyAgICB1bnNpZ25lZCBjb21t
b25TaXplID0gc3RkOjptaW4ocHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCksIGN1cnJlbnRJbmxp
bmVTdGFjay5zaXplKCkpOworICAgIHVuc2lnbmVkIGluZGV4T2ZEaXZlcmdlbmNlID0gY29tbW9u
U2l6ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29tbW9uU2l6ZTsgKytpKSB7Cisg
ICAgICAgIGlmIChwcmV2aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSAhPSBjdXJy
ZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpbmRleE9m
RGl2ZXJnZW5jZSA9IGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICAvLyBQcmludCB0aGUgcG9wcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBwcmV2aW91
c0lubGluZVN0YWNrLnNpemUoKTsgaS0tID4gaW5kZXhPZkRpdmVyZ2VuY2U7KSB7CisgICAgICAg
IHByaW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50ZigiPC0tICVwXG4iLCBwcmV2
aW91c0lubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFByaW50IHRoZSBwdXNoZXMuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gaW5kZXhPZkRpdmVyZ2VuY2U7IGkgPCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgcHJpbnRXaGl0ZVNwYWNlKGkgKiAyKTsKKyAgICAgICAgcHJpbnRmKCItLT4g
JXBcbiIsIGN1cnJlbnRJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
Z2V0KCkpOworICAgIH0KK30KKwogdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBOb2RlJiBub2RlID0gYXQobm9kZUluZGV4
KTsKQEAgLTkxLDYgKzEzMSw5IEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRl
eCwgQ28KICAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKICAg
ICB9CisgICAgCisgICAgZHVtcENvZGVPcmlnaW4obm9kZUluZGV4KTsKKyAgICBwcmludFdoaXRl
U3BhY2UoKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVEZXB0aCgpIC0gMSkgKiAyKTsKIAogICAgIC8v
IEV4YW1wbGUvZXhwbGFuYXRpb24gb2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAt
MjQwLDcgKzI4Myw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwotICAgICAgICBwcmlu
dGYoIkJsb2NrICMldSAoYmMjJXUpOiAgJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVn
aW4sIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKKyAgICAgICAg
cHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1KTogJXMlc1xuIiwgKGludCliLCBibG9jay0+Ynl0ZWNv
ZGVCZWdpbiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiIChza2lwcGVkKSIsIGJsb2NrLT5p
c09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKICAgICAgICAgcHJpbnRmKCIgIHZh
cnM6ICIpOwogICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICBk
dW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDEz
IEBAIHB1YmxpYzoKICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cg
YWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1l
cykuCiAgICAgdm9pZCBkdW1wKENvZGVCbG9jayogPSAwKTsKICAgICB2b2lkIGR1bXAoTm9kZUlu
ZGV4LCBDb2RlQmxvY2sqID0gMCk7CisKKyAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0
aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCisgICAg
Ly8gcHJlY2VkaW5nIG5vZGUuCisgICAgdm9pZCBkdW1wQ29kZU9yaWdpbihOb2RlSW5kZXgpOwog
I2VuZGlmCiAKLSAgICBCbG9ja0luZGV4IGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0
b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbik7CisgICAgQmxv
Y2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPFVubGlua2VkQmxvY2s+
JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOwogCiAgICAgYm9vbCBwcmVkaWN0R2xv
YmFsVmFyKHVuc2lnbmVkIHZhck51bWJlciwgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAg
IHsKQEAgLTI0OCwxOCArMjUyLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAg
IHVuc2lnbmVkIG9wZXJhdG9yKCkoQmxvY2tJbmRleCogYmxvY2tJbmRleCkgY29uc3QKKyAgICB1
bnNpZ25lZCBvcGVyYXRvcigpKFVubGlua2VkQmxvY2sqIHVubGlua2VkQmxvY2spIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1sqYmxvY2tJbmRleF0tPmJ5dGVj
b2RlQmVnaW47CisgICAgICAgIHJldHVybiBtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2st
Pm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW47CiAgICAgfQogCiBwcml2YXRlOgogICAgIEdy
YXBoJiBtX2dyYXBoOwogfTsKIAotaW5saW5lIEJsb2NrSW5kZXggR3JhcGg6OmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRleD4mIGJsb2NrcywgdW5zaWduZWQgYnl0
ZWNvZGVCZWdpbikKK2lubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoVmVjdG9yPFVubGlua2VkQmxvY2s+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4pCiB7Ci0gICAgcmV0dXJuICpXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPEJsb2Nr
SW5kZXgsIHVuc2lnbmVkPihibG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNpemUoKSwgYnl0ZWNvZGVC
ZWdpbiwgV1RGOjpLZXlNdXN0QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJs
b2NrKCp0aGlzKSk7CisgICAgcmV0dXJuIFdURjo6YmluYXJ5U2VhcmNoV2l0aEZ1bmN0b3I8VW5s
aW5rZWRCbG9jaywgdW5zaWduZWQ+KGJsb2Nrcy5iZWdpbigpLCBibG9ja3Muc2l6ZSgpLCBieXRl
Y29kZUJlZ2luLCBXVEY6OktleU11c3RCZVByZXNlbnRJbkFycmF5LCBHZXRCeXRlY29kZUJlZ2lu
Rm9yQmxvY2soKnRoaXMpKS0+bV9ibG9ja0luZGV4OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDIwIEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFw
KQordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0
JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSkKIHsKICAgICAvLyAxKSBQcm8t
Zm9ybWEgc3R1ZmYuCiAgICAgZXhpdC5tX2NoZWNrLmxpbmsodGhpcyk7CiAKICNpZiBERkdfRU5B
QkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9k
ZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIChpbnQpZXhpdC5tX25vZGVJbmRl
eCwgZXhpdC5tX2J5dGVjb2RlSW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworICAgIGZwcmludGYoc3Rk
ZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkICgiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgpOwor
ICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJiYyMldSIsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgLT4gJXAgIiwgY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIikg
YXQgSklUIG9mZnNldCAweCV4ICAiLCBkZWJ1Z09mZnNldCgpKTsKICAgICBleGl0LmR1bXAoc3Rk
ZXJyKTsKICNlbmRpZgogI2lmIERGR19FTkFCTEUoVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJF
KQpAQCAtNDgyLDE5ICs0ODksNTUgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUgogICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0
ZXIpOwogICAgIAotICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZS4KKyAgICAvLyAxMykgRml4IGNh
bGwgZnJhbWUocykuCiAgICAgCiAgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgp
LT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIHN0b3JlUHRyKFRy
dXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKICAgICAKKyAgICBmb3IgKENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXIpOworICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlcik7CisgICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxs
KTsKKyAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2Vh
cmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2Rl
ZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChtYXBwaW5nKTsKKyAgICAgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRl
eCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIGp1bXBU
YXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1h
cHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZS0+Y2FsbGVlVlIpLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgICAgIGxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6
cmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlQ2hhaW4pKSwgR1BSSW5m
bzo6cmVnVDIpOworICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7CisgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGFk
ZFB0cihJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUklu
Zm86OnJlZ1QzOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0g
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CisgICAgICAgIAorICAgICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spKSk7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QyLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6
OlNjb3BlQ2hhaW4pKSk7CisgICAgICAgIHN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBhZGRyZXNz
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdp
c3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KGp1bXBUYXJnZXQpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZpbGU6OlJldHVyblBDKSkpOworICAgICAgICBzdG9y
ZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbmxpbmVDYWxsRnJh
bWUtPm51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDEsIGFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVy
RmlsZTo6Q2FsbGVlKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgCiAgICAgLy8gMTQpIEp1bXAgaW50byB0
aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KICAgICAKLSAgICBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUlu
ZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQu
bV9ieXRlY29kZUluZGV4KTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOworICAgIFZlY3RvcjxCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29kZWRDb2RlTWFwRm9yKGJh
c2VsaW5lQ29kZUJsb2NrKTsKKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1h
cHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1h
cC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOwogICAgIAogICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICBBU1NFUlQobWFwcGlu
Zy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQo
bWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOwogICAgIAotICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkt
PmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwor
ICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oYmFzZWxpbmVDb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgp
KSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOwogICAgIAogICAgIEFTU0VSVChHUFJJ
bmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCkBAIC01
MDYsMjAgKzU0OSwyOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NS
CiAjZW5kaWYKIH0KIAotdm9pZCBKSVRDb21waWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZl
SklUJiBzcGVjdWxhdGl2ZSkKK1ZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBKSVRD
b21waWxlcjo6ZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOwotICAg
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVk
Q29kZU1hcCk7CisgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBjb2RlQmxvY2stPmJhc2VsaW5lVmVy
c2lvbigpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisgICAg
CisgICAgc3RkOjpwYWlyPEhhc2hNYXA8Q29kZUJsb2NrKiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4gPjo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IG1fZGVjb2RlZENvZGVNYXBz
LmFkZChjb2RlQmxvY2ssIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+KCkpOworICAg
IAorICAgIGlmIChyZXN1bHQuc2Vjb25kKQorICAgICAgICBjb2RlQmxvY2stPmppdENvZGVNYXAo
KS0+ZGVjb2RlKHJlc3VsdC5maXJzdC0+c2Vjb25kKTsKICAgICAKKyAgICByZXR1cm4gcmVzdWx0
LmZpcnN0LT5zZWNvbmQ7Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVj
dWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCit7CiAgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3Ig
ZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5iZWdpbigpOwogICAgIE9TUkV4aXRW
ZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsK
ICAgICAKICAgICB3aGlsZSAoZXhpdHNJdGVyICE9IGV4aXRzRW5kKSB7CiAgICAgICAgIGNvbnN0
IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJdGVyOwotICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRo
T1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5
SW5kZXgpLCBkZWNvZGVkQ29kZU1hcCk7CisgICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1Io
ZXhpdCwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRl
eCkpOwogICAgICAgICArK2V4aXRzSXRlcjsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMwLDggKzQzMCwyMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUJvZHkoKTsKICAgICB2
b2lkIGxpbmsoTGlua0J1ZmZlciYpOwogCi0gICAgdm9pZCBleGl0U3BlY3VsYXRpdmVXaXRoT1NS
KGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAgICB2b2lkIGV4aXRTcGVjdWxhdGl2
ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqKTsKICAgICB2b2lk
IGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworICAgIAorICAgIENvZGVCbG9jayogYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7Cisg
ICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+
YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/
IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpID09IGNvZGVCbG9jaygpLT5iYXNlbGluZVZl
cnNpb24oKSk7CisgICAgICAgIHJldHVybiBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKTsKKyAg
ICB9CisgICAgCisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRD
b2RlTWFwRm9yKENvZGVCbG9jayopOwogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8g
YWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1f
Z2xvYmFsRGF0YTsKQEAgLTQ0MSw3ICs0NTQsOSBAQCBwcml2YXRlOgogCiAgICAgLy8gVGhlIGNv
ZGVCbG9jayBjdXJyZW50bHkgYmVpbmcgZ2VuZXJhdGVkLCB1c2VkIHRvIGFjY2VzcyBpbmZvcm1h
dGlvbiBzdWNoIGFzIGNvbnN0YW50IHZhbHVlcywgaW1tZWRpYXRlcy4KICAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwotCisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+IG1fZGVjb2RlZENvZGVNYXBzOworICAgIAogICAgIC8v
IFZlY3RvciBvZiBjYWxscyBvdXQgZnJvbSBKSVQgY29kZSwgaW5jbHVkaW5nIGV4Y2VwdGlvbiBo
YW5kbGVyIGluZm9ybWF0aW9uLgogICAgIC8vIENvdW50IG9mIHRoZSBudW1iZXIgb2YgQ2FsbFJl
Y29yZHMgd2l0aCBleGNlcHRpb24gaGFuZGxlcnMuCiAgICAgVmVjdG9yPENhbGxSZWNvcmQ+IG1f
Y2FsbHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTgw
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjE1LDYgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogYXJpdGhOb2Rl
RmxhZ3MKICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGksIDApIFwKKyAgICBtYWNybyhGbHVzaCwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWlu
ZyBzZXQuICovXAogICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCkBAIC00ODUsNiArNDg2LDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICBjYXNlIFBo
aToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgY2FzZSBGbHVzaDoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtODM2LDcgKzgzOCw3IEBAIHN0cnVjdCBOb2RlIHsKIAogICAgIGJvb2wgc2hv
dWxkR2VuZXJhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0g
UGhpOworICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGkgJiYgb3AgIT0gRmx1
c2g7CiAgICAgfQogCiAgICAgdW5zaWduZWQgcmVmQ291bnQoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE4ICs2
NCwzMSBAQCBwdWJsaWM6CiAgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2Nh
bHNbaWR4XTsgfQogICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxzW2lkeF07IH0KICAgICAKKyAgICB2b2lkIGVuc3VyZUxvY2FscyhzaXplX3Qgc2l6
ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplIDw9IG1fbG9jYWxzLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsK
KyAgICAgICAgbV9sb2NhbHMucmVzaXplKHNpemUpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
b2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHNb
aV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldExv
Y2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKGlkeCA+
PSBtX2xvY2Fscy5zaXplKCkpIHsKLSAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2Nh
bHMuc2l6ZSgpOwotICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOwotICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgZW5zdXJlTG9jYWxzKGlkeCArIDEpOwogICAgICAgICAKICAgICAg
ICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOwogICAgIH0KICAgICAKKyAgICBUIGdldExvY2FsKHNp
emVfdCBpZHgpCisgICAgeworICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICByZXR1cm4g
bV9sb2NhbHNbaWR4XTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGlt
ZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2Fy
Z3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5ODA4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3OCw2ICs1NzgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJldHVybjoKICAg
ICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIFBoaToKKyAgICAgICAg
Y2FzZSBGbHVzaDoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgogICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
OTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyB0byB0aGUgKm5leHQqIGluc3RydWN0
aW9uLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5ICJleGVjdXRlZCIgdGhlCiAgICAgICAgIC8vIFNldExv
Y2FsIGFuZCB3aGF0ZXZlciBvdGhlciBERkcgTm9kZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUg
c2FtZQogICAgICAgICAvLyBieXRlY29kZSBpbmRleCBhcyB0aGUgU2V0TG9jYWwuCi0gICAgICAg
IEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luRm9yT1NSID09IG5vZGUuY29kZU9y
aWdpbik7CiAgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXggKyAxKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgYnl0ZWNv
ZGUgaW5kZXggZm9yIHRoZSBuZXh0IG5vZGUgdG8gYmUKQEAgLTg2MSw3ICs4NjEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHN0YXRlbWVu
dCkgd291bGQgYmUgZGVhZCBhbnl3YXkgLSBzbyB0aGUgZmFjdCB0aGF0IERGRyB3b3VsZCBoYXZl
CiAgICAgICAgIC8vIGFscmVhZHkgbWFkZSB0aGUgYXNzaWdubWVudCwgYW5kIGJha2VkIGl0IGlu
dG8gdGhlIHJlZ2lzdGVyIGZpbGUgZHVyaW5nCiAgICAgICAgIC8vIE9TUiBleGl0LCB3b3VsZCBu
b3QgYmUgdmlzaWJsZSB0byB0aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgotICAgICAgICBtX2J5dGVj
b2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAgIAog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewpAQCAtMTg5MCw3ICsxODkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKICAgICAgICAgaWYg
KGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhp
c1ZhbHVlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTkxMywx
MSArMTkxNSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkp
LnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNW
YWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0
aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjM5MSw2ICsyMzk4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAog
ICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnMKIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNr
KGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKLSAgICAsIG1f
Ynl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKKyAgICAsIG1fY29kZU9y
aWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNv
dmVyeUluZGV4KQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCiAg
ICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAsIG1fbGFzdFNl
dE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewotICAgIEFTU0VSVChtX2J5dGVjb2Rl
SW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKKyAgICBBU1NF
UlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOwogICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAw
OyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKICAgICAgICAgbV9h
cmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1f
YXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZh
cmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQpAQCAtMjYwLDYgKzI2MCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAgICAgQVNT
RVJUKG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5i
ZWdpbik7CisgICAgCisgICAgaWYgKCFibG9jay5pc1JlYWNoYWJsZSkgeworICAgICAgICBtX2Nv
bXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlm
IChibG9jay5pc09TUlRhcmdldCkKICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoYmxvY2sp
OwpAQCAtMjkxLDExICsyOTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNp
Y0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0g
Q29kZU9yaWdpbigpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyAr
K21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChtX2NvbXBpbGVJbmRl
eCk7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4OworICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBub2RlLmNvZGVPcmlnaW47
CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJ
VCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGlu
dCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1faml0LmRl
YnVnT2Zmc2V0KCkpOwpAQCAtMzY2LDcgKzM3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgbV9ieXRlY29kZUluZGV4
Rm9yT1NSID0gMDsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2RlT3JpZ2luKDApOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKICAgICAg
ICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RydWN0IE9TUkV4aXQg
ewogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7CiAgICAgTm9kZUluZGV4
IG1fbm9kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbjsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAg
ICAgCkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWVTb3VyY2Us
IDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJpYWJsZXM7
CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Ci0gICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4
Rm9yT1NSOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yT1NSOwogICAgIAogICAgIEFi
c3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKQEAgLTgwMSw3ICs4MDEsNiBAQCBpbmxpbmUgU3Bl
Y3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKICAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgp
Lm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQotICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuY29kZUJsb2NrKCks
IG1faml0LmdyYXBoKCkpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTIsNyArOTIsNyBAQCBDYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lU2xvCiAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbWFjaGluZUNhbGxlci0+Y29kZUJsb2NrKCktPmNv
ZGVPcmlnaW5Gb3JSZXR1cm4ocmV0dXJuUEMoKSk7CiAgICAgCiAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxp
bmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNhbGxG
cmFtZSA9IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0SW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAKICAgICAg
ICAgQ2FsbEZyYW1lKiBpbmxpbmVkQ2FsbGVyID0gbWFjaGluZUNhbGxlciArIGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw3ICs3MTgsNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiB2b2lkIEpJVDo6bGlua0ZvcihKU0Z1bmN0aW9uKiBjYWxs
ZWUsIENvZGVCbG9jayogY2FsbGVyQ29kZUJsb2NrLCBDb2RlQmxvY2sqIGNhbGxlZUNvZGVCbG9j
aywgSklUOjpDb2RlUHRyIGNvZGUsIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvLCBpbnQgY2Fs
bGVyQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kKQogewogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjYWxsZXJDb2Rl
QmxvY2spOwotCisgICAgCiAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgbGluayBjYWxscyB3aXRo
IHRoZSBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzLgogICAgIC8vIElmIHRoaXMgaXMgYSBuYXRp
dmUgY2FsbCBjYWxsZWVDb2RlQmxvY2sgaXMgbnVsbCBzbyB0aGUgbnVtYmVyIG9mIHBhcmFtZXRl
cnMgaXMgdW5pbXBvcnRhbnQKICAgICBpZiAoIWNhbGxlZUNvZGVCbG9jayB8fCAoY2FsbGVyQXJn
Q291bnQgPT0gY2FsbGVlQ29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMpKSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYg
KzE4NCwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKEluc3RydWN0CiAgICAg
Ly8gRG9uZSEgLSByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGguCiAgICAgQVNTRVJUKE9QQ09E
RV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX2V2YWwpKTsKICAgICBB
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVj
dCkpOworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBpZiAobV9jYW5CZU9wdGltaXpl
ZCkgeworICAgICAgICBSYXJlQ2FzZVByb2ZpbGUqIHJhcmVDYXNlUHJvZmlsZSA9IG1fY29kZUJs
b2NrLT5yYXJlQ2FzZVByb2ZpbGUobV9jb2RlQmxvY2stPm51bWJlck9mUmFyZUNhc2VQcm9maWxl
cygpIC0gMSk7CisgICAgICAgIEFTU0VSVCgodW5zaWduZWQpcmFyZUNhc2VQcm9maWxlLT5tX2J5
dGVjb2RlT2Zmc2V0ID09IG1fYnl0ZWNvZGVPZmZzZXQpOworICAgICAgICBhZGQzMihJbW0zMigx
KSwgQWJzb2x1dGVBZGRyZXNzKCZyYXJlQ2FzZVByb2ZpbGUtPm1fY291bnRlcikpOworICAgIH0K
KyNlbmRpZgogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9j
YWxsKSk7CiAKICAgICAvLyBUaGlzIGhhbmRsZXMgaG9zdCBmdW5jdGlvbnMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDE1
LDcgKzIwMTUsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQog
CiAgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20gb2xk
IEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBz
dWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQo
KSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCks
IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyAg
ICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRp
bWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldSIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkt
PnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5z
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxlckZyYW1l
ID0gY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpOworICAgICAgICBpZiAoY2FsbGVyRnJhbWUpCisg
ICAgICAgICAgICBwcmludGYoIiwgY2FsbGVyRnJhbWUgPSAlcCwgcmV0dXJuUEMgPSAlcCwgY2Fs
bGVyIGNvZGUgYmxvY2sgPSAlcCIsIGNhbGxlckZyYW1lLCBjYWxsRnJhbWUtPnJldHVyblBDKCku
dmFsdWUoKSwgY2FsbGVyRnJhbWUtPmNvZGVCbG9jaygpKTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OwogI2VuZGlmCiAgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJl
b3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCkBAIC0yMDIzLDYg
KzIwMjcsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjZW5k
aWYKICAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVT
b29uKCk7CiAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw2ICszODQsMjQgQEAgdm9pZCBQcm9n
cmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlVmlydHVhbAogICAgIEJhc2U6OmNsZWFyQ29kZVZpcnR1
YWwoKTsKIH0KIAorQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmJhc2VsaW5lQ29kZUJs
b2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBDb2RlQmxvY2sqIHJl
c3VsdDsKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgcmVzdWx0ID0gbV9j
b2RlQmxvY2tGb3JDYWxsLmdldCgpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgcmVzdWx0ID0gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QuZ2V0KCk7CisgICAgfQorICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gMDsK
KyAgICB3aGlsZSAocmVzdWx0LT5hbHRlcm5hdGl2ZSgpKQorICAgICAgICByZXN1bHQgPSByZXN1
bHQtPmFsdGVybmF0aXZlKCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgQVNTRVJUKHJlc3Vs
dC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVk
Rm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
IHsKICAgICBBU1NFUlQoZXhlYy0+Z2xvYmFsRGF0YSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwpA
QCAtNDA2LDExICs0MjQsMTEgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdAogICAgIHJldHVybiBlcnJvcjsKIH0KIAotUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gRnVuY3Rpb25FeGVjdXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSogZXhl
YywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29tcGls
YXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwgSlNP
YmplY3QqJiBleGNlcHRpb24pCitQYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlv
bkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlLCBDb21waWxhdGlvbktpbmQgY29t
cGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCwg
SlNPYmplY3QqJiBleGNlcHRpb24pCiB7CiAgICAgZXhjZXB0aW9uID0gMDsKICAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsRGF0YTsKLSAgICBSZWZQ
dHI8RnVuY3Rpb25Cb2R5Tm9kZT4gYm9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVu
Y3Rpb25Cb2R5Tm9kZT4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCAwLCAwLCBtX3NvdXJj
ZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VTdHJpY3QgOiBK
U1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Cb2R5Tm9kZT4g
Ym9keSA9IGdsb2JhbERhdGEtPnBhcnNlci0+cGFyc2U8RnVuY3Rpb25Cb2R5Tm9kZT4oZ2xvYmFs
T2JqZWN0LCAwLCAwLCBtX3NvdXJjZSwgbV9wYXJhbWV0ZXJzLmdldCgpLCBpc1N0cmljdE1vZGUo
KSA/IEpTUGFyc2VTdHJpY3QgOiBKU1BhcnNlTm9ybWFsLCAmZXhjZXB0aW9uKTsKICAgICBpZiAo
IWJvZHkpIHsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbik7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtNDIwLDggKzQzOCw2IEBAIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1
bmN0aW9uRXgKICAgICBib2R5LT5maW5pc2hQYXJzaW5nKG1fcGFyYW1ldGVycywgbV9uYW1lKTsK
ICAgICByZWNvcmRQYXJzZShib2R5LT5mZWF0dXJlcygpLCBib2R5LT5oYXNDYXB0dXJlZFZhcmlh
YmxlcygpLCBib2R5LT5saW5lTm8oKSwgYm9keS0+bGFzdExpbmUoKSk7CiAKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGVDaGFpbk5vZGUtPmdsb2JhbE9iamVjdC5nZXQo
KTsKLQogICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0OwogICAgIEFTU0VSVCgo
Y29tcGlsYXRpb25LaW5kID09IEZpcnN0Q29tcGlsYXRpb24pID09ICFjb2RlQmxvY2tGb3Ioc3Bl
Y2lhbGl6YXRpb25LaW5kKSk7CiAgICAgcmVzdWx0ID0gYWRvcHRQdHIobmV3IEZ1bmN0aW9uQ29k
ZUJsb2NrKHRoaXMsIEZ1bmN0aW9uQ29kZSwgZ2xvYmFsT2JqZWN0LCBzb3VyY2UoKS5wcm92aWRl
cigpLCBzb3VyY2UoKS5zdGFydE9mZnNldCgpLCBzcGVjaWFsaXphdGlvbktpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCkpOwpAQCAtNDQyLDcgKzQ1OCw3IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3IKICNlbmRpZgogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2Rl
Ojpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwogICAgIEpTT2JqZWN0
KiBleGNlcHRpb247Ci0gICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sg
PSBwcm9kdWNlQ29kZUJsb2NrRm9yKGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2Nr
Rm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVG
b3JDYWxsLCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29k
ZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCks
IHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdDb21waWxh
dGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwogICAgIGlm
ICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01MDAsNyAr
NTE2LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIAog
ICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Io
ZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBPcHRpbWl6
aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0LCBleGNl
cHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJv
ZHVjZUNvZGVCbG9ja0ZvcihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHNjb3BlQ2hhaW5O
b2RlLCAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDog
Rmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAo
IW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTgwODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0
YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9ja0ZvcihKU0dsb2JhbE9iamVjdCosIFNjb3BlQ2hh
aW5Ob2RlKiwgQ29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVj
dComIGV4Y2VwdGlvbik7CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDYWxsKEV4ZWNT
dGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogICAgICAgICB7CkBA
IC01NzAsOSArNTcwLDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGdl
bmVyYXRlZEJ5dGVjb2RlRm9yQ29uc3RydWN0KCk7CiAgICAgICAgIH0KIAorICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAg
ICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcihraW5kKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgY29uc3Qg
SWRlbnRpZmllciYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgICAgICBKU1N0cmluZyog
bmFtZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lVmFsdWUuZ2V0KCk7IH0KLSAgICAgICAg
c2l6ZV90IHBhcmFtZXRlckNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXpl
KCk7IH0gLy8gSW5jbHVkaW5nICd0aGlzJyEKKyAgICAgICAgc2l6ZV90IHBhcmFtZXRlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLT5zaXplKCk7IH0gLy8gRXhjbHVkaW5nICd0
aGlzJyEKICAgICAgICAgdW5zaWduZWQgY2FwdHVyZWRWYXJpYWJsZUNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1DYXB0dXJlZFZhcmlhYmxlczsgfQogICAgICAgICBVU3RyaW5nIHBhcmFtU3Ry
aW5nKCkgY29uc3Q7CiAgICAgICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3ltYm9sVGFibGU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGltaXRzPgogCiAvLyBTZXQgdG8gMSB0byBjb250cm9s
IHRoZSBoZXVyaXN0aWNzIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLSNkZWZpbmUgRU5B
QkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMAorI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVVUklT
VElDUyAxCiAKICNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtMzksNiArMzksMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVy
aXN0aWNzIHsKIAordW5zaWduZWQgbWF4aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OwordW5zaWduZWQgbWF4aW11bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtRnVuY3Rp
b25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCit1
bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25D
b3VudDsKKwordW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7CisKIGludDMyX3QgZXhlY3V0
aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcDsKIGludDMyX3QgZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CiBpbnQzMl90IGV4ZWN1dGlv
bkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwpAQCAtNTAsNiArNTksOSBA
QCBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1CiAKIHVuc2lnbmVkIGRl
c2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CiAKK3Vuc2lnbmVkIGxpa2VseVRvVGFr
ZVNsb3dDYXNlVGhyZXNob2xkOwordW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7
CisKIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIHVuc2lnbmVkIGxhcmdl
RmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7CiAKQEAgLTk5LDYgKzExMSwxOCBAQCB2b2lk
IHNldEhldXJpc3RpYyhUJiB2YXJpYWJsZSwgY29uc3QgY2hhCiAKIHZvaWQgaW5pdGlhbGl6ZUhl
dXJpc3RpY3MoKQogeworICAgIC8vIEZJWE1FOiBNdXN0IHJldmlzaXQgdGhlc2UgaGV1cmlzdGlj
cyEgVGhlIERGRywgYmVpbmcgYW4gb3B0aW1pemluZyBjb21waWxlciwgbWF5CisgICAgLy8gdGFr
ZSBhIGxvbmcgdGltZSBmb3IgcGF0aG9sb2dpY2FsbHkgaHVnZSBjb2RlIGJsb2Nrcy4gVGhlIGJl
c3Qgd2F5IHRvIGNvcGUgd2l0aAorICAgIC8vIHRoaXMgaXMgdG8gcmVmdXNlIHRvIG9wdGltaXpl
IHRoZW0uCisgICAgU0VUKG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudCwgICAgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgU0VUKG1heGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1
Y3Rpb25Db3VudCwgICAgICAgICAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50LCAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+Ojpt
YXgoKSk7CisgICAgCisgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRh
dGVJbnN0cnVjdGlvbkNvdW50LCAxMDApOworICAgIAorICAgIFNFVChtYXhpbXVtSW5saW5pbmdE
ZXB0aCwgMyk7CisKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
cldhcm1VcCwgICAgIC0xMDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb24sIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKTsKQEAgLTEwOSw2ICsxMzMsOSBAQCB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNz
KCkKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybiwgMTUpOwogCiAg
ICAgU0VUKGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8sIDYpOworICAgIAorICAg
IFNFVChsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZCwgMTAwKTsKKyAgICBTRVQoY291bGRU
YWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgIDEwKTsgLy8gU2hvdWxkbid0IGJlIHplcm8gYmVjYXVz
ZSBzb21lIG9wcyB3aWxsIHNwdXJpb3VzbHkgdGFrZSBzbG93IGNhc2UsIGZvciBleGFtcGxlIGZv
ciBsaW5raW5nIG9yIGNhY2hpbmcuCiAKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRC
YXNlLCAgICAgICAgMjApOwogICAgIFNFVChsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JM
b29wLCAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNz
LmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1
cmlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxNSBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUV2
YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworZXh0ZXJuIHVuc2lnbmVk
IG1heGltdW1Qcm9ncmFtT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4
dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRl
SW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25z
dHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5z
aWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQ7CisKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsgLy8gRGVwdGggb2Yg
aW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4KKwog
ZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1V
cDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9w
dGltaXplQW55dGltZVNvb247CkBAIC00MSw2ICs1MCw5IEBAIGV4dGVybiBpbnQzMl90IGV4ZWN1
dGlvbkNvdW50ZXJJbmNyZW1lbnQKIAogZXh0ZXJuIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2
ZVN1Y2Nlc3NGYWlsUmF0aW87CiAKK2V4dGVybiB1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2Fz
ZVRocmVzaG9sZDsKK2V4dGVybiB1bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsK
KwogZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIGV4dGVybiB1
bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiA5ODA4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBWUHRySGFj
a0V4ZWN1dGFibGU7CiAgICAgbmFtZXNwYWNlIERGRyB7CiAgICAgY2xhc3MgSklUQ29kZUdlbmVy
YXRvcjsKKyAgICBjbGFzcyBKSVRDb21waWxlcjsKICAgICB9CiAKICAgICBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKEV4ZWNTdGF0ZSop
OwpAQCAtNDYsNiArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU0Z1bmN0aW9u
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBmcmllbmQgY2xhc3MgSklUOwog
ICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpKSVRDb2RlR2VuZXJhdG9yOworICAgICAgICBmcmll
bmQgY2xhc3MgREZHOjpKSVRDb21waWxlcjsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFs
RGF0YTsKIAogICAgIHB1YmxpYzoK
</data>
<flag name="commit-queue"
          id="109872"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112025</attachid>
            <date>2011-10-21 14:56:39 -0700</date>
            <delta_ts>2011-10-21 16:23:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlining_patch_9.diff</filename>
            <type>text/plain</type>
            <size>102695</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI4IEBA
CisyMDExLTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4gMiUgb3ZlcmFsbCBzcGVlZC11cCBv
biBhbGwgYmVuY2htYXJrcy4gNyUKKyAgICAgICAgc3BlZWQtdXAgb24gVjgsIDIlIG9uIEtyYWtl
biwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHN0aWxs
IGEgd29yayBpbiBwcm9ncmVzcyBzaW5jZSAzMl82NCBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJhc2VsaW5lVmVyc2lvbik6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rpb25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6bGlrZWx5VG9UYWtlU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdWxk
VGFrZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VTcGVj
aWFsRmFzdENhc2UpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZURlZXBl
c3RTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlQW55U2xv
d0Nhc2UpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6
Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjppbmxpbmVEZXB0aCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICog
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5oOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAg
ICAgIChKU0M6OkRGRzo6VW5saW5rZWRCbG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpnZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRMb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmdldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+
SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OnJlbWFwT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBy
b2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNl
c3NhcnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9w
Y29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAq
IGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVF
dmFsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAg
KEpTQzo6REZHOjptaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZH
OjptaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJ
bmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5l
T3Bjb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAg
KEpTQzo6REZHOjpjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6
OmNhbklubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXBDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0
Qnl0ZWNvZGVCZWdpbkZvckJsb2NrOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklU
Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENv
ZGVNYXBGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMp
OgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR05vZGUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZEdlbmVyYXRlKToKKyAgICAgICAgKiBkZmcvREZH
T3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wZXJhbmRzOjpnZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9u
cyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJn
dW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1lU2xvdyk6CisgICAgICAgICog
aml0L0pJVENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NU
VUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAg
IChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwpOgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5h
bCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6cHJvZmlsZWRDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OnBhcmFtZXRlckNvdW50KToKKyAgICAgICAgKiBydW50aW1lL0hldXJp
c3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGlj
cyk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmg6CisgICAgICAgICogcnVudGltZS9K
U0Z1bmN0aW9uLmg6CisKIDIwMTEtMTAtMjEgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJn
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgZmluYWxpemVyIHRvIEpTT2JqZWN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24g
OTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTU4MSw2ICsxNTgxLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNp
dEFnZ3JlZ2F0ZShTbG90VmlzaXQKICAgICB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShERkdfSklU
KQorICAgIGlmIChoYXNDb2RlT3JpZ2lucygpKSB7CisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGV4ZWN1dGFibGVzIHRoYXQgd2UgaGF2ZSBpbmxpbmVkIGRvbid0IGRpZS4KKyAgICAgICAgLy8g
RklYTUU6IElmIHRoZXkgd291bGQgaGF2ZSBvdGhlcndpc2UgZGllZCwgd2Ugc2hvdWxkIHByb2Jh
Ymx5IHRyaWdnZXIgcmVjb21waWxhdGlvbi4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBpbmxpbmVDYWxsRnJhbWVzKCkuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmaW5saW5lQ2FsbEZyYW1lcygpW2ldLmV4ZWN1dGFibGUpOworICAgIH0KKyNlbmRpZgor
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIGZvciAodW5zaWduZWQgcHJvZmlsZUlu
ZGV4ID0gMDsgcHJvZmlsZUluZGV4IDwgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCk7ICsrcHJvZmls
ZUluZGV4KQogICAgICAgICB2YWx1ZVByb2ZpbGUocHJvZmlsZUluZGV4KS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjUxLDYgKzI1MSwxOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUGFzc093blB0cjxDb2RlQmxvY2s+IHJlbGVhc2VBbHRlcm5h
dGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUucmVsZWFzZSgpOyB9CiAgICAgICAgIHZvaWQg
c2V0QWx0ZXJuYXRpdmUoUGFzc093blB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0
ZXJuYXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQogICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZVZlcnNpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIHJlc3Vs
dCA9IHJlcGxhY2VtZW50KCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlJ3JlIGluIHRoZSBwcm9jZXNz
IG9mIGNyZWF0aW5nIHRoZSBiYXNlbGluZSB2ZXJzaW9uLgorICAgICAgICAgICAgd2hpbGUgKHJl
c3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQtPmFs
dGVybmF0aXZlKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQtPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB2b2lk
IHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZHVt
cFN0YXRpc3RpY3MoKTsKQEAgLTM3NiwxMCArMzg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4mIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1
Y3Rpb25zOyB9CiAgICAgICAgIHZvaWQgZGlzY2FyZEJ5dGVjb2RlKCkgeyBtX2luc3RydWN0aW9u
cy5jbGVhcigpOyB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQoKSB7IHJldHVybiBtX2luc3RydWN0aW9uQ291bnQ7IH0KICAgICAgICAgdm9pZCBz
ZXRJbnN0cnVjdGlvbkNvdW50KHVuc2lnbmVkIGluc3RydWN0aW9uQ291bnQpIHsgbV9pbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25Db3VudDsgfQotI2VuZGlmCiAKICNpZiBFTkFCTEUoSklU
KQogICAgICAgICB2b2lkIHNldEpJVENvZGUoY29uc3QgSklUQ29kZSYgY29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNvZGVXaXRoQXJpdHlDaGVjaykKQEAgLTUzMSwxMCArNTQxLDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIFdURjo6Z2VuZXJpY0JpbmFyeVNlYXJj
aDxSYXJlQ2FzZVByb2ZpbGUsIGludCwgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQ+
KG1fcmFyZUNhc2VQcm9maWxlcywgbV9yYXJlQ2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgdWludDMyX3Qgc2xv
d0Nhc2VUaHJlc2hvbGQoKSB7IHJldHVybiAxMDA7IH0KICAgICAgICAgYm9vbCBsaWtlbHlUb1Rh
a2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1f
Y291bnRlciA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49
IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGNvdWxkVGFrZVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49IEhldXJpc3RpY3M6OmNvdWxk
VGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSYXJl
Q2FzZVByb2ZpbGUqIGFkZFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaW50IGJ5dGVjb2RlT2Zmc2V0
KQpAQCAtNTUyLDIxICs1NjYsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewog
ICAgICAgICAgICAgdW5zaWduZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0g
ICAgICAgICAgICByZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgICAgIHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBIZXVyaXN0
aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zm
c2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBzbG93Q2FzZUNvdW50ID0gcmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7
CiAgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0
Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsK
LSAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNpYWxGYXN0Q2FzZUNvdW50
KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNv
dW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IEhldXJpc3RpY3M6Omxpa2VseVRvVGFrZVNs
b3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGxpa2Vs
eVRvVGFrZUFueVNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAgICAg
ICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWduZWQg
c3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4gKHNs
b3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hvbGQo
KTsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCArIHNwZWNpYWxGYXN0Q2FzZUNv
dW50KSA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldFJhcmVDYXNlUHJvZmlsZXMoKTsKQEAg
LTk0NSw5ICs5NTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBt
X2dsb2JhbERhdGE7CiAKICAgICAgICAgVmVjdG9yPEluc3RydWN0aW9uPiBtX2luc3RydWN0aW9u
czsKLSNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIG1faW5zdHJ1Y3Rpb25Db3VudDsK
LSNlbmRpZgogCiAgICAgICAgIGludCBtX3RoaXNSZWdpc3RlcjsKICAgICAgICAgaW50IG1fYXJn
dW1lbnRzUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOSBAQAogI2lm
bmRlZiBDb2RlT3JpZ2luX2gKICNkZWZpbmUgQ29kZU9yaWdpbl9oCiAKKyNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTYsMTQgKzU4LDI4IEBAIHN0cnVj
dCBDb2RlT3JpZ2luIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIGJ5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
OyB9CisgICAgCisgICAgLy8gVGhlIGlubGluZSBkZXB0aCBpcyB0aGUgZGVwdGggb2YgdGhlIGlu
bGluZSBzdGFjaywgc28gMSA9IG5vdCBpbmxpbmVkLAorICAgIC8vIDIgPSBpbmxpbmVkIG9uZSBk
ZWVwLCBldGMuCisgICAgdW5zaWduZWQgaW5saW5lRGVwdGgoKSBjb25zdDsKKyAgICAKKyAgICBz
dGF0aWMgdW5zaWduZWQgaW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKik7
CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25z
dDsKKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRo
aXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KKyAgICBWZWN0
b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBjb25zdDsKKyNlbmRpZgogfTsKIAogc3RydWN0
IElubGluZUNhbGxGcmFtZSB7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGU7CisgICAg
V3JpdGVCYXJyaWVyPEV4ZWN1dGFibGVCYXNlPiBleGVjdXRhYmxlOwogICAgIHVuc2lnbmVkIHN0
YWNrT2Zmc2V0OwogICAgIHVuc2lnbmVkIGNhbGxlZVZSOwogICAgIENvZGVPcmlnaW4gY2FsbGVy
OwotICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXM7CisgICAgdW5zaWduZWQg
bnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyA6IDMxOworICAgIGJvb2wgaXNDYWxsIDogMTsKIH07
CiAKIHN0cnVjdCBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0IHsKQEAgLTcxLDYgKzg3LDM4
IEBAIHN0cnVjdCBDb2RlT3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0IHsKICAgICB1bnNpZ25lZCBj
YWxsUmV0dXJuT2Zmc2V0OwogfTsKIAoraW5saW5lIHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGlu
ZURlcHRoRm9yQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorewor
ICAgIHVuc2lnbmVkIHJlc3VsdCA9IDE7CisgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJl
bnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXN1bHQrKzsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGgoKSBjb25zdAorewor
ICAgIHJldHVybiBpbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxpbmVDYWxsRnJhbWUpOworfQor
ICAgIAoraW5saW5lIGJvb2wgQ29kZU9yaWdpbjo6b3BlcmF0b3I9PShjb25zdCBDb2RlT3JpZ2lu
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gYnl0ZWNvZGVJbmRleCA9PSBvdGhlci5ieXRl
Y29kZUluZGV4CisgICAgICAgICYmIGlubGluZUNhbGxGcmFtZSA9PSBvdGhlci5pbmxpbmVDYWxs
RnJhbWU7Cit9CisgICAgCisjaWZuZGVmIE5ERUJVRworLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2su
IFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KK2lubGlu
ZSBWZWN0b3I8Q29kZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhY2soKSBjb25zdAorewor
ICAgIFZlY3RvcjxDb2RlT3JpZ2luPiByZXN1bHQoaW5saW5lRGVwdGgoKSk7CisgICAgcmVzdWx0
Lmxhc3QoKSA9ICp0aGlzOworICAgIHVuc2lnbmVkIGluZGV4ID0gcmVzdWx0LnNpemUoKSAtIDI7
CisgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICByZXN1bHRbaW5kZXgtLV0gPSBjdXJyZW50LT5jYWxsZXI7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKyNlbmRpZgorCiBpbmxpbmUgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldEZvckNvZGVP
cmlnaW4oQ29kZU9yaWdpbkF0Q2FsbFJldHVybk9mZnNldCogZGF0YSkKIHsKICAgICByZXR1cm4g
ZGF0YS0+Y2FsbFJldHVybk9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5
ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsOSArMTQ0LDkgQEAgSlNPYmplY3QqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpCiAKICAgICBtX3Njb3BlTm9kZS0+ZW1pdEJ5dGVj
b2RlKCp0aGlzKTsKIAotI2lmbmRlZiBOREVCVUcKICAgICBtX2NvZGVCbG9jay0+c2V0SW5zdHJ1
Y3Rpb25Db3VudChtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKIAorI2lmbmRl
ZiBOREVCVUcKICAgICBpZiAoc19kdW1wc0dlbmVyYXRlZENvZGUpCiAgICAgICAgIG1fY29kZUJs
b2NrLT5kdW1wKG1fc2NvcGVDaGFpbi0+Z2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOwogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgdm9pZCBB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaQogICAgIAogICAgIEFTU0VSVCghbV9i
bG9jayk7CiAgICAgCisgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1i
ZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZC5udW1iZXJPZkxvY2Fscygp
KTsKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFT
U0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5lbmQgLSBiYXNpY0Jsb2NrLT5iZWdpbjsg
KytpKQogICAgICAgICBtX25vZGVzW2ldLmNsZWFyKCk7CiAgICAgbV92YXJpYWJsZXMgPSBiYXNp
Y0Jsb2NrLT52YWx1ZXNBdEhlYWQ7CkBAIC02MjksNiArNjMzLDcgQEAgYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKE5vZGVJbmRleCBubwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgY2FzZSBCcmVha3BvaW50OgpAQCAtNjgzLDYgKzY4OCw3IEBAIGlubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAg
ICBjYXNlIFBoaToKICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgIGNhc2UgRmx1c2g6CiAgICAg
ICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgog
ICAgICAgICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gOTgwODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsMTIgKzQ2LDI0IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICAgICAgLCBpc09T
UlRhcmdldChmYWxzZSkKICAgICAgICAgLCBjZmFIYXNWaXNpdGVkKGZhbHNlKQogICAgICAgICAs
IGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAs
IGlzTGlua2VkKGZhbHNlKQorI2VuZGlmCisgICAgICAgICwgaXNSZWFjaGFibGUoZmFsc2UpCiAg
ICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAg
ICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2
YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFsdWVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgIHsKICAgICB9CisgICAgCisgICAgdm9p
ZCBlbnN1cmVMb2NhbHModW5zaWduZWQgbmV3TnVtTG9jYWxzKQorICAgIHsKKyAgICAgICAgdmFy
aWFibGVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YXJpYWJs
ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0SGVh
ZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFsdWVzQXRUYWlsLmVuc3Vy
ZUxvY2FscyhuZXdOdW1Mb2NhbHMpOworICAgIH0KIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgdXNl
ZCBpbnRlcm5hbGx5IGZvciBibG9jayBsaW5raW5nIGFuZCBPU1IgZW50cnkuIEl0IGlzIG1vc3Rs
eSBtZWFuaW5nbGVzcwogICAgIC8vIGZvciBvdGhlciBwdXJwb3NlcyBkdWUgdG8gaW5saW5pbmcu
CkBAIC02Miw2ICs3NCwxMCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgYm9vbCBpc09TUlRh
cmdldDsKICAgICBib29sIGNmYUhhc1Zpc2l0ZWQ7CiAgICAgYm9vbCBjZmFTaG91bGRSZXZpc2l0
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBib29sIGlzTGlua2VkOworI2VuZGlmCisgICAg
Ym9vbCBpc1JlYWNoYWJsZTsKICAgICAKICAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3Nv
cnM7CiAgICAgCkBAIC03Miw2ICs4OCwyMSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgT3Bl
cmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOwogfTsKIAorc3RydWN0IFVubGlua2Vk
QmxvY2sgeworICAgIEJsb2NrSW5kZXggbV9ibG9ja0luZGV4OworICAgIGJvb2wgbV9uZWVkc05v
cm1hbExpbmtpbmc7CisgICAgYm9vbCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5nOworICAgIAor
ICAgIFVubGlua2VkQmxvY2soKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBVbmxpbmtlZEJsb2Nr
KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICAgICAgOiBtX2Jsb2NrSW5kZXgoYmxvY2tJbmRl
eCkKKyAgICAgICAgLCBtX25lZWRzTm9ybWFsTGlua2luZyh0cnVlKQorICAgICAgICAsIG1fbmVl
ZHNFYXJseVJldHVybkxpbmtpbmcoZmFsc2UpCisgICAgeworICAgIH0KK307CisgICAgCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgICAgICwgbV9wcm9maWxlZEJsb2NrKHBy
b2ZpbGVkQmxvY2spCiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAgICAgLCBtX2N1cnJl
bnRCbG9jaygwKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCiAgICAgICAgICwgbV9wYXJz
ZUZhaWxlZChmYWxzZSkKICAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKFVJTlRfTUFYKQpA
QCAtNzcsMTUgKzc4LDE5IEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1h
eC4KICAgICBib29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVy
YW5kLCBOb2RlVHlwZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCi0gICAg
Ly8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuCisgICAgLy8gSGFuZGxlIGlubGluaW5nLiBS
ZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBj
YWxsLgorICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRh
cmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRPcGVyYW5kLCBi
b29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RB
cmcsIGludCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zmc2V0KTsKKyAgICAvLyBIYW5kbGUgaW50
cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3
ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVz
ZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCBmaXJzdEFyZywgaW50
IGxhc3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgLy8gUGFyc2UgYSBzaW5n
bGUgYmFzaWMgYmxvY2sgb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogICAgIGJvb2wgcGFyc2VC
bG9jayh1bnNpZ25lZCBsaW1pdCk7Ci0gICAgLy8gU2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4g
dGhlIGdyYXBoJ3MgQmFzaWNCbG9ja3MuCi0gICAgdm9pZCBzZXR1cFByZWRlY2Vzc29ycygpOwor
ICAgIC8vIEZpbmQgcmVhY2hhYmxlIGNvZGUgYW5kIHNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGlu
IHRoZSBncmFwaCdzIEJhc2ljQmxvY2tzLgorICAgIHZvaWQgZGV0ZXJtaW5lUmVhY2hhYmlsaXR5
KCk7CisgICAgLy8gRW5xdWV1ZSBhIGJsb2NrIG9udG8gdGhlIHdvcmtsaXN0LCBpZiBuZWNlc3Nh
cnkuCisgICAgdm9pZCBoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29y
a2xpc3QsIEJsb2NrSW5kZXgsIEJsb2NrSW5kZXggc3VjY2Vzc29yKTsKICAgICAvLyBMaW5rIGJs
b2NrIHN1Y2Nlc3NvcnMuCi0gICAgdm9pZCBsaW5rQmxvY2soQmFzaWNCbG9jayosIFZlY3RvcjxC
bG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKTsKLSAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9y
PEJsb2NrSW5kZXg+JiB1bmxpbmtlZEJsb2Nrcyk7CisgICAgdm9pZCBsaW5rQmxvY2soQmFzaWNC
bG9jayosIFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgcG9zc2libGVUYXJnZXRzKTsKKyAgICB2b2lk
IGxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2Nrcyk7CiAgICAg
Ly8gTGluayBHZXRMb2NhbCAmIFNldExvY2FsIG5vZGVzLCB0byBlbnN1cmUgbGl2ZSB2YWx1ZXMg
YXJlIGdlbmVyYXRlZC4KICAgICBlbnVtIFBoaVN0YWNrVHlwZSB7CiAgICAgICAgIExvY2FsUGhp
U3RhY2ssCkBAIC0xMDUsMTAgKzExMCw4IEBAIHByaXZhdGU6CiAgICAgfQogICAgIAogICAgIC8v
IEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgot
ICAgIE5vZGVJbmRleCBnZXQoaW50IG9wZXJhbmQpCisgICAgTm9kZUluZGV4IGdldERpcmVjdChp
bnQgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGEgY29u
c3RhbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQgLSBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsKQEAgLTEyMywxMCArMTI2LDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgcmV0dXJuIGdldExvY2FsKCh1bnNpZ25lZClv
cGVyYW5kKTsKICAgICB9Ci0gICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1
ZSkKKyAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOworICAg
IH0KKyAgICB2b2lkIHNldERpcmVjdChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAg
IHsKLSAgICAgICAgb3BlcmFuZCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVy
YW5kKTsKLSAgICAgICAgCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewogICAgICAgICAgICAgc2V0QXJndW1l
bnQob3BlcmFuZCwgdmFsdWUpOwpAQCAtMTM2LDE4ICsxNDEsMzUgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gTXVzdCBiZSBhIGxvY2FsLgogICAgICAgICBzZXRMb2NhbCgodW5zaWduZWQpb3BlcmFu
ZCwgdmFsdWUpOwogICAgIH0KKyAgICB2b2lkIHNldChpbnQgb3BlcmFuZCwgTm9kZUluZGV4IHZh
bHVlKQorICAgIHsKKyAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZChvcGVyYW5kKSwgdmFsdWUpOworICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50
aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxl
LgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwob3BlcmFuZCk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9O
b2RlKSB7Ci0gICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwotICAg
ICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBOb2RlKiBub2Rl
UHRyID0gJm1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9
PSBGbHVzaCkgeworICAgICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIg
dGhlIGJsb2NrIHdhbnRzIHRoZSBsb2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8g
YnV0IGhhcyBub3QgbG9hZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUs
IGluCisgICAgICAgICAgICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAg
ICAgICAgIE5vZGUmIGZsdXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoZmx1c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxk
LnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJmZsdXNoQ2hpbGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0
ci0+b3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKLSAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKLSAgICAgICAgICAgIHJldHVy
biBub2RlLmNoaWxkMSgpOworICAgICAgICAgICAgQVNTRVJUKG5vZGVQdHItPm9wID09IFNldExv
Y2FsKTsKKyAgICAgICAgICAgIHJldHVybiBub2RlUHRyLT5jaGlsZDEoKTsKICAgICAgICAgfQog
CiAgICAgICAgIC8vIENoZWNrIGZvciByZWFkcyBvZiB0ZW1wb3JhcmllcyBmcm9tIHByaW9yIGJs
b2NrcywKQEAgLTE3OSwyMSArMjAxLDM0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9w
ID09IFNldEFyZ3VtZW50KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlUHRyID0gJm1fZ3JhcGhb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBGbHVzaCkgeworICAg
ICAgICAgICAgICAgIC8vIFR3byBwb3NzaWJpbGl0aWVzOiBlaXRoZXIgdGhlIGJsb2NrIHdhbnRz
IHRoZSBsb2NhbCB0byBiZSBsaXZlCisgICAgICAgICAgICAgICAgLy8gYnV0IGhhcyBub3QgbG9h
ZGVkIGl0cyB2YWx1ZSwgb3IgaXQgaGFzIGxvYWRlZCBpdHMgdmFsdWUsIGluCisgICAgICAgICAg
ICAgICAgLy8gd2hpY2ggY2FzZSB3ZSdyZSBkb25lLgorICAgICAgICAgICAgICAgIE5vZGUmIGZs
dXNoQ2hpbGQgPSBtX2dyYXBoW25vZGVQdHItPmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmx1c2hDaGlsZC5vcCA9PSBQaGkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBmbHVzaENoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgbm9kZVB0ci0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJmZsdXNoQ2hp
bGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gU2V0QXJn
dW1lbnQpIHsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSBnZXR0aW5nIGFuIGFyZ3VtZW50IGlu
IHRoZSBmaXJzdCBiYXNpYyBibG9jazsgbGluawogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRM
b2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCi0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKLSAgICAgICAg
ICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGVQdHItPmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7
CisgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KG5vZGVQdHItPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsKICAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9
IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRMb2NhbCkK
KyAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBHZXRMb2NhbCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAg
ICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpOwpAQCAtMjE0LDYgKzI0OSw1MSBAQCBwcml2YXRlOgogCiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gYWRkVG9H
cmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZh
bHVlKTsKICAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaChpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQob3BlcmFuZCA8IEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXg7CisgICAgICAg
IGludCBpbmRleDsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Cisg
ICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbm9kZUlu
ZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChpbmRleCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbmRleCA9IG9wZXJhbmQ7CisgICAgICAgICAg
ICBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGluZGV4
KTsKKyAgICAgICAgICAgIG1fcHJlc2VydmVkVmFycy5zZXQob3BlcmFuZCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CisgICAgICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUu
b3AgPT0gRmx1c2ggfHwgbm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgICAg
IC8vIElmIGEgbG9jYWwgaGFzIGFscmVhZHkgYmVlbiBmbHVzaGVkLCBvciBpZiBpdCdzIGFuIGFy
Z3VtZW50IGluIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpcnN0IGJhc2ljIGJsb2NrLCB0aGVu
IHRoZXJlIGlzIHJlYWxseSBubyBuZWVkIHRvIGZsdXNoIGl0LiBJbiBmYWN0CisgICAgICAgICAg
ICAgICAgLy8gZW1pdHRpbmcgYSBGbHVzaCBpbnN0cnVjdGlvbiBjb3VsZCBqdXN0IGNvbmZ1c2Ug
dGhpbmdzLCBzaW5jZSB0aGUKKyAgICAgICAgICAgICAgICAvLyBnZXRBcmd1bWVudCgpIGNvZGUg
YXNzdW1lcyB0aGF0IHdlIG5ldmVyIHNlZSBhIEZsdXNoIG9mIGEgU2V0QXJndW1lbnQuCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoRmx1c2gsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCk7CisgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBo
aSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOworICAgICAgICBub2RlSW5kZXggPSBhZGRU
b0dyYXBoKEZsdXNoLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBtX2FyZ3VtZW50
UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgp
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aW5kZXgpID0gbm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRy
eShtX2N1cnJlbnRCbG9jaywgcGhpLCBpbmRleCkpOworICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCkgPSBub2RlSW5kZXg7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKGluZGV4
LCBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQs
IGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgogICAgIE5v
ZGVJbmRleCBnZXRUb0ludDMyKGludCBvcGVyYW5kKQpAQCAtNjYzLDggKzc0Myw2IEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDE2PiBtX2FyZ3VtZW50UGhpU3RhY2s7CiAg
ICAgVmVjdG9yPFBoaVN0YWNrRW50cnksIDE2PiBtX2xvY2FsUGhpU3RhY2s7CiAgICAgCi0gICAg
VmVjdG9yPE5vZGUqLCAxNj4gbV9yZXVzYWJsZU5vZGVTdGFjazsKLSAgICAKICAgICBzdHJ1Y3Qg
SW5saW5lU3RhY2tFbnRyeSB7CiAgICAgICAgIEJ5dGVDb2RlUGFyc2VyKiBtX2J5dGVDb2RlUGFy
c2VyOwogICAgICAgICAKQEAgLTY4NCw3ICs3NjIsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBC
bG9ja3MgaW50cm9kdWNlZCBieSB0aGlzIGNvZGUgYmxvY2ssIHdoaWNoIG5lZWQgc3VjY2Vzc29y
IGxpbmtpbmcuCiAgICAgICAgIC8vIE1heSBpbmNsdWRlIHVwIHRvIG9uZSBiYXNpYyBibG9jayB0
aGF0IGluY2x1ZGVzIHRoZSBjb250aW51YXRpb24gYWZ0ZXIKICAgICAgICAgLy8gdGhlIGNhbGxz
aXRlIGluIHRoZSBjYWxsZXIuCi0gICAgICAgIFZlY3RvcjxCbG9ja0luZGV4PiBtX3VubGlua2Vk
QmxvY2tzOworICAgICAgICBWZWN0b3I8VW5saW5rZWRCbG9jaz4gbV91bmxpbmtlZEJsb2NrczsK
ICAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBjYWxsc2l0ZSdzIGJhc2ljIGJsb2NrIHdhcyBz
cGxpdCBpbnRvIHR3bywgdGhlbiB0aGlzIHdpbGwgYmUKICAgICAgICAgLy8gdGhlIGhlYWQgb2Yg
dGhlIGNhbGxzaXRlIGJsb2NrLiBJdCBuZWVkcyBpdHMgc3VjY2Vzc29ycyBsaW5rZWQgdG8gdGhl
CkBAIC02OTIsMjIgKzc3MCw0MCBAQCBwcml2YXRlOgogICAgICAgICAvLyBhbnkgYmxvY2tzIGlu
IG1fdW5saW5rZWRCbG9ja3MgdG8ganVtcCBiYWNrIGludG8gdGhpcyBibG9jay4KICAgICAgICAg
QmxvY2tJbmRleCBtX2NhbGxzaXRlQmxvY2tIZWFkOwogICAgICAgICAKLSAgICAgICAgSW5saW5l
U3RhY2tFbnRyeSogbV9jYWxsZWU7CisgICAgICAgIC8vIERvZXMgdGhlIGNhbGxzaXRlIGJsb2Nr
IGhlYWQgbmVlZCBsaW5raW5nPyBUaGlzIGlzIHR5cGljYWxseSB0cnVlCisgICAgICAgIC8vIGJ1
dCB3aWxsIGJlIGZhbHNlIGZvciB0aGUgbWFjaGluZSBjb2RlIGJsb2NrJ3MgaW5saW5lIHN0YWNr
IGVudHJ5CisgICAgICAgIC8vIChzaW5jZSB0aGF0IG9uZSBpcyBub3QgaW5saW5lZCkgYW5kIGZv
ciBjYXNlcyB3aGVyZSBhbiBpbmxpbmUgY2FsbGVlCisgICAgICAgIC8vIGRpZCB0aGUgbGlua2lu
ZyBmb3IgdXMuCisgICAgICAgIGJvb2wgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZzsK
ICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2Rl
QmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9j
a0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUik7CisgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX3JldHVyblZhbHVlOworICAgICAgICAKKyAgICAgICAgLy8gRGlkIHdlIHNlZSBhbnkgcmV0
dXJucz8gV2UgbmVlZCB0byBoYW5kbGUgdGhlICh1bmNvbW1vbiBidXQgbmVjZXNzYXJ5KQorICAg
ICAgICAvLyBjYXNlIHdoZXJlIGEgcHJvY2VkdXJlIHRoYXQgZG9lcyBub3QgcmV0dXJuIHdhcyBp
bmxpbmVkLgorICAgICAgICBib29sIG1fZGlkUmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8g
RGlkIHdlIGhhdmUgYW55IGVhcmx5IHJldHVybnM/CisgICAgICAgIGJvb2wgbV9kaWRFYXJseVJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVyOworICAg
ICAgICAKKyAgICAgICAgSW5saW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciosIENvZGVCbG9j
ayosIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVh
ZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVW
UiwgVmlydHVhbFJlZ2lzdGVyIGlubGluZUNhbGxGcmFtZVN0YXJ0KTsKICAgICAgICAgCiAgICAg
ICAgIH5JbmxpbmVTdGFja0VudHJ5KCkKICAgICAgICAgewotICAgICAgICAgICAgbV9ieXRlQ29k
ZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9IG1fY2FsbGVlOworICAgICAgICAgICAgbV9ieXRl
Q29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9IG1fY2FsbGVyOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBpbnQgcmVtYXBPcGVyYW5kKGludCBvcGVyYW5kKQorICAgICAgICBpbnQg
cmVtYXBPcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb25zdGFudFJlbWFwW29wZXJh
bmQgLSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleF0gKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsKKyAgICAgICAgICAgIGlmIChvcGVyYW5kID49IEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4KSB7CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IG1fY29uc3RhbnRSZW1hcFtvcGVy
YW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXhdOworICAgICAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiBvcGVyYW5kICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAg
ICB9CkBAIC03NTYsNiArODUyLDE3OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5N
YXgoYm9vbCB1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIGludCBjYWxsVGFyZ2V0LCBOb2RlSW5kZXgg
Y2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFib3V0
RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlvbiwgaW50IGZpcnN0
QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCkKK3sKKyAgICAvLyBGaXJzdCwg
dGhlIHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZlIGFuIGFjdHVhbCBKUyBmdW5jdGlv
bj8KKyAgICBpZiAoIWV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoZXhwZWN0ZWRGdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGV4cGVj
dGVkRnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOworICAgIAorICAgIC8vIERvZXMgdGhlIG51bWJl
ciBvZiBhcmd1bWVudHMgd2UncmUgcGFzc2luZyBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHRhcmdl
dD8gV2UgY291bGQKKyAgICAvLyBpbmxpbmUgYXJpdHkgY2hlY2sgZmFpbHVyZXMsIGJ1dCBmb3Ig
c2ltcGxpY2l0eSB3ZSBjdXJyZW50bHkgZG9uJ3QuCisgICAgaWYgKHN0YXRpY19jYXN0PGludD4o
ZXhlY3V0YWJsZS0+cGFyYW1ldGVyQ291bnQoKSkgKyAxICE9IGxhc3RBcmcgLSBmaXJzdEFyZyAr
IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBIYXZlIHdlIGV4Y2VlZGVk
IGlubGluZSBzdGFjayBkZXB0aCwgb3IgYXJlIHdlIHRyeWluZyB0byBpbmxpbmUgYSByZWN1cnNp
dmUgY2FsbD8KKyAgICAvLyBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGRldGVjdGVkLCB0aGVuIGRv
bid0IGlubGluZS4KKyAgICB1bnNpZ25lZCBkZXB0aCA9IDA7CisgICAgZm9yIChJbmxpbmVTdGFj
a0VudHJ5KiBlbnRyeSA9IG1faW5saW5lU3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5t
X2NhbGxlcikgeworICAgICAgICArK2RlcHRoOworICAgICAgICBpZiAoZGVwdGggPj0gSGV1cmlz
dGljczo6bWF4aW11bUlubGluaW5nRGVwdGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IERlcHRoIGV4Y2VlZGVkLgorICAgICAgICAKKyAgICAgICAgaWYgKGVudHJ5LT5leGVjdXRhYmxl
KCkgPT0gZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVjdXJzaW9u
IGRldGVjdGVkLgorICAgIH0KKyAgICAKKyAgICAvLyBEb2VzIHRoZSBjb2RlIGJsb2NrJ3Mgc2l6
ZSBtYXRjaCB0aGUgaGV1cmlzdGljcy9yZXF1aXJlbWVudHMgZm9yIGJlaW5nCisgICAgLy8gYW4g
aW5saW5lIGNhbmRpZGF0ZT8KKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBleGVjdXRh
YmxlLT5wcm9maWxlZENvZGVCbG9ja0ZvcihDb2RlRm9yQ2FsbCk7CisgICAgaWYgKCFtaWdodElu
bGluZUZ1bmN0aW9uRm9yQ2FsbChwcm9maWxlZEJsb2NrKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlIHRoZW4gaXQgbG9va3MgbGlrZSB3ZSBzaG91
bGQgZGVmaW5pdGVseSBpbmxpbmUgdGhpcyBjb2RlLiBQcm9jZWVkCisgICAgLy8gd2l0aCBwYXJz
aW5nIHRoZSBjb2RlIHRvIGdldCBieXRlY29kZSwgc28gdGhhdCB3ZSBjYW4gdGhlbiBwYXJzZSB0
aGUgYnl0ZWNvZGUuCisgICAgLy8gTm90ZSB0aGF0IHRoZSBjb2RlIGJsb2NrIHdlIGdldCBoZXJl
IGlzIGludGVuZGVkIHRvIGRpZSBhZnRlciBoYW5kbGVJbmxpbmluZygpCisgICAgLy8gcmV0dXJu
cy4KKyAgICBKU09iamVjdCogZXhjZXB0aW9uOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNvZGVC
bG9jayA9IGV4ZWN1dGFibGUtPnByb2R1Y2VDb2RlQmxvY2tGb3IoZXhwZWN0ZWRGdW5jdGlvbi0+
c2NvcGUoKSwgT3B0aW1pemluZ0NvbXBpbGF0aW9uLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsK
KyAgICBpZiAoIWNvZGVCbG9jaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVCgh
ZXhjZXB0aW9uKTsKKyAgICAKKyAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBieXRlY29kZSwg
Y2hlY2sgaWYgd2UgcmVhbGx5IGNhbiBpbmxpbmUgaXQuIFRoaXMgbWF5IGZhaWwKKyAgICAvLyBp
ZiB0aGUgY29kZSBibG9jayBjb250YWlucyBzb21lIG5hc3R5IG9wY29kZXMuCisgICAgaWYgKCFj
YW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJsb2NrLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIHByaW50ZigiSW5s
aW5pbmcgZXhlY3V0YWJsZSAlcC5cbiIsIGV4ZWN1dGFibGUpOworI2VuZGlmCisgICAgCisgICAg
Ly8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBp
bmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKKyAgICAvLyBieSBjaGVja2luZyB0aGUgY2Fs
bGVlIChpZiBuZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhl
IGNhbGxlZQorICAgIC8vIGFyZSBmbHVzaGVkLgorICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0
ZWRGdW5jdGlvbikKKyAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZXhw
ZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJnZXROb2RlSW5kZXgpOworICAgIAorICAgIGZsdXNoKGNh
bGxUYXJnZXQpOworICAgIGZvciAoaW50IGFyZyA9IGZpcnN0QXJnICsgMTsgYXJnIDw9IGxhc3RB
cmc7ICsrYXJnKQorICAgICAgICBmbHVzaChhcmcpOworICAgIAorICAgIGludCBpbmxpbmVDYWxs
RnJhbWVTdGFydCA9IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChsYXN0QXJnKSArIDE7
CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFyZWEgdXNlZCBieSB0aGUgY2FsbCBm
cmFtZSBpcyByZXNlcnZlZC4KKyAgICBmb3IgKGludCBhcmcgPSBpbmxpbmVDYWxsRnJhbWVTdGFy
dCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1W
YXJzOyBhcmctLSA+IGlubGluZUNhbGxGcmFtZVN0YXJ0ICsgMTspCisgICAgICAgIG1fcHJlc2Vy
dmVkVmFycy5zZXQobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKGFyZykpOworICAgIAor
ICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZW5vdWdoIGxvY2Fscy4KKyAgICB1bnNpZ25l
ZCBuZXdOdW1Mb2NhbHMgPSBpbmxpbmVDYWxsRnJhbWVTdGFydCArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZSArIGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7CisgICAg
aWYgKG5ld051bUxvY2FscyA+IG1fbnVtTG9jYWxzKSB7CisgICAgICAgIG1fbnVtTG9jYWxzID0g
bmV3TnVtTG9jYWxzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW2ldLT5lbnN1
cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICB9CisKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlu
bGluZVN0YWNrRW50cnkodGhpcywgY29kZUJsb2NrLmdldCgpLCBwcm9maWxlZEJsb2NrLCBtX2dy
YXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKGNhbGxUYXJnZXQpLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZCh1c2VzUmVzdWx0ID8gcmVzdWx0T3BlcmFuZCA6IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpLCAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0KTsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhh
cHBlbnMuCisgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKKyAgICBtX2N1
cnJlbnRJbmRleCA9IDA7CisgICAgcGFyc2VDb2RlQmxvY2soKTsKKyAgICBtX2N1cnJlbnRJbmRl
eCA9IG9sZEluZGV4OworICAgIAorICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBz
b21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgorICAgIGlm
IChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkgLSAxKSB7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWlubGluZVN0YWNrRW50
cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAgICAgICBpZiAoaW5saW5lU3RhY2tF
bnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKQorICAgICAgICAgICAgbGlua0Js
b2NrKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
XS5nZXQoKSwgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5t
X2NhbGxzaXRlQmxvY2tIZWFkXS0+aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAgLy8gSXQn
cyBwb3NzaWJsZSB0aGF0IHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIGlzIG5vdyBvd25lZCBieSB0
aGUgY2FsbGVyLgorICAgICAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tF
bnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4ID09IGlu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgICAgICBBU1NFUlQo
aW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVk
c05vcm1hbExpbmtpbmcpOworICAgICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+
bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2Fs
bGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKTsKKyAgICAgICAgICAgIEFTU0VS
VChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkID09IGlubGlu
ZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgICAgICBpbmxpbmVTdGFj
a0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRy
eS5tX3VubGlua2VkQmxvY2tzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgQVNTRVJUKGlubGluZVN0
YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIElmIHRo
ZXJlIHdhcyBhIHJldHVybiwgYnV0IG5vIGVhcmx5IHJldHVybnMsIHRoZW4gd2UncmUgZG9uZS4g
V2UgYWxsb3cgcGFyc2luZyBvZgorICAgIC8vIHRoZSBjYWxsZXIgdG8gY29udGludWUgaW4gd2hh
dGV2ZXIgYmFzaWMgYmxvY2sgd2UncmUgaW4gcmlnaHQgbm93LgorICAgIGlmICghaW5saW5lU3Rh
Y2tFbnRyeS5tX2RpZEVhcmx5UmV0dXJuICYmIGlubGluZVN0YWNrRW50cnkubV9kaWRSZXR1cm4p
IHsKKyAgICAgICAgQmFzaWNCbG9jayogbGFzdEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0
KCkuZ2V0KCk7CisgICAgICAgIEFTU0VSVChsYXN0QmxvY2stPmJlZ2luID09IGxhc3RCbG9jay0+
ZW5kIHx8ICFtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gSWYgd2UgY3JlYXRlZCBuZXcgYmxvY2tzIHRoZW4gdGhlIGxhc3QgYmxvY2sgbmVlZHMgbGlu
a2luZywgYnV0IGluIHRoZQorICAgICAgICAvLyBjYWxsZXIuIEl0IGRvZXNuJ3QgbmVlZCB0byBi
ZSBsaW5rZWQgdG8sIGJ1dCBpdCBuZWVkcyBvdXRnb2luZyBsaW5rcy4KKyAgICAgICAgaWYgKCFp
bmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAvLyBHaXZlIGl0IGEgdmFsdWUgdGhhdCB3b24ndCBwZXJ0dXJiIGJpbmFyeSBzZWFyY2gsIGFu
ZCB3b24ndCBiZSBmb3VuZC4gVGhpcyB3b3VsZAorICAgICAgICAgICAgLy8gZmFpbCBpZiBvcF9j
YWxsIGNvdWxkIGFwcGVhciBhdCB0aGUgaGVhZCBvZiBhIGJhc2ljIGJsb2NrLiBUaGF0IHNob3Vs
ZG4ndCBoYXBwZW4sCisgICAgICAgICAgICAvLyBnaXZlbiB0aGUgd2F5IHRoZSBieXRlY29kZSBn
ZW5lcmF0b3Igd29ya3MuCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAg
ICAgcHJpbnRmKCJSZWFzY3JpYmluZyBieXRlY29kZSBpbmRleCBvZiBibG9jayAlcCBmcm9tIGJj
IyV1IHRvIGJjIyV1IChpbmxpbmUgcmV0dXJuIGNhc2UpLlxuIiwgbGFzdEJsb2NrLCBsYXN0Qmxv
Y2stPmJ5dGVjb2RlQmVnaW4sIG1fY3VycmVudEluZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAg
bGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJyZW50SW5kZXg7CisgICAgICAgICAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW4gPCBsYXN0Qmxv
Y2stPmJ5dGVjb2RlQmVnaW4pOworICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxs
ZXItPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkgLSAxKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fY3VycmVudEJs
b2NrID0gbV9ncmFwaC5tX2Jsb2Nrcy5sYXN0KCkuZ2V0KCk7CisKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiRG9uZSBpbmxpbmluZyBleGVjdXRhYmxlICVw
LCBjb250aW51aW5nIGNvZGUgZ2VuZXJhdGlvbiBhdCBlcGlsb2d1ZS5cbiIsIGV4ZWN1dGFibGUp
OworI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBJZiB3
ZSBnZXQgdG8gdGhpcyBwb2ludCB0aGVuIGFsbCBibG9ja3MgbXVzdCBlbmQgaW4gc29tZSBzb3J0
IG9mIHRlcm1pbmFscy4KKyAgICBBU1NFUlQobV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsK
KyAgICAKKyAgICAvLyBMaW5rIHRoZSBlYXJseSByZXR1cm5zIHRvIHRoZSBiYXNpYyBibG9jayB3
ZSdyZSBhYm91dCB0byBjcmVhdGUuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmxpbmVT
dGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFp
bmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9uZWVkc0Vhcmx5UmV0dXJuTGlu
a2luZykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzW2ldLm1f
YmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgIEFTU0VSVCghYmxvY2stPmlzTGlua2VkKTsKKyAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOworICAgICAgICBBU1NF
UlQobm9kZS5vcCA9PSBKdW1wKTsKKyAgICAgICAgQVNTRVJUKG5vZGUudGFrZW5CbG9ja0luZGV4
KCkgPT0gTm9CbG9jayk7CisgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxv
Y2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcgPSBmYWxzZTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIGJsb2NrLT5pc0xpbmtlZCA9IHRydWU7CisjZW5kaWYKKyAgICB9Cisg
ICAgCisgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgYmFzaWMgYmxvY2sgZm9yIHRoZSBjb250
aW51YXRpb24gYXQgdGhlIGNhbGxlci4KKyAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBh
ZG9wdFB0cihuZXcgQmFzaWNCbG9jayhuZXh0T2Zmc2V0LCBtX2dyYXBoLnNpemUoKSwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQor
ICAgIHByaW50ZigiQ3JlYXRpbmcgaW5saW5lIGVwaWxvZ3VlIGJhc2ljIGJsb2NrICVwLCAjJWx1
IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9jay5nZXQoKSwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJy
ZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKG1faW5saW5lU3Rh
Y2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKKyAgICBtX2N1cnJlbnRCbG9jayA9
IGJsb2NrLmdldCgpOworICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNr
VG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0
ZWNvZGVCZWdpbiA8IG5leHRPZmZzZXQpOworICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVy
LT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpKSk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsK
KyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHJldHVybiBhbmQgY29udGludWUgdG8gZ2Vu
ZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwgYnV0CisgICAgLy8gaW4gdGhlIG5ldyBiYXNpYyBi
bG9jay4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJpbnRmKCJEb25lIGlu
bGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVpbmcgY29kZSBnZW5lcmF0aW9uIGluIG5ldyBi
bG9jay5cbiIsIGV4ZWN1dGFibGUpOworI2VuZGlmCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0
QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgc3dpdGNoIChpbnRyaW5zaWMp
IHsKQEAgLTg1Myw3ICsxMTIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVj
ZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sg
aWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3Nl
ZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHku
Ci0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpIHsK
KyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgbV9ncmFwaC5t
X2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewog
ICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVu
dCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVudCAtIG1fY29kZUJsb2NrLT5t
X251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKSk7CkBA
IC04NjksNyArMTEzOCwyMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVt
cCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCkgewot
ICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKKyAg
ICAgICAgICAgIC8vIE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1bXAuIEJ1dCByZWZ1
c2UgdG8gZG8gdGhpcyBpZiB0aGUgYmxvY2sgaXMKKyAgICAgICAgICAgIC8vIGVtcHR5LiBUaGlz
IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBpbmxpbmluZywgd2hpY2ggbWlnaHQgb3RoZXJ3aXNlIGNy
ZWF0ZQorICAgICAgICAgICAgLy8gc29tZSBlbXB0eSBibG9ja3MgaW4gc29tZSBjYXNlcy4gV2hl
biBwYXJzZUJsb2NrKCkgcmV0dXJucyB3aXRoIGFuIGVtcHR5CisgICAgICAgICAgICAvLyBibG9j
aywgaXQgd2lsbCBnZXQgcmVwdXJwb3NlZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4g
Tm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8vIGxvZ2ljIHJlbGllcyBvbiBldmVyeSBieXRl
Y29kZSByZXN1bHRpbmcgaW4gb25lIG9yIG1vcmUgbm9kZXMsIHdoaWNoIHdvdWxkCisgICAgICAg
ICAgICAvLyBiZSB0cnVlIGFueXdheSBleGNlcHQgZm9yIG9wX2xvb3BfaGludCwgd2hpY2ggZW1p
dHMgYSBQaGFudG9tIHRvIGZvcmNlIHRoaXMKKyAgICAgICAgICAgIC8vIHRvIGJlIHRydWUuCisg
ICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPmJlZ2luICE9IG1fZ3JhcGguc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4KSk7
CisgICAgICAgICAgICBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAg
ICAgICAgICAgICAgcHJpbnRmKCJSZWZ1c2luZyB0byBwbGFudCBqdW1wIGF0IGxpbWl0ICV1IGJl
Y2F1c2UgYmxvY2sgJXAgaXMgZW1wdHkuXG4iLCBsaW1pdCwgbV9jdXJyZW50QmxvY2spOworI2Vu
ZGlmCisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gIW1fcGFyc2VGYWlsZWQ7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC04ODgsNyArMTE3MCwxMCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6
IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUaGlzKCk7Ci0gICAgICAgICAgICBz
ZXRUaGlzKGFkZFRvR3JhcGgoQ29udmVydFRoaXMsIG9wMSkpOworICAgICAgICAgICAgaWYgKG1f
Z3JhcGhbb3AxXS5vcCA9PSBDb252ZXJ0VGhpcykKKyAgICAgICAgICAgICAgICBzZXRUaGlzKG9w
MSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc2V0VGhpcyhhZGRUb0dyYXBo
KENvbnZlcnRUaGlzLCBvcDEpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnZlcnRf
dGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTYyMSwxMCArMTkwNiwyOSBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X3JldDoKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVl
ICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHNldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlk
UmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIGlu
bGluaW5nIGNyZWF0ZWQgYmxvY2tzLCBhbmQgd2UncmUgZG9pbmcgYSByZXR1cm4sIHRoZW4gd2Ug
bmVlZCBzb21lCisgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgbGlua2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3Mu
bGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAg
ICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3Qo
KS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX3JldCkgIT0g
bV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSB8fCBt
X2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuKSB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfcmV0KSA8PSBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oTm9CbG9jaykpOworICAgICAgICAg
ICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX25l
ZWRzRWFybHlSZXR1cm5MaW5raW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9kaWRFYXJseVJldHVybiA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICBBU1NFUlQoIW1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoUmV0dXJuLCBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9P
UENPREUob3BfZW5kKTsKIApAQCAtMTY0MCw5ICsxOTQ0LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBjYWxsVGFyZ2V0
ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgZW51
bSB7IENvbnN0YW50RnVuY3Rpb24sIExpbmtlZEZ1bmN0aW9uLCBVbmtub3duRnVuY3Rpb24gfSBj
YWxsVHlwZTsKICAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBjYWxsIGF0IEAlbHUgYmMjJXU6
ICV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3Vy
cmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRpZgorICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNhbGxUYXJnZXQp
KQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxs
TGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYmICFtX3Byb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0lu
Zm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkKICAgICAg
ICAgICAgICAgICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0aW9uOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gVW5rbm93bkZ1bmN0aW9uOwpAQCAtMTY1NSwyNSAr
MTk2MywzOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KICAgICAgICAgICAgICAgICBib29s
IHVzZXNSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0T3BlcmFuZCA9
IDA7IC8vIG1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBuZXh0
T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwogICAgICAg
ICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlv
biArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CiAgICAgICAgICAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uID0gUHJlZGljdE5vbmU7CiAgICAgICAgICAgICAgICAgaWYgKGludGVycHJl
dGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0
X3Jlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHRPcGVyYW5kID0gcHV0SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAgICB1c2VzUmVzdWx0ID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24obV9ncmFw
aC5zaXplKCksIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSk7CisgICAg
ICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgp
LCBuZXh0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dE9mZnNldCArPSBPUENPREVf
TEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb247CiAgICAgICAgICAgICAgICAgREZH
OjpJbnRyaW5zaWMgaW50cmluc2ljOwotICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBD
b25zdGFudEZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBtX2dyYXBo
LnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KS0+ZXhlY3V0
YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb247CisgICAgICAgICAgICAgICAg
aWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
ZXhwZWN0ZWRGdW5jdGlvbiA9IG1fZ3JhcGgudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBleHBl
Y3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAgICAgICAg
ICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0gTGlua2Vk
RnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVu
dEluZGV4KS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50cmlu
c2ljID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhmdW5jdGlvbiksIGNhbGxUYXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxh
c3RTZWVuQ2FsbGVlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpbnRyaW5zaWMgPSBleHBl
Y3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygpOworICAgICAgICAgICAgICAg
ICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5z
aWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFy
ZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50
cmluc2ljKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2VydGFpbkFib3V0RXhwZWN0ZWRG
dW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlv
biwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jlc3Vs
dCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFyZywgcHJlZGljdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJl
IGluc2lkZSBicmFjZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9j
YWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlv
biwgZXhwZWN0ZWRGdW5jdGlvbiwgZmlyc3RBcmcsIGxhc3RBcmcsIG5leHRPZmZzZXQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFzIHRvIGJlIGluc2lkZSBicmFj
ZXMuCiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTE3MzIsNyArMjA1MywxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBhcmUgY29tcGF0aWJsZS4KICAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50SW5kZXggPT0gYmxvY2tCZWdp
bik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5pc09TUlRhcmdl
dCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZXZlciBkbyBPU1IgaW50byBhbiBpbmxpbmVk
IGNvZGUgYmxvY2suIFRoYXQgY291bGQgbm90IGhhcHBlbiwgc2luY2UgT1NSCisgICAgICAgICAg
ICAvLyBsb29rcyB1cCB0aGUgY29kZSBibG9jayB0aGF0IGlzIHRoZSByZXBsYWNlbWVudCBmb3Ig
dGhlIGJhc2VsaW5lIEpJVCBjb2RlCisgICAgICAgICAgICAvLyBibG9jay4gSGVuY2UsIG1hY2hp
bmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBpbmxpbmUgY29kZSBibG9jay4K
KyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXIpCisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50b20gbm9kZSB0byBlbnN1cmUgdGhhdCB0aGVyZSBp
cyBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIHRoaXMgYnl0ZWNvZGUKKyAgICAgICAgICAgIC8vIG9w
LgorICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAgICAgfQpAQCAtMTc4NCw3ICsy
MTEzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBtX2dyYXBoW3Zh
bHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBB
U1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldExvY2FsIHx8IG1fZ3Jh
cGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRl
Y2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gUGhpIHx8IG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBGbHVzaCB8fCAobV9ncmFwaFt2YWx1ZUlu
UHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNrVHlwZSA9PSBBcmd1bWVudFBo
aVN0YWNrKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
ZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCkBAIC0xODI1LDQ2ICsyMTU0LDgzIEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgfQogfQogCi12b2lkIEJ5dGVD
b2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCbG9ja0luZGV4
PiYgcG9zc2libGVUYXJnZXRzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrLCBWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHBvc3NpYmxlVGFyZ2V0cykKIHsK
ICAgICBBU1NFUlQoYmxvY2stPmVuZCAhPSBOb05vZGUpOworICAgIEFTU0VSVCghYmxvY2stPmlz
TGlua2VkKTsKKyAgICBBU1NFUlQoYmxvY2stPmVuZCA+IGJsb2NrLT5iZWdpbik7CiAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgIEFTU0VSVChub2RlLmlzVGVy
bWluYWwoKSk7CiAgICAgCiAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgY2FzZSBKdW1wOgog
ICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUudGFrZW5CeXRlY29kZU9mZnNldER1cmlu
Z1BhcnNpbmcoKSkpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldS5cbiIsIGJsb2NrLCBtX2dyYXBo
Lm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLmdldCgpLCBub2RlLnRha2VuQmxvY2tJ
bmRleCgpKTsKKyNlbmRpZgogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0
RHVyaW5nUGFyc2luZygpKSk7CiAgICAgICAgIG5vZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KG1f
Z3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywgbm9kZS5u
b3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0byAl
cCwgIyV1IGFuZCAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtl
bkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCksIG1fZ3JhcGgubV9i
bG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCksIG5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCkpOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0
OgorI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJNYXJraW5n
IGJhc2ljIGJsb2NrICVwIGFzIGxpbmtlZC5cbiIsIGJsb2NrKTsKKyNlbmRpZgogICAgICAgICBi
cmVhazsKICAgICB9CisgICAgCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGJsb2NrLT5pc0xp
bmtlZCA9IHRydWU7CisjZW5kaWYKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2Nr
cyhWZWN0b3I8QmxvY2tJbmRleD4mIHVubGlua2VkQmxvY2tzKQordm9pZCBCeXRlQ29kZVBhcnNl
cjo6bGlua0Jsb2NrcyhWZWN0b3I8VW5saW5rZWRCbG9jaz4mIHVubGlua2VkQmxvY2tzKQogewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW3VubGlua2VkQmxvY2tzW2ldXS5nZXQo
KSwgdW5saW5rZWRCbG9ja3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRC
bG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ldLm1fbmVl
ZHNOb3JtYWxMaW5raW5nKSB7CisgICAgICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nr
c1t1bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpLCB1bmxpbmtlZEJsb2Nrcyk7
CisgICAgICAgICAgICB1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZh
bHNlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVT
dWNjZXNzb3IoVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiYgd29ya2xpc3QsIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3JJbmRleCkKK3sKKyAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgPSBtX2dyYXBoLm1fYmxvY2tzW3N1Y2Nlc3NvckluZGV4XS5nZXQoKTsKKyAgICBp
ZiAoIXN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUpIHsKKyAgICAgICAgc3VjY2Vzc29yLT5pc1JlYWNo
YWJsZSA9IHRydWU7CisgICAgICAgIHdvcmtsaXN0LmFwcGVuZChzdWNjZXNzb3JJbmRleCk7Cisg
ICAgfQorICAgIAorICAgIHN1Y2Nlc3Nvci0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGJsb2NrSW5k
ZXgpOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vzc29ycygpCit2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewotICAgIGZvciAoQmxv
Y2tJbmRleCBpbmRleCA9IDA7IGluZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0
LmFwcGVuZCgwKTsKKyAgICBtX2dyYXBoLm1fYmxvY2tzWzBdLT5pc1JlYWNoYWJsZSA9IHRydWU7
CisgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgQmxvY2tJbmRleCBp
bmRleCA9IHdvcmtsaXN0Lmxhc3QoKTsKKyAgICAgICAgd29ya2xpc3QucmVtb3ZlTGFzdCgpOwor
ICAgICAgICAKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lu
ZGV4XS5nZXQoKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT5lbmQgIT0gTm9Ob2RlKTsKKyAgICAg
ICAgQVNTRVJUKGJsb2NrLT5pc0xpbmtlZCk7CisgICAgICAgIAogICAgICAgICBOb2RlJiBub2Rl
ID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CiAgICAgICAgIEFTU0VSVChub2RlLmlzVGVybWlu
YWwoKSk7Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAgICAg
ICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3Nv
cnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwg
aW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBlbHNlIGlmIChub2RlLmlz
QnJhbmNoKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2Nr
SW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgICAgICBtX2dy
YXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5h
cHBlbmQoaW5kZXgpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRl
eCwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Io
d29ya2xpc3QsIGluZGV4LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTE4NzcsMzAgKzIyNDMsMzUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YnVp
bGRPcGVyYW5kTWFwc0lmTgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2st
Pm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICBtX2lkZW50aWZpZXJNYXAuYWRk
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmltcGwoKSwgaSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kp
Ci0gICAgICAgIG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKSwgaSk7CisgICAgICAg
IG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKSwgaSArIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKICAgICAKICAgICBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzID0gdHJ1ZTsKIH0K
IAotQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0
ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJs
b2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFs
UmVnaXN0ZXIgY2FsbGVlVlIpCitCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5s
aW5lU3RhY2tFbnRyeShCeXRlQ29kZVBhcnNlciogYnl0ZUNvZGVQYXJzZXIsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVC
bG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxsZWVWUiwgVmlydHVhbFJlZ2lzdGVyIHJldHVy
blZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCkKICAgICA6IG1f
Ynl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxv
Y2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1fY2FsbHNp
dGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9ja0hlYWQpCi0gICAgLCBtX2NhbGxlZShieXRlQ29kZVBh
cnNlci0+bV9pbmxpbmVTdGFja1RvcCkKKyAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFsdWVW
UikKKyAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQorICAgICwgbV9kaWRFYXJseVJldHVybihmYWxz
ZSkKKyAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQogewot
ICAgIGlmIChtX2NhbGxlZSkgeworICAgIGlmIChtX2NhbGxlcikgewogICAgICAgICAvLyBJbmxp
bmUgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayAhPSBieXRlQ29kZVBhcnNlci0+bV9j
b2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgIT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkICE9IE5vQmxv
Y2spOwogICAgICAgICAKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lIGlubGluZUNhbGxGcmFtZTsK
LSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUgPSBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpOwotICAgICAgICBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBtX2NhbGxl
ZS0+bV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgICAgICBpbmxpbmVDYWxs
RnJhbWUuZXhlY3V0YWJsZS5zZXQoKmJ5dGVDb2RlUGFyc2VyLT5tX2dsb2JhbERhdGEsIGJ5dGVD
b2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpOworICAgICAgICBpbmxpbmVDYWxsRnJhbWUuc3RhY2tPZmZzZXQgPSBp
bmxpbmVDYWxsRnJhbWVTdGFydCArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlZVZSID0gY2FsbGVlVlI7CiAgICAgICAgIGlu
bGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4o
KTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLm51bUFyZ3VtZW50c0luY2x1ZGluZ1RoaXMgPSBj
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmlzQ2Fs
bCA9IHRydWU7CiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aW5saW5lQ2Fs
bEZyYW1lcygpLmFwcGVuZChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBtX2lubGluZUNhbGxG
cmFtZSA9ICZieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5s
YXN0KCk7CiAgICAgICAgIApAQCAtMTkxOCwxNSArMjI4OSwyMSBAQCBCeXRlQ29kZVBhcnNlcjo6
SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7
CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICAgICAgcGFpcjxKU1ZhbHVlTWFw
OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5h
ZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgIHBhaXI8SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJv
b2w+IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZSksIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFu
dFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOworICAgICAgICAgICAg
aWYgKHJlc3VsdC5zZWNvbmQpIHsKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9j
b2RlQmxvY2stPmFkZENvbnN0YW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBieXRlQ29kZVBh
cnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0LmZpcnN0LT5zZWNvbmQ7
CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xp
bmtpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9j
ayBjYXNlLgogICAgICAgICBBU1NFUlQoY29kZUJsb2NrID09IGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jayk7CiAgICAgICAgIEFTU0VSVChjYWxsZWVWUiA9PSBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKTsKKyAgICAgICAgQVNTRVJUKHJldHVyblZhbHVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdp
c3Rlcik7CisgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWVTdGFydCA9PSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKTsKICAgICAgICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkID09IE5vQmxv
Y2spOwogCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gMDsKQEAgLTE5MzcsOSArMjMxNCwx
NCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsr
aSkKICAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gaTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsg
KytpKQotICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gaTsKKyAgICAgICAgICAgIG1f
Y29uc3RhbnRSZW1hcFtpXSA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKKworICAg
ICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQogICAg
IAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb25zdGFudFJlbWFwLnNpemUoKTsgKytp
KQorICAgICAgICBBU1NFUlQobV9jb25zdGFudFJlbWFwW2ldID49IEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKKyAgICAKICAgICBieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCA9
IHRoaXM7CiB9CiAKQEAgLTE5NTAsMjEgKzIzMzIsNDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VDb2RlQmxvY2soKQogICAgIGZvciAodW5zaWduZWQganVtcFRhcmdldEluZGV4ID0gMDsg
anVtcFRhcmdldEluZGV4IDw9IGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0cygpOyArK2p1
bXBUYXJnZXRJbmRleCkgewogICAgICAgICAvLyBUaGUgbWF4aW11bSBieXRlY29kZSBvZmZzZXQg
dG8gZ28gaW50byB0aGUgY3VycmVudCBiYXNpY2Jsb2NrIGlzIGVpdGhlciB0aGUgbmV4dCBqdW1w
IHRhcmdldCwgb3IgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgICAgICB1bnNpZ25l
ZCBsaW1pdCA9IGp1bXBUYXJnZXRJbmRleCA8IGNvZGVCbG9jay0+bnVtYmVyT2ZKdW1wVGFyZ2V0
cygpID8gY29kZUJsb2NrLT5qdW1wVGFyZ2V0KGp1bXBUYXJnZXRJbmRleCkgOiBjb2RlQmxvY2st
Pmluc3RydWN0aW9ucygpLnNpemUoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisg
ICAgICAgIHByaW50ZigiUGFyc2luZyBieXRlY29kZSB3aXRoIGxpbWl0ICVwIGJjIyV1IGF0IGlu
bGluZSBkZXB0aCAldS5cbiIsIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSwgbGltaXQs
IENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKG1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4
IDwgbGltaXQpOwogCiAgICAgICAgIC8vIExvb3AgdW50aWwgd2UgcmVhY2ggdGhlIGN1cnJlbnQg
bGltaXQgKGkuZS4gbmV4dCBqdW1wIHRhcmdldCkuCiAgICAgICAgIGRvIHsKLSAgICAgICAgICAg
IE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3Vy
cmVudEluZGV4LCBtX2dyYXBoLnNpemUoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2NrLmdldCgpOwotICAgICAgICAgICAg
bV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5hcHBlbmQobV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCkpOwotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2spIHsKKyAgICAgICAgICAg
ICAgICAvLyBDaGVjayBpZiB3ZSBjYW4gdXNlIHRoZSBsYXN0IGJsb2NrLgorICAgICAgICAgICAg
ICAgIGlmICghbV9ncmFwaC5tX2Jsb2Nrcy5pc0VtcHR5KCkgJiYgbV9ncmFwaC5tX2Jsb2Nrcy5s
YXN0KCktPmJlZ2luID09IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5lbmQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBtdXN0IGJlIGEgYmxvY2sgYmVsb25naW5nIHRvIHVzLgorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9ibG9ja0luZGV4ID09IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSk7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIENoYW5nZSBpdHMgYnl0ZWNvZGUgYmVnaW4gYW5kIGNvbnRp
bnVlLgorICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3MubGFzdCgpLmdldCgpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmKCJSZWFzY3JpYmluZyBieXRlY29kZSBpbmRleCBvZiBibG9jayAl
cCBmcm9tIGJjIyV1IHRvIGJjIyV1IChwZWVwaG9sZSBjYXNlKS5cbiIsIG1fY3VycmVudEJsb2Nr
LCBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiwgbV9jdXJyZW50SW5kZXgpOworI2VuZGlm
CisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9j
dXJyZW50SW5kZXg7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxvY2sobV9j
dXJyZW50SW5kZXgsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMp
KTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgIHBy
aW50ZigiQ3JlYXRpbmcgYmFzaWMgYmxvY2sgJXAsICMlbHUgZm9yICVwIGJjIyV1IGF0IGlubGlu
ZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSwgbV9p
bmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRleCwgQ29kZU9yaWdpbjo6
aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJh
bWUpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGJsb2Nr
LmdldCgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV91
bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkgfHwgbV9ncmFwaC5tX2Jsb2Nrc1ttX2lubGluZVN0YWNr
VG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2lu
IDwgbV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3VubGlua2VkQmxvY2tzLmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJs
b2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiAoIXBhcnNlQmxvY2sobGltaXQpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBnb25lIGJleW9uZCB0aGUg
bGltaXQuCiAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPD0gbGltaXQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBwbGFudGVkIGEgdGVybWlu
YWwsIG9yIHdlIGp1c3QgZ2F2ZSB1cCBiZWNhdXNlCisgICAgICAgICAgICAvLyB3ZSByZWFsaXpl
ZCB0aGF0IHRoZSBqdW1wIHRhcmdldCBpbmZvcm1hdGlvbiBpcyBpbXByZWNpc2UsIG9yIHdlCisg
ICAgICAgICAgICAvLyBhcmUgYXQgdGhlIGVuZCBvZiBhbiBpbmxpbmUgZnVuY3Rpb24uCisgICAg
ICAgICAgICBBU1NFUlQobV9jdXJyZW50QmxvY2stPmJlZ2luID09IG1fZ3JhcGguc2l6ZSgpIHx8
IG1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSB8fCAobV9jdXJyZW50SW5kZXggPT0gY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgJiYgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUpKTsKIAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmVuZCA9IG1fZ3JhcGgu
c2l6ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOwogICAgICAgICB9IHdoaWxl
IChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAgICB9CiAKQEAgLTE5NzksMTIgKzIzODgsMTIg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3Ry
dWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAotICAgIElubGluZVN0
YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJs
b2NrLCBOb0Jsb2NrLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICBJbmxpbmVTdGFja0Vu
dHJ5IGlubGluZVN0YWNrRW50cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywg
Tm9CbG9jaywgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3Rlciwg
SW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKIAog
ICAgIGxpbmtCbG9ja3MoaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2VkQmxvY2tzKTsKLSAgICBz
ZXR1cFByZWRlY2Vzc29ycygpOworICAgIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOwogICAgIHBy
b2Nlc3NQaGlTdGFjazxMb2NhbFBoaVN0YWNrPigpOwogICAgIHByb2Nlc3NQaGlTdGFjazxBcmd1
bWVudFBoaVN0YWNrPigpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKLWJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit0
ZW1wbGF0ZTxib29sICgqY2FuSGFuZGxlT3Bjb2RlKShPcGNvZGVJRCk+Citib29sIGNhbkhhbmRs
ZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyID0gY29kZUJsb2NrLT5nbG9iYWxEYXRhKCktPmludGVycHJldGVyOwogICAgIEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKTsKQEAgLTQzLDcgKzQ0LDcgQEAgYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sq
IGNvZGVCbAogICAgICAgICBzd2l0Y2ggKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVj
dGlvbnNCZWdpbltieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSB7CiAjZGVmaW5lIERFRklORV9P
UChvcGNvZGUsIGxlbmd0aCkgICAgICAgICAgIFwKICAgICAgICAgY2FzZSBvcGNvZGU6ICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCFjYW5Db21waWxlT3Bjb2RlKG9w
Y29kZSkpICBcCisgICAgICAgICAgICBpZiAoIWNhbkhhbmRsZU9wY29kZShvcGNvZGUpKSAgXAog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICBcCiAgICAgICAgICAg
ICBieXRlY29kZU9mZnNldCArPSBsZW5ndGg7ICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTgsNiArNTksMTYgQEAgYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVC
bAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjYW5IYW5kbGVPcGNvZGVzPGNhbkNvbXBpbGVP
cGNvZGU+KGNvZGVCbG9jayk7Cit9CisKK2Jvb2wgY2FuSW5saW5lT3Bjb2RlcyhDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5JbmxpbmVPcGNv
ZGU+KGNvZGVCbG9jayk7Cit9CisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHJl
dmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjAgKzI2LDQyIEBACiAjaWZuZGVmIERGR0NhcGFi
aWxpdGllc19oCiAjZGVmaW5lIERGR0NhcGFiaWxpdGllc19oCiAKKyNpbmNsdWRlICJERkdJbnRy
aW5zaWMuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLSNp
bmNsdWRlICJERkdOb2RlLmgiCi0KIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
I2lmIEVOQUJMRShERkdfSklUKQogLy8gRmFzdCBjaGVjayBmdW5jdGlvbnM7IGlmIHRoZXkgcmV0
dXJuIHRydWUgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvCiAvLyBjaGVjayBvcGNvZGVzLgotaW5s
aW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1p
bmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJuIHRydWU7
IH0KLWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7
IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNvbnN0
cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9CitpbmxpbmUgYm9vbCBtaWdodENvbXBp
bGVFdmFsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmlu
c3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRXZhbE9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9n
cmFtKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3Ry
dWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5j
dGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNh
bGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wg
bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7
CisgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6
Om1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7Cit9CisKK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENv
ZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9u
Q291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKIC8vIE9w
Y29kZSBjaGVja2luZy4KIGlubGluZSBib29sIGNhbkNvbXBpbGVPcGNvZGUoT3Bjb2RlSUQgb3Bj
b2RlSUQpCkBAIC0xNDYsMTQgKzE2OCw0NSBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2Rl
KE9wY29kZUlEIG9wCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVPcGNvZGUoT3Bj
b2RlSUQgb3Bjb2RlSUQpCit7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAKKyAg
ICAvLyBUaGVzZSBvcGNvZGVzIHdvdWxkIGJlIGVhc3kgdG8gc3VwcG9ydCB3aXRoIGlubGluaW5n
LCBidXQgd2UgY3VycmVudGx5IGRvbid0IGRvIGl0LgorICAgIC8vIFRoZSBpc3N1ZSBpcyB0aGF0
IHRoZSBzY29wZSBjaGFpbiB3aWxsIG5vdCBiZSBzZXQgY29ycmVjdGx5LgorICAgIGNhc2Ugb3Bf
Z2V0X3Njb3BlZF92YXI6CisgICAgY2FzZSBvcF9wdXRfc2NvcGVkX3ZhcjoKKyAgICBjYXNlIG9w
X3Jlc29sdmU6CisgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CisgICAgY2FzZSBvcF9yZXNvbHZl
X2dsb2JhbDoKKyAgICAgICAgCisgICAgLy8gVHJpdmlhbCB0byBzdXBwb3J0IHdpdGggdGhlIGNv
cHkgcHJvcGFnYXRpb24gbWFjaGluZSB3ZSBhbHJlYWR5IGhhdmUsIGJ1dCB0aGUgZ2x1ZQorICAg
IC8vIGlzbid0IHRoZXJlLCB5ZXQuCisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgICAgICAK
KyAgICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJlY3RseSByZW1hcCByZWd1bGFyIGV4cHJlc3Np
b24gb3BlcmFuZHMuCisgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBjYW5Db21waWxlT3Bj
b2RlKG9wY29kZUlEKTsKKyAgICB9Cit9CisKIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJs
b2NrKik7Citib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKik7CiAjZWxzZSAvLyBFTkFC
TEUoREZHX0pJVCkKIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZVByb2dyYW0oQ29kZUJsb2Nr
KikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9y
Q2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lu
bGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2Nr
KSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNv
bnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5D
b21waWxlT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2Fu
SW5saW5lT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2Fu
Q29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29s
IGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIAogaW5saW5lIGJvb2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCkBAIC0xNzYsNiArMjI5LDE2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVG
dW5jdGlvbkZvckNvbnN0cnUKICAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25z
dHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitp
bmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
Cit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYg
Y2FuSW5saW5lT3Bjb2Rlcyhjb2RlQmxvY2spOworfQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVG
dW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4g
bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbklubGluZU9w
Y29kZXMoY29kZUJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gREZHQ2FwYWJpbGl0aWVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw0NiBAQCBjb25zdCBjaGFy
KiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NECiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3Rh
dGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKHVuc2lnbmVkIGFtb3VudCkKK3sKKyAgICB3aGlsZSAo
YW1vdW50LS0gPiAwKQorICAgICAgICBwcmludGYoIiAiKTsKK30KKwordm9pZCBHcmFwaDo6ZHVt
cENvZGVPcmlnaW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoIW5vZGVJbmRleCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUlu
ZGV4KTsKKyAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChub2RlSW5kZXggLSAxKTsKKyAgICBp
ZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2Rl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
VmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29k
ZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5s
aW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgdW5z
aWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBj
dXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5j
ZSA9IGNvbW1vblNpemU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7
ICsraSkgeworICAgICAgICBpZiAocHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJh
bWUgIT0gY3VycmVudElubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAg
ICAgaW5kZXhPZkRpdmVyZ2VuY2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgLy8gUHJpbnQgdGhlIHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykg
eworICAgICAgICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYoIjwtLSAl
cFxuIiwgcHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
Z2V0KCkpOworICAgIH0KKyAgICAKKyAgICAvLyBQcmludCB0aGUgcHVzaGVzLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNlOyBpIDwgY3VycmVudElubGluZVN0YWNrLnNp
emUoKTsgKytpKSB7CisgICAgICAgIHByaW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHBy
aW50ZigiLS0+ICVwXG4iLCBjdXJyZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4
IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CkBAIC05MSw2ICsxMzEsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRl
eCBub2RlSW5kZXgsIENvCiAgICAgICAgIEFTU0VSVChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVm
Q291bnQ7CiAgICAgfQorICAgIAorICAgIGR1bXBDb2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAg
cHJpbnRXaGl0ZVNwYWNlKChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7
CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAg
ICAgLy8KQEAgLTI0MCw3ICsyODMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29k
ZUJsb2NrKQogewogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyAr
K2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKLSAg
ICAgICAgcHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5i
eXRlY29kZUJlZ2luLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7
CisgICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxv
Y2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCki
LCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIHBy
aW50ZigiICB2YXJzOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAg
ICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTEx
LDkgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQg
bWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50
aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChDb2RlQmxvY2sqID0gMCk7CiAgICAgdm9pZCBk
dW1wKE5vZGVJbmRleCwgQ29kZUJsb2NrKiA9IDApOworCisgICAgLy8gRHVtcCB0aGUgY29kZSBv
cmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9m
IHRoZQorICAgIC8vIHByZWNlZGluZyBub2RlLgorICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9k
ZUluZGV4KTsKICNlbmRpZgogCi0gICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4p
OworICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxp
bmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKTsKIAogICAgIGJvb2wg
cHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJOdW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbikKICAgICB7CkBAIC0yNDgsMTggKzI1MiwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICB1bnNpZ25lZCBvcGVyYXRvcigpKEJsb2NrSW5kZXgqIGJsb2NrSW5kZXgpIGNv
bnN0CisgICAgdW5zaWduZWQgb3BlcmF0b3IoKShVbmxpbmtlZEJsb2NrKiB1bmxpbmtlZEJsb2Nr
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5k
ZXhdLT5ieXRlY29kZUJlZ2luOworICAgICAgICByZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1t1bmxp
bmtlZEJsb2NrLT5tX2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOwogICAgIH0KIAogcHJpdmF0
ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAKLWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpi
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVu
c2lnbmVkIGJ5dGVjb2RlQmVnaW4pCitpbmxpbmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25l
ZCBieXRlY29kZUJlZ2luKQogewotICAgIHJldHVybiAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVu
Y3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4oYmxvY2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCks
IGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJlUHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2Rl
QmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJldHVybiBXVEY6OmJpbmFyeVNlYXJjaFdpdGhG
dW5jdG9yPFVubGlua2VkQmxvY2ssIHVuc2lnbmVkPihibG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNp
emUoKSwgYnl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlNdXN0QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0
ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSktPm1fYmxvY2tJbmRleDsKIH0KIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEzICszOSwyMCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6
OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25S
ZWNvdmVyeSogcmVjb3ZlcnksIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcCkKK3ZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29u
c3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAg
Ly8gMSkgUHJvLWZvcm1hIHN0dWZmLgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4
aXQgZm9yIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAiLCAoaW50KWV4aXQu
bV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoIiwgKGludClleGl0Lm1fbm9k
ZUluZGV4KTsKKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3Jp
Z2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYmMjJXUiLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIC0+ICVwICIsIGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9CisgICAgZnByaW50Zihz
dGRlcnIsICIpIGF0IEpJVCBvZmZzZXQgMHgleCAgIiwgZGVidWdPZmZzZXQoKSk7CiAgICAgZXhp
dC5kdW1wKHN0ZGVycik7CiAjZW5kaWYKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJ
T05fRkFJTFVSRSkKQEAgLTQ4MiwxOSArNDg5LDU1IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRT
cGVjdWxhdGl2ZVdpdGhPU1IKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIGxvYWRQdHIoYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJl
c3VsdFJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUuCisgICAgLy8g
MTMpIEZpeCBjYWxsIGZyYW1lKHMpLgogICAgIAogICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0
ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBz
dG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CiAgICAgCisg
ICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKKyAgICAgICAgVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxp
bmVDb2RlQmxvY2tGb3JDYWxsZXIpOworICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUlu
ZGV4ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5H
VEgob3BfY2FsbCk7CisgICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9
IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2lu
KCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQobWFwcGluZyk7CisgICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5
dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJbmRleCk7CisgICAgICAgIAorICAgICAgICB2
b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRKSVRDb2RlKCkuc3Rh
cnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKworICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVZSKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgICAgICBsb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KEdQUkluZm86OnJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZUNoYWlu
KSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOworICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICBhZGRQdHIoSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVH
UFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJG
cmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6Q29kZUJsb2NrKSkpOworICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMiwgYWRkcmVz
c0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVn
aXN0ZXJGaWxlOjpTY29wZUNoYWluKSkpOworICAgICAgICBzdG9yZVB0cihjYWxsZXJGcmFtZUdQ
UiwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoVHJ1
c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykpKTsKKyAg
ICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5s
aW5lQ2FsbEZyYW1lLT5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzKSkpLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3RlckZp
bGU6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QxLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlZSkpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGV4aXQubV9j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgYWRkUHRyKEltbTMyKGV4aXQubV9j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIAogICAgIC8vIDE0KSBK
dW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCiAgICAgCi0gICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0
Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6
ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3JpZ2luKTsKKyAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBkZWNvZGVkQ29k
ZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwg
dW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVj
b2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAKICAgICBBU1NFUlQobWFwcGluZyk7Ci0gICAgQVNT
RVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4KTsKICAgICAKLSAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaygpLT5hbHRl
cm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2Rl
T2Zmc2V0KTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2VsaW5lQ29kZUJsb2NrLT5nZXRKSVRDb2Rl
KCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKICAgICAKICAgICBB
U1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwog
ICAgIApAQCAtNTA2LDIwICs1NDksMjggQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0
aXZlV2l0aE9TUgogI2VuZGlmCiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhT
cGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCitWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zm
c2V0PiYgSklUQ29tcGlsZXI6OmRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRDb2RlTWFw
OwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxp
bmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1h
cCgpKTsKLSAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpLT5kZWNv
ZGUoZGVjb2RlZENvZGVNYXApOworICAgIEFTU0VSVChjb2RlQmxvY2sgPT0gY29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFw
KCkpOworICAgIAorICAgIHN0ZDo6cGFpcjxIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQ+ID46Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBtX2RlY29k
ZWRDb2RlTWFwcy5hZGQoY29kZUJsb2NrLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
PigpKTsKKyAgICAKKyAgICBpZiAocmVzdWx0LnNlY29uZCkKKyAgICAgICAgY29kZUJsb2NrLT5q
aXRDb2RlTWFwKCktPmRlY29kZShyZXN1bHQuZmlyc3QtPnNlY29uZCk7CiAgICAgCisgICAgcmV0
dXJuIHJlc3VsdC5maXJzdC0+c2Vjb25kOworfQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NS
RXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQorewogICAgIE9TUkV4aXRWZWN0b3I6
Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKICAg
ICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRz
KCkuZW5kKCk7CiAgICAgCiAgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewogICAg
ICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKLSAgICAgICAgZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQu
bV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICBleGl0U3BlY3VsYXRp
dmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3Jl
Y292ZXJ5SW5kZXgpKTsKICAgICAgICAgKytleGl0c0l0ZXI7CiAgICAgfQogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTgwODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzMCw4ICs0MzAsMjEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVCb2R5
KCk7CiAgICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKIAotICAgIHZvaWQgZXhpdFNwZWN1bGF0
aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAgdm9pZCBleGl0
U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5Kik7
CiAgICAgdm9pZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmKTsKKyAgICAKKyAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4p
CisgICAgeworICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4ZWN1dGFibGU6OnNfaW5mbyk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSA9PSBjb2RlQmxvY2soKS0+
YmFzZWxpbmVWZXJzaW9uKCkpOworICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKIAogICAgIC8vIFRoZSBnbG9iYWxEYXRh
LCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0cnMuCiAgICAgSlNHbG9i
YWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC00NDEsNyArNDU0LDkgQEAgcHJpdmF0ZToKIAogICAg
IC8vIFRoZSBjb2RlQmxvY2sgY3VycmVudGx5IGJlaW5nIGdlbmVyYXRlZCwgdXNlZCB0byBhY2Nl
c3MgaW5mb3JtYXRpb24gc3VjaCBhcyBjb25zdGFudCB2YWx1ZXMsIGltbWVkaWF0ZXMuCiAgICAg
Q29kZUJsb2NrKiBtX2NvZGVCbG9jazsKLQorICAgIAorICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gPiBtX2RlY29kZWRDb2RlTWFwczsKKyAg
ICAKICAgICAvLyBWZWN0b3Igb2YgY2FsbHMgb3V0IGZyb20gSklUIGNvZGUsIGluY2x1ZGluZyBl
eGNlcHRpb24gaGFuZGxlciBpbmZvcm1hdGlvbi4KICAgICAvLyBDb3VudCBvZiB0aGUgbnVtYmVy
IG9mIENhbGxSZWNvcmRzIHdpdGggZXhjZXB0aW9uIGhhbmRsZXJzLgogICAgIFZlY3RvcjxDYWxs
UmVjb3JkPiBtX2NhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIq
IGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBtYWNybyhQaGFu
dG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhpLCAwKSBcCisgICAgbWFjcm8o
Rmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTWFya2VyIGZvciBhcmd1
bWVudHMgYmVpbmcgc2V0LiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXApAQCAtNDg1
LDYgKzQ4Niw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAg
ICAgY2FzZSBQaGk6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIGNhc2UgRmx1
c2g6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTgzNiw3ICs4MzgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAg
ICBib29sIHNob3VsZEdlbmVyYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3JlZkNvdW50
ICYmIG9wICE9IFBoaTsKKyAgICAgICAgcmV0dXJuIG1fcmVmQ291bnQgJiYgb3AgIT0gUGhpICYm
IG9wICE9IEZsdXNoOwogICAgIH0KIAogICAgIHVuc2lnbmVkIHJlZkNvdW50KCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDk4MDgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxOCArNjQsMzEgQEAgcHVibGljOgogICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0
dXJuIG1fbG9jYWxzW2lkeF07IH0KICAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CiAgICAgCisgICAgdm9pZCBlbnN1cmVMb2NhbHMo
c2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoc2l6ZSA8PSBtX2xvY2Fscy5zaXplKCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fs
cy5zaXplKCk7CisgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShzaXplKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBzaXplX3Qgb2xkU2l6
ZSA9IG1fbG9jYWxzLnNpemUoKTsKLSAgICAgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShpZHggKyAx
KTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9sb2NhbHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpOwotICAgICAgICB9CisgICAgICAgIGVuc3VyZUxvY2FscyhpZHggKyAxKTsKICAgICAg
ICAgCiAgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKICAgICB9CiAgICAgCisgICAgVCBn
ZXRMb2NhbChzaXplX3QgaWR4KQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5z
aXplKCkpCisgICAgICAgICAgICByZXR1cm4gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAg
ICAgcmV0dXJuIG1fbG9jYWxzW2lkeF07CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0QXJndW1l
bnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewogICAgICAgICBB
U1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24g
OTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NzgsNiArNTc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBS
ZXR1cm46CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBQaGk6
CisgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNhc2Ug
VGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQ4LDcgKzg0OCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdG8gdGhlICpuZXh0
KiBpbnN0cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQogICAgICAg
ICAvLyBTZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVk
IHdpdGggdGhlIHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2Fs
LgotICAgICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbkZvck9TUiA9PSBu
b2RlLmNvZGVPcmlnaW4pOwogICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IGF0KG1fY29tcGlsZUlu
ZGV4ICsgMSk7CiAgICAgICAgIAogICAgICAgICAvLyBPZGRseSwgaXQncyBwb3NzaWJsZSBmb3Ig
dGhlIGJ5dGVjb2RlIGluZGV4IGZvciB0aGUgbmV4dCBub2RlIHRvIGJlCkBAIC04NjEsNyArODYx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAv
LyBzdGF0ZW1lbnQpIHdvdWxkIGJlIGRlYWQgYW55d2F5IC0gc28gdGhlIGZhY3QgdGhhdCBERkcg
d291bGQgaGF2ZQogICAgICAgICAvLyBhbHJlYWR5IG1hZGUgdGhlIGFzc2lnbm1lbnQsIGFuZCBi
YWtlZCBpdCBpbnRvIHRoZSByZWdpc3RlciBmaWxlIGR1cmluZwogICAgICAgICAvLyBPU1IgZXhp
dCwgd291bGQgbm90IGJlIHZpc2libGUgdG8gdGhlIG9sZCBKSVQgaW4gYW55IHdheS4KLSAgICAg
ICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4OworICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luOwog
ICAgICAgICAKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTE4OTAsNyArMTg5MCw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIENvbnZlcnRUaGlzOiB7CiAg
ICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVl
LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIHRoaXNWYWx1ZSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTE5MTMsMTEgKzE5MTUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2Rl
LmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIHRoaXNWYWx1ZSk7CisgICAgICAgICAgICBHUFJSZWcgdGhpc1Zh
bHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc09iamVjdFBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVx
dWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIz
OTEsNiArMjM5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5ODA4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDksMTMgKzEwOSwxMyBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1
bXAoRklMRSogb3V0KSBjb25zCiBPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAg
IDogbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgp
Ci0gICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAg
LCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCiAgICAgLCBtX3JlY292ZXJ5
SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMu
c2l6ZSgpKQogICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAg
LCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKLSAgICBBU1NFUlQo
bV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7
CisgICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCiAg
ICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwogICAgIGZvciAodW5zaWduZWQgdmFyaWFi
bGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKQEAgLTI2
MCw2ICsyNjAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgog
ewogICAgIEFTU0VSVChtX2NvbXBpbGVPa2F5KTsKICAgICBBU1NFUlQobV9jb21waWxlSW5kZXgg
PT0gYmxvY2suYmVnaW4pOworICAgIAorICAgIGlmICghYmxvY2suaXNSZWFjaGFibGUpIHsKKyAg
ICAgICAgbV9jb21waWxlSW5kZXggPSBibG9jay5lbmQ7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKICAgICBpZiAoYmxvY2suaXNPU1JUYXJnZXQpCiAgICAgICAgIG1faml0Lm5vdGljZU9TUkVu
dHJ5KGJsb2NrKTsKQEAgLTI5MSwxMSArMjk2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKICAgICB9CiAgICAgCiAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgbV9ieXRlY29kZUluZGV4Rm9yT1NS
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOworICAgIG1fY29kZU9yaWdp
bkZvck9TUiA9IENvZGVPcmlnaW4oKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRleCA8IGJs
b2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0gYXQobV9j
b21waWxlSW5kZXgpOwotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gbm9kZS5j
b2RlT3JpZ2luOwogICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERG
R19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3Bl
Y3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXgg
ICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKQEAgLTM2Niw3ICszNzEsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0Fy
Z3VtZW50VHlwZXMoKQogewogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwotICAgIG1fYnl0
ZWNvZGVJbmRleEZvck9TUiA9IDA7CisgICAgbV9jb2RlT3JpZ2luRm9yT1NSID0gQ29kZU9yaWdp
bigwKTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyAr
K2kpCiAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVy
RmlsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0cnVj
dCBPU1JFeGl0IHsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2NoZWNrOwogICAg
IE5vZGVJbmRleCBtX25vZGVJbmRleDsKLSAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVy
eUluZGV4OwogICAgIApAQCAtNTY2LDcgKzU2Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFZh
bHVlU291cmNlLCAwPiBtX2FyZ3VtZW50czsKICAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1f
dmFyaWFibGVzOwogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwotICAgIHVpbnQzMl90IG1fYnl0
ZWNvZGVJbmRleEZvck9TUjsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvck9TUjsKICAg
ICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgCkBAIC04MDEsNyArODAxLDYgQEAg
aW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV9hcmd1bWVu
dHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCiAgICAgLCBtX3ZhcmlhYmxlcyhq
aXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCiAgICAgLCBtX3N0YXRlKG1faml0LmNv
ZGVCbG9jaygpLCBtX2ppdC5ncmFwaCgpKQogewogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDcgQEAgQ2FsbEZyYW1lKiBDYWxsRnJhbWU6OnRydWVDYWxsZXJG
cmFtZVNsbwogICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG1hY2hpbmVDYWxsZXItPmNvZGVC
bG9jaygpLT5jb2RlT3JpZ2luRm9yUmV0dXJuKHJldHVyblBDKCkpOwogICAgIAogICAgIGZvciAo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIG5leHRJ
bmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGluZUNh
bGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZTsKICAgICAg
ICAgCiAgICAgICAgIENhbGxGcmFtZSogaW5saW5lZENhbGxlciA9IG1hY2hpbmVDYWxsZXIgKyBp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEz
IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoSW5zdHJ1Y3QKICAgICAvLyBEb25l
ISAtIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0aC4KICAgICBBU1NFUlQoT1BDT0RFX0xFTkdU
SChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfZXZhbCkpOwogICAgIEFTU0VSVChP
UENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7Cisj
aWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKSB7Cisg
ICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcmFyZUNhc2VQcm9maWxlID0gbV9jb2RlQmxvY2stPnJh
cmVDYXNlUHJvZmlsZShtX2NvZGVCbG9jay0+bnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkgLSAx
KTsKKyAgICAgICAgQVNTRVJUKCh1bnNpZ25lZClyYXJlQ2FzZVByb2ZpbGUtPm1fYnl0ZWNvZGVP
ZmZzZXQgPT0gbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIGFkZDMyKEltbTMyKDEpLCBBYnNv
bHV0ZUFkZHJlc3MoJnJhcmVDYXNlUHJvZmlsZS0+bV9jb3VudGVyKSk7CisgICAgfQorI2VuZGlm
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpKTsK
IAogICAgIC8vIFRoaXMgaGFuZGxlcyBob3N0IGZ1bmN0aW9ucwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMTUsNyArMjAx
NSwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAKICAgICBp
ZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CiAjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNh
bGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3Mv
ZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworICAgICAgICBw
cmludGYoIlJldHVybmluZyBmcm9tIG9sZCBKSVQgY2FsbCBmcmFtZSB3aXRoIG9wdGltaXplZCBy
ZXBsYWNlbWVudCAlcCglcCksIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1IiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSk7CisgICAgICAgIENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxs
RnJhbWUtPmNhbGxlckZyYW1lKCk7CisgICAgICAgIGlmIChjYWxsZXJGcmFtZSkKKyAgICAgICAg
ICAgIHByaW50ZigiLCBjYWxsZXJGcmFtZSA9ICVwLCByZXR1cm5QQyA9ICVwLCBjYWxsZXIgY29k
ZSBibG9jayA9ICVwIiwgY2FsbGVyRnJhbWUsIGNhbGxGcmFtZS0+cmV0dXJuUEMoKS52YWx1ZSgp
LCBjYWxsZXJGcmFtZS0+Y29kZUJsb2NrKCkpOworICAgICAgICBwcmludGYoIlxuIik7CiAjZW5k
aWYKICAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6
ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKQEAgLTIwMjMsNiArMjAyNyw4
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogICAg
ICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
IAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDYgKzM4NCwyNCBAQCB2b2lkIFByb2dyYW1FeGVj
dXRhYmxlOjpjbGVhckNvZGVWaXJ0dWFsCiAgICAgQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCgpOwog
fQogCitDb2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YmFzZWxpbmVDb2RlQmxvY2tGb3Io
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIENvZGVCbG9jayogcmVzdWx0Owor
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9j
a0ZvckNhbGwuZ2V0KCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICByZXN1bHQgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiAwOworICAgIHdo
aWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0
ZXJuYXRpdmUoKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKyAgICBBU1NFUlQocmVzdWx0LT5nZXRK
SVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxs
KEV4ZWNTdGF0ZSogZXhlYywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW5Ob2RlKQogewogICAg
IEFTU0VSVChleGVjLT5nbG9iYWxEYXRhKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7CkBAIC00MDYs
MTEgKzQyNCwxMiBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0CiAg
ICAgcmV0dXJuIGVycm9yOwogfQogCi1QYXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiBleGVjLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUsIENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktp
bmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdCom
IGV4Y2VwdGlvbikKK1Bhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0
YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUs
IENvbXBpbGF0aW9uS2luZCBjb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
c3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKIHsKICAgICBleGNlcHRp
b24gPSAwOwogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IHNjb3BlQ2hhaW5Ob2RlLT5n
bG9iYWxEYXRhOwotICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0
YS0+cGFyc2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCksIDAsIDAsIG1fc291cmNlLCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgp
ID8gSlNQYXJzZVN0cmljdCA6IEpTUGFyc2VOb3JtYWwsICZleGNlcHRpb24pOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0Lmdl
dCgpOworICAgIFJlZlB0cjxGdW5jdGlvbkJvZHlOb2RlPiBib2R5ID0gZ2xvYmFsRGF0YS0+cGFy
c2VyLT5wYXJzZTxGdW5jdGlvbkJvZHlOb2RlPihnbG9iYWxPYmplY3QsIDAsIDAsIG1fc291cmNl
LCBtX3BhcmFtZXRlcnMuZ2V0KCksIGlzU3RyaWN0TW9kZSgpID8gSlNQYXJzZVN0cmljdCA6IEpT
UGFyc2VOb3JtYWwsICZleGNlcHRpb24pOwogICAgIGlmICghYm9keSkgewogICAgICAgICBBU1NF
UlQoZXhjZXB0aW9uKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00MjAsOCArNDM5LDYg
QEAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeAogICAgIGJvZHktPmZp
bmlzaFBhcnNpbmcobV9wYXJhbWV0ZXJzLCBtX25hbWUpOwogICAgIHJlY29yZFBhcnNlKGJvZHkt
PmZlYXR1cmVzKCksIGJvZHktPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGJvZHktPmxpbmVObygp
LCBib2R5LT5sYXN0TGluZSgpKTsKIAotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LmdldCgpOwotCiAgICAgT3duUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiByZXN1bHQ7CiAgICAgQVNTRVJUKChjb21waWxhdGlvbktpbmQgPT0gRmly
c3RDb21waWxhdGlvbikgPT0gIWNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKTsKICAg
ICByZXN1bHQgPSBhZG9wdFB0cihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgRnVuY3Rpb25D
b2RlLCBnbG9iYWxPYmplY3QsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0T2Zm
c2V0KCksIHNwZWNpYWxpemF0aW9uS2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KSk7CkBAIC00NDIs
NyArNDU5LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogI2Vu
ZGlmCiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0g
IW1fY29kZUJsb2NrRm9yQ2FsbCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAgICBPd25Q
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Io
ZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0Nv
bXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7Cisg
ICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBwcm9kdWNlQ29kZUJs
b2NrRm9yKHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ2FsbCA/IE9wdGltaXppbmdD
b21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwog
ICAgIGlmICghbmV3Q29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwogCkBAIC01
MDAsNyArNTE3LDcgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgog
ICAgIAogICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09
ICFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CiAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbjsKLSAg
ICBPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxv
Y2tGb3IoZXhlYywgc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPyBP
cHRpbWl6aW5nQ29tcGlsYXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ29uc3RydWN0
LCBleGNlcHRpb24pOworICAgIE93blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2Nr
ID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNv
bnN0cnVjdCA/IE9wdGltaXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVG
b3JDb25zdHJ1Y3QsIGV4Y2VwdGlvbik7CiAgICAgaWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAg
IHJldHVybiBleGNlcHRpb247CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQYXNzT3duUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwg
Q29tcGlsYXRpb25LaW5kLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CisgICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2Rl
QmxvY2tGb3IoU2NvcGVDaGFpbk5vZGUqLCBDb21waWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKIAogICAgICAgICBKU09iamVjdCogY29t
cGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5v
ZGUpCiAgICAgICAgIHsKQEAgLTU3MCw5ICs1NzAsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2VuZXJhdGVkQnl0ZWNvZGVGb3JDb25zdHJ1Y3QoKTsKICAgICAgICAg
fQogCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgICAgIEpTU3RyaW5nKiBuYW1lVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX25hbWVWYWx1ZS5n
ZXQoKTsgfQotICAgICAgICBzaXplX3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X3BhcmFtZXRlcnMtPnNpemUoKTsgfSAvLyBJbmNsdWRpbmcgJ3RoaXMnIQorICAgICAgICBzaXpl
X3QgcGFyYW1ldGVyQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMtPnNpemUoKTsg
fSAvLyBFeGNsdWRpbmcgJ3RoaXMnIQogICAgICAgICB1bnNpZ25lZCBjYXB0dXJlZFZhcmlhYmxl
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX251bUNhcHR1cmVkVmFyaWFibGVzOyB9CiAgICAgICAg
IFVTdHJpbmcgcGFyYW1TdHJpbmcoKSBjb25zdDsKICAgICAgICAgU2hhcmVkU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zeW1ib2xUYWJsZTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDk4
MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW1pdHM+CiAKIC8vIFNl
dCB0byAxIHRvIGNvbnRyb2wgdGhlIGhldXJpc3RpY3MgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFi
bGVzLgotI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVVUklTVElDUyAwCisjZGVmaW5lIEVOQUJM
RV9SVU5fVElNRV9IRVVSSVNUSUNTIDEKIAogI2lmIEVOQUJMRShSVU5fVElNRV9IRVVSSVNUSUNT
KQogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0zOSw2ICszOSwxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgewogCit1bnNpZ25lZCBtYXhpbXVtRXZhbE9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9w
dGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit1bnNpZ25lZCBtYXhpbXVtRnVu
Y3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2ln
bmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5k
aWRhdGVJbnN0cnVjdGlvbkNvdW50OworCit1bnNpZ25lZCBtYXhpbXVtSW5saW5pbmdEZXB0aDsK
KwogaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOwog
aW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsK
IGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yRG9udE9wdGltaXplQW55dGltZVNvb247
CkBAIC01MCw2ICs1OSw5IEBAIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJl
dHUKIAogdW5zaWduZWQgZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbzsKIAordW5z
aWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7Cit1bnNpZ25lZCBjb3VsZFRha2VT
bG93Q2FzZVRocmVzaG9sZDsKKwogdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNl
OwogdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIApAQCAtOTks
NiArMTExLDE4IEBAIHZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGEKIAog
dm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCiB7CisgICAgLy8gRklYTUU6IE11c3QgcmV2aXNp
dCB0aGVzZSBoZXVyaXN0aWNzISBUaGUgREZHLCBiZWluZyBhbiBvcHRpbWl6aW5nIGNvbXBpbGVy
LCBtYXkKKyAgICAvLyB0YWtlIGEgbG9uZyB0aW1lIGZvciBwYXRob2xvZ2ljYWxseSBodWdlIGNv
ZGUgYmxvY2tzLiBUaGUgYmVzdCB3YXkgdG8gY29wZSB3aXRoCisgICAgLy8gdGhpcyBpcyB0byBy
ZWZ1c2UgdG8gb3B0aW1pemUgdGhlbS4KKyAgICBTRVQobWF4aW11bUV2YWxPcHRpbWl6YXRpb25D
YW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bVByb2dyYW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgICAgICAgICAgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9w
dGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAKKyAgICBTRVQobWF4aW11bUZ1bmN0aW9uRm9y
Q2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDEwMCk7CisgICAgCisgICAgU0VU
KG1heGltdW1JbmxpbmluZ0RlcHRoLCAzKTsKKwogICAgIFNFVChleGVjdXRpb25Db3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgLTEwMDApOwogICAgIFNFVChleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgLTUwMDApOwogICAgIFNFVChl
eGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbiwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOwpAQCAtMTA5LDYgKzEzMyw5IEBAIHZvaWQgaW5p
dGlhbGl6ZUhldXJpc3RpY3MoKQogICAgIFNFVChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9y
UmV0dXJuLCAxNSk7CiAKICAgICBTRVQoZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRp
bywgNik7CisgICAgCisgICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAxMDAp
OworICAgIFNFVChjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZCwgICAgMTApOyAvLyBTaG91bGRu
J3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cgY2Fz
ZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KIAogICAgIFNFVChsYXJnZUZh
aWxDb3VudFRocmVzaG9sZEJhc2UsICAgICAgICAyMCk7CiAgICAgU0VUKGxhcmdlRmFpbENvdW50
VGhyZXNob2xkQmFzZUZvckxvb3AsIDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGV1cmlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hldXJpc3RpY3MuaAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDE1
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK2V4dGVybiB1
bnNpZ25lZCBtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
CitleHRlcm4gdW5zaWduZWQgbWF4aW11bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRp
bWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworZXh0ZXJuIHVuc2lnbmVkIG1heGlt
dW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQ7CisKK2V4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0Rl
cHRoOyAvLyBEZXB0aCBvZiBpbmxpbmUgc3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9IG9u
ZSBsZXZlbCwgZXRjLgorCiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyV2FybVVwOwogZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKQEAgLTQxLDYgKzUwLDkgQEAgZXh0
ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudAogCiBleHRlcm4gdW5zaWduZWQg
ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbzsKIAorZXh0ZXJuIHVuc2lnbmVkIGxp
a2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOworZXh0ZXJuIHVuc2lnbmVkIGNvdWxkVGFrZVNs
b3dDYXNlVGhyZXNob2xkOworCiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hv
bGRCYXNlOwogZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxv
b3A7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFZQdHJIYWNrRXhlY3V0YWJsZTsKICAgICBuYW1lc3BhY2UgREZHIHsKICAgICBj
bGFzcyBKSVRDb2RlR2VuZXJhdG9yOworICAgIGNsYXNzIEpJVENvbXBpbGVyOwogICAgIH0KIAog
ICAgIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3Ry
dWN0b3IoRXhlY1N0YXRlKik7CkBAIC00Niw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
IGNsYXNzIEpTRnVuY3Rpb24gOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvZGVHZW5lcmF0
b3I7CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OkpJVENvbXBpbGVyOwogICAgICAgICBmcmll
bmQgY2xhc3MgSlNHbG9iYWxEYXRhOwogCiAgICAgcHVibGljOgo=
</data>
<flag name="review"
          id="110001"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112041</attachid>
            <date>2011-10-21 16:23:49 -0700</date>
            <delta_ts>2011-10-21 17:34:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlining_patch_10.diff</filename>
            <type>text/plain</type>
            <size>114861</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMxIEBA
CisyMDExLTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seSB3b3JrcworICAgICAgICBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMgZnJvbQor
ICAgICAgICBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4gMiUgb3ZlcmFsbCBzcGVlZC11cCBv
biBhbGwgYmVuY2htYXJrcy4gNyUKKyAgICAgICAgc3BlZWQtdXAgb24gVjgsIDIlIG9uIEtyYWtl
biwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisgICAgICAgIAorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OmJhc2VsaW5lVmVyc2lvbik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2V0SW5zdHJ1Y3Rp
b25Db3VudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNvdWxkVGFrZVNsb3dDYXNlKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VTcGVjaWFsRmFzdENhc2UpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZSk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlQW55U2xvd0Nhc2UpOgorICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhG
b3JDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppbmxpbmVEZXB0aCk6Cisg
ICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpDb2Rl
T3JpZ2luOjppbmxpbmVTdGFjayk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVN0YXRlQXRUYWlsKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOgorICAgICAg
ICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OkJhc2ljQmxvY2s6OmVuc3VyZUxvY2Fscyk6CisgICAgICAgIChKU0M6OkRGRzo6VW5saW5rZWRC
bG9jazo6VW5saW5rZWRCbG9jayk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXREaXJlY3QpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Zmx1c2gpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5Ojp+SW5saW5lU3RhY2tFbnRyeSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OnJlbWFwT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5n
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVTdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSGFuZGxlT3Bjb2Rlcyk6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FuQ29tcGlsZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpE
Rkc6OmNhbklubGluZU9wY29kZXMpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVFdmFsKToKKyAgICAgICAgKEpTQzo6REZH
OjptaWdodENvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBpbGVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodElubGluZUZ1bmN0aW9uRm9y
Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5j
dGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OnByaW50V2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXBDb2RlT3Jp
Z2luKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpkZWNvZGVkQ29kZU1hcEZvcik6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAqIGRmZy9ERkdKSVRD
b21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpkZWJ1Z0NhbGwpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2hvdWxkR2VuZXJhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjplbnN1cmVMb2Nh
bHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6T3BlcmFuZHM6OmdldExvY2FsKToKKyAgICAgICAgKiBkZmcvREZHUHJvcGFnYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRp
Y3Rpb25zKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2hl
Y2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWU6OnRydWVDYWxsZXJGcmFtZVNsb3cpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9K
SVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAg
ICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOjpwcm9kdWNlQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOjpjb21waWxlRm9yQ2FsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2Zp
bGVkQ29kZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpwYXJh
bWV0ZXJDb3VudCk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0aWNzLmNwcDoKKyAgICAgICAg
KEpTQzo6SGV1cmlzdGljczo6aW5pdGlhbGl6ZUhldXJpc3RpY3MpOgorICAgICAgICAqIHJ1bnRp
bWUvSGV1cmlzdGljcy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorCiAyMDEx
LTEwLTIxICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIGZpbmFsaXplciB0byBKU09iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
ODEsNiArMTU4MSwxNSBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
CiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoaGFzQ29kZU9y
aWdpbnMoKSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBleGVjdXRhYmxlcyB0aGF0IHdl
IGhhdmUgaW5saW5lZCBkb24ndCBkaWUuCisgICAgICAgIC8vIEZJWE1FOiBJZiB0aGV5IHdvdWxk
IGhhdmUgb3RoZXJ3aXNlIGRpZWQsIHdlIHNob3VsZCBwcm9iYWJseSB0cmlnZ2VyIHJlY29tcGls
YXRpb24uCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lQ2FsbEZyYW1lcygp
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmlubGluZUNhbGxGcmFt
ZXMoKVtpXS5leGVjdXRhYmxlKTsKKyAgICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShWQUxVRV9Q
Uk9GSUxFUikKICAgICBmb3IgKHVuc2lnbmVkIHByb2ZpbGVJbmRleCA9IDA7IHByb2ZpbGVJbmRl
eCA8IG51bWJlck9mVmFsdWVQcm9maWxlcygpOyArK3Byb2ZpbGVJbmRleCkKICAgICAgICAgdmFs
dWVQcm9maWxlKHByb2ZpbGVJbmRleCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
OTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1MSw2ICsyNTEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IFBhc3NPd25QdHI8Q29kZUJsb2NrPiByZWxlYXNlQWx0ZXJuYXRpdmUoKSB7IHJldHVybiBtX2Fs
dGVybmF0aXZlLnJlbGVhc2UoKTsgfQogICAgICAgICB2b2lkIHNldEFsdGVybmF0aXZlKFBhc3NP
d25QdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkgeyBtX2FsdGVybmF0aXZlID0gYWx0ZXJuYXRp
dmU7IH0KICAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVWZXJzaW9uKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ29kZUJsb2NrKiByZXN1bHQgPSByZXBsYWNlbWVudCgpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8vIFRo
aXMgY2FuIGhhcHBlbiBpZiB3ZSdyZSBpbiB0aGUgcHJvY2VzcyBvZiBjcmVhdGluZyB0aGUgYmFz
ZWxpbmUgdmVyc2lvbi4KKyAgICAgICAgICAgIHdoaWxlIChyZXN1bHQtPmFsdGVybmF0aXZlKCkp
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5hbHRlcm5hdGl2ZSgpOworICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CkBAIC0z
NzYsMTAgKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rp
b24+JiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQogICAgICAgICB2
b2lkIGRpc2NhcmRCeXRlY29kZSgpIHsgbV9pbnN0cnVjdGlvbnMuY2xlYXIoKTsgfQogCi0jaWZu
ZGVmIE5ERUJVRwogICAgICAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbkNvdW50OyB9CiAgICAgICAgIHZvaWQgc2V0SW5zdHJ1Y3Rpb25Db3VudCh1
bnNpZ25lZCBpbnN0cnVjdGlvbkNvdW50KSB7IG1faW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0
aW9uQ291bnQ7IH0KLSNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgdm9pZCBzZXRK
SVRDb2RlKGNvbnN0IEpJVENvZGUmIGNvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlV2l0
aEFyaXR5Q2hlY2spCkBAIC01MzEsMTAgKzU0MSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgICAgIHJldHVybiBXVEY6OmdlbmVyaWNCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBp
bnQsIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PihtX3JhcmVDYXNlUHJvZmlsZXMs
IG1fcmFyZUNhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgc3RhdGljIHVpbnQzMl90IHNsb3dDYXNlVGhyZXNob2xkKCkgeyBy
ZXR1cm4gMTAwOyB9CiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlU2xvd0Nhc2UoaW50IGJ5dGVj
b2RlT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gc2xvd0Nhc2VU
aHJlc2hvbGQoKTsKKyAgICAgICAgICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlciA+PSBIZXVyaXN0aWNzOjpsaWtlbHlU
b1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBjb3VsZFRha2VTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCktPm1fY291bnRlciA+PSBIZXVyaXN0aWNzOjpjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9s
ZDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgUmFyZUNhc2VQcm9maWxlKiBhZGRTcGVj
aWFsRmFzdENhc2VQcm9maWxlKGludCBieXRlY29kZU9mZnNldCkKQEAgLTU1MiwyMSArNTY2LDIx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0
Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2Rl
T2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJuIHNw
ZWNpYWxGYXN0Q2FzZUNvdW50ID49IHNsb3dDYXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICBy
ZXR1cm4gc3BlY2lhbEZhc3RDYXNlQ291bnQgPj0gSGV1cmlzdGljczo6bGlrZWx5VG9UYWtlU2xv
d0Nhc2VUaHJlc2hvbGQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5
VG9UYWtlRGVlcGVzdFNsb3dDYXNlKGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewogICAg
ICAgICAgICAgdW5zaWduZWQgc2xvd0Nhc2VDb3VudCA9IHJhcmVDYXNlUHJvZmlsZUZvckJ5dGVj
b2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwogICAgICAgICAgICAgdW5zaWdu
ZWQgc3BlY2lhbEZhc3RDYXNlQ291bnQgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7Ci0gICAgICAgICAgICByZXR1cm4g
KHNsb3dDYXNlQ291bnQgLSBzcGVjaWFsRmFzdENhc2VDb3VudCkgPj0gc2xvd0Nhc2VUaHJlc2hv
bGQoKTsKKyAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3VudCAtIHNwZWNpYWxGYXN0Q2Fz
ZUNvdW50KSA+PSBIZXVyaXN0aWNzOjpsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VBbnlTbG93Q2FzZShp
bnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNsb3dD
YXNlQ291bnQgPSByYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNl
dCktPm1fY291bnRlcjsKICAgICAgICAgICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50
ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
KS0+bV9jb3VudGVyOwotICAgICAgICAgICAgcmV0dXJuIChzbG93Q2FzZUNvdW50ICsgc3BlY2lh
bEZhc3RDYXNlQ291bnQpID49IHNsb3dDYXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICByZXR1
cm4gKHNsb3dDYXNlQ291bnQgKyBzcGVjaWFsRmFzdENhc2VDb3VudCkgPj0gSGV1cmlzdGljczo6
bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIHZvaWQgcmVzZXRSYXJlQ2FzZVByb2ZpbGVzKCk7CkBAIC05NDUsOSArOTU5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCiAgICAg
ICAgIFZlY3RvcjxJbnN0cnVjdGlvbj4gbV9pbnN0cnVjdGlvbnM7Ci0jaWZuZGVmIE5ERUJVRwog
ICAgICAgICB1bnNpZ25lZCBtX2luc3RydWN0aW9uQ291bnQ7Ci0jZW5kaWYKIAogICAgICAgICBp
bnQgbV90aGlzUmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2FyZ3VtZW50c1JlZ2lzdGVyOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lv
biA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpZm5kZWYgQ29kZU9yaWdpbl9oCiAj
ZGVmaW5lIENvZGVPcmlnaW5faAogCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTU2LDE0ICs1OCwyOCBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAg
fQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIC8vIFRo
ZSBpbmxpbmUgZGVwdGggaXMgdGhlIGRlcHRoIG9mIHRoZSBpbmxpbmUgc3RhY2ssIHNvIDEgPSBu
b3QgaW5saW5lZCwKKyAgICAvLyAyID0gaW5saW5lZCBvbmUgZGVlcCwgZXRjLgorICAgIHVuc2ln
bmVkIGlubGluZURlcHRoKCkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGlubGlu
ZURlcHRoRm9yQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSopOworICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3Q7CisgICAgCisjaWZuZGVmIE5E
RUJVRworICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBp
bnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCisgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGlu
ZVN0YWNrKCkgY29uc3Q7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewot
ICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlOworICAgIFdyaXRlQmFycmllcjxFeGVjdXRh
YmxlQmFzZT4gZXhlY3V0YWJsZTsKICAgICB1bnNpZ25lZCBzdGFja09mZnNldDsKICAgICB1bnNp
Z25lZCBjYWxsZWVWUjsKICAgICBDb2RlT3JpZ2luIGNhbGxlcjsKLSAgICB1bnNpZ25lZCBudW1B
cmd1bWVudHNJbmNsdWRpbmdUaGlzOworICAgIHVuc2lnbmVkIG51bUFyZ3VtZW50c0luY2x1ZGlu
Z1RoaXMgOiAzMTsKKyAgICBib29sIGlzQ2FsbCA6IDE7CiB9OwogCiBzdHJ1Y3QgQ29kZU9yaWdp
bkF0Q2FsbFJldHVybk9mZnNldCB7CkBAIC03MSw2ICs4NywzOCBAQCBzdHJ1Y3QgQ29kZU9yaWdp
bkF0Q2FsbFJldHVybk9mZnNldCB7CiAgICAgdW5zaWduZWQgY2FsbFJldHVybk9mZnNldDsKIH07
CiAKK2lubGluZSB1bnNpZ25lZCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKK3sKKyAgICB1bnNpZ25lZCByZXN1bHQg
PSAxOworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1l
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgcmVzdWx0Kys7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVk
IENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaW5saW5lRGVw
dGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKK30KKyAgICAKK2lubGluZSBib29sIENv
ZGVPcmlnaW46Om9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGJ5dGVjb2RlSW5kZXggPT0gb3RoZXIuYnl0ZWNvZGVJbmRleAorICAgICAgICAm
JiBpbmxpbmVDYWxsRnJhbWUgPT0gb3RoZXIuaW5saW5lQ2FsbEZyYW1lOworfQorICAgIAorI2lm
bmRlZiBOREVCVUcKKy8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBp
cyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCitpbmxpbmUgVmVjdG9yPENvZGVPcmlnaW4+
IENvZGVPcmlnaW46OmlubGluZVN0YWNrKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8Q29kZU9yaWdp
bj4gcmVzdWx0KGlubGluZURlcHRoKCkpOworICAgIHJlc3VsdC5sYXN0KCkgPSAqdGhpczsKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IHJlc3VsdC5zaXplKCkgLSAyOworICAgIGZvciAoSW5saW5lQ2Fs
bEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgcmVzdWx0W2luZGV4LS1dID0g
Y3VycmVudC0+Y2FsbGVyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKwogaW5saW5l
IHVuc2lnbmVkIGdldENhbGxSZXR1cm5PZmZzZXRGb3JDb2RlT3JpZ2luKENvZGVPcmlnaW5BdENh
bGxSZXR1cm5PZmZzZXQqIGRhdGEpCiB7CiAgICAgcmV0dXJuIGRhdGEtPmNhbGxSZXR1cm5PZmZz
ZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDkgKzE0NCw5IEBAIEpTT2JqZWN0KiBCeXRlY29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGUoKQogCiAgICAgbV9zY29wZU5vZGUtPmVtaXRCeXRlY29kZSgqdGhpcyk7CiAKLSNpZm5k
ZWYgTkRFQlVHCiAgICAgbV9jb2RlQmxvY2stPnNldEluc3RydWN0aW9uQ291bnQobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAKKyNpZm5kZWYgTkRFQlVHCiAgICAgaWYgKHNf
ZHVtcHNHZW5lcmF0ZWRDb2RlKQogICAgICAgICBtX2NvZGVCbG9jay0+ZHVtcChtX3Njb3BlQ2hh
aW4tPmdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiA5ODA4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDEwIEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5C
YXNpY0Jsb2NrKEJhc2kKICAgICAKICAgICBBU1NFUlQoIW1fYmxvY2spOwogICAgIAorICAgIEFT
U0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNp
Y0Jsb2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKGJhc2lj
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZh
bHVlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCkpOworICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW47ICsraSkKICAgICAgICAgbV9ub2Rl
c1tpXS5jbGVhcigpOwogICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFk
OwpAQCAtNjI5LDYgKzYzMyw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShOb2RlSW5k
ZXggbm8KICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKKyAgICBj
YXNlIEZsdXNoOgogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQnJlYWtw
b2ludDoKQEAgLTY4Myw2ICs2ODgsNyBAQCBpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJn
ZVN0YXRlQXRUCiAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgY2FzZSBQaGk6CiAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICAvLyBUaGUgYmxvY2sgdHJh
bnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8gdGFpbC4KICAgICAgICAgc291cmNlID0gJmlu
VmFyaWFibGU7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEyICs0NiwyNCBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayB7CiAgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCiAgICAg
ICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKICAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZh
bHNlKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBpc0xpbmtlZChmYWxzZSkKKyNl
bmRpZgorICAgICAgICAsIGlzUmVhY2hhYmxlKGZhbHNlKQogICAgICAgICAsIHZhcmlhYmxlc0F0
SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKICAgICB7CiAgICAgfQorICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHVuc2ln
bmVkIG5ld051bUxvY2FscykKKyAgICB7CisgICAgICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVM
b2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2Fs
cyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051
bUxvY2Fscyk7CisgICAgICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxz
KTsKKyAgICB9CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIHVzZWQgaW50ZXJuYWxseSBmb3IgYmxv
Y2sgbGlua2luZyBhbmQgT1NSIGVudHJ5LiBJdCBpcyBtb3N0bHkgbWVhbmluZ2xlc3MKICAgICAv
LyBmb3Igb3RoZXIgcHVycG9zZXMgZHVlIHRvIGlubGluaW5nLgpAQCAtNjIsNiArNzQsMTAgQEAg
c3RydWN0IEJhc2ljQmxvY2sgewogICAgIGJvb2wgaXNPU1JUYXJnZXQ7CiAgICAgYm9vbCBjZmFI
YXNWaXNpdGVkOwogICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgYm9vbCBpc0xpbmtlZDsKKyNlbmRpZgorICAgIGJvb2wgaXNSZWFjaGFibGU7CiAg
ICAgCiAgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwogICAgIApAQCAtNzIsNiAr
ODgsMjEgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+
IHZhbHVlc0F0VGFpbDsKIH07CiAKK3N0cnVjdCBVbmxpbmtlZEJsb2NrIHsKKyAgICBCbG9ja0lu
ZGV4IG1fYmxvY2tJbmRleDsKKyAgICBib29sIG1fbmVlZHNOb3JtYWxMaW5raW5nOworICAgIGJv
b2wgbV9uZWVkc0Vhcmx5UmV0dXJuTGlua2luZzsKKyAgICAKKyAgICBVbmxpbmtlZEJsb2NrKCkg
eyB9CisgICAgCisgICAgZXhwbGljaXQgVW5saW5rZWRCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5k
ZXgpCisgICAgICAgIDogbV9ibG9ja0luZGV4KGJsb2NrSW5kZXgpCisgICAgICAgICwgbV9uZWVk
c05vcm1hbExpbmtpbmcodHJ1ZSkKKyAgICAgICAgLCBtX25lZWRzRWFybHlSZXR1cm5MaW5raW5n
KGZhbHNlKQorICAgIHsKKyAgICB9Cit9OworICAgIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb2RlQmxvY2soY29k
ZUJsb2NrKQogICAgICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQogICAgICAg
ICAsIG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9jdXJyZW50QmxvY2soMCkKICAgICAgICAg
LCBtX2N1cnJlbnRJbmRleCgwKQogICAgICAgICAsIG1fcGFyc2VGYWlsZWQoZmFsc2UpCiAgICAg
ICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChVSU5UX01BWCkKQEAgLTc3LDE1ICs3OCwxOSBAQCBw
cml2YXRlOgogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBtYXguCiAgICAgYm9vbCBoYW5kbGVN
aW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGlu
dCBmaXJzdEFyZywgaW50IGxhc3RBcmcpOwogICAgIAotICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMg
ZnVuY3Rpb25zLgorICAgIC8vIEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3Vj
Y2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KKyAgICBib29sIGhhbmRs
ZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxUYXJnZXQsIE5vZGVJbmRleCBjYWxs
VGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwgYm9vbCBjZXJ0YWluQWJvdXRFeHBl
Y3RlZEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgdW5z
aWduZWQgbmV4dE9mZnNldCk7CisgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJl
dHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNh
bGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0
T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24pOwogICAgIC8vIFBhcnNlIGEgc2luZ2xlIGJhc2ljIGJsb2NrIG9mIGJ5
dGVjb2RlIGluc3RydWN0aW9ucy4KICAgICBib29sIHBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
OwotICAgIC8vIFNldHVwIHByZWRlY2Vzc29yIGxpbmtzIGluIHRoZSBncmFwaCdzIEJhc2ljQmxv
Y2tzLgotICAgIHZvaWQgc2V0dXBQcmVkZWNlc3NvcnMoKTsKKyAgICAvLyBGaW5kIHJlYWNoYWJs
ZSBjb2RlIGFuZCBzZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgncyBCYXNpY0Js
b2Nrcy4KKyAgICB2b2lkIGRldGVybWluZVJlYWNoYWJpbGl0eSgpOworICAgIC8vIEVucXVldWUg
YSBibG9jayBvbnRvIHRoZSB3b3JrbGlzdCwgaWYgbmVjZXNzYXJ5LgorICAgIHZvaWQgaGFuZGxl
U3VjY2Vzc29yKFZlY3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4LCBC
bG9ja0luZGV4IHN1Y2Nlc3Nvcik7CiAgICAgLy8gTGluayBibG9jayBzdWNjZXNzb3JzLgotICAg
IHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxl
VGFyZ2V0cyk7Ci0gICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxCbG9ja0luZGV4PiYgdW5saW5r
ZWRCbG9ja3MpOworICAgIHZvaWQgbGlua0Jsb2NrKEJhc2ljQmxvY2sqLCBWZWN0b3I8VW5saW5r
ZWRCbG9jaz4mIHBvc3NpYmxlVGFyZ2V0cyk7CisgICAgdm9pZCBsaW5rQmxvY2tzKFZlY3RvcjxV
bmxpbmtlZEJsb2NrPiYgdW5saW5rZWRCbG9ja3MpOwogICAgIC8vIExpbmsgR2V0TG9jYWwgJiBT
ZXRMb2NhbCBub2RlcywgdG8gZW5zdXJlIGxpdmUgdmFsdWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAg
ZW51bSBQaGlTdGFja1R5cGUgewogICAgICAgICBMb2NhbFBoaVN0YWNrLApAQCAtMTA1LDEwICsx
MTAsOCBAQCBwcml2YXRlOgogICAgIH0KICAgICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5k
cy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KLSAgICBOb2RlSW5kZXggZ2V0KGlu
dCBvcGVyYW5kKQorICAgIE5vZGVJbmRleCBnZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQp
OwotICAgICAgICAKICAgICAgICAgLy8gSXMgdGhpcyBhIGNvbnN0YW50PwogICAgICAgICBpZiAo
b3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgewogICAgICAgICAgICAgdW5z
aWduZWQgY29uc3RhbnQgPSBvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBA
IC0xMjMsMTAgKzEyNiwxMiBAQCBwcml2YXRlOgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwu
CiAgICAgICAgIHJldHVybiBnZXRMb2NhbCgodW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAg
IHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCisgICAgTm9kZUluZGV4IGdl
dChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CisgICAgdm9pZCBzZXREaXJl
Y3QoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQg
PSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAg
ICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKICAgICAgICAgICAgIHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlKTsK
QEAgLTEzNiwxOCArMTQxLDM1IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2Nh
bC4KICAgICAgICAgc2V0TG9jYWwoKHVuc2lnbmVkKW9wZXJhbmQsIHZhbHVlKTsKICAgICB9Cisg
ICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCksIHZhbHVl
KTsKKyAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwg
d2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0
TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwotCisg
ICAgICAgIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9w
ID09IEdldExvY2FsKQorICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJ
bmRleF07CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUg
bG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBp
dHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAg
IC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KKyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENo
aWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZs
dXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5k
KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQog
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9k
ZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAgICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAg
ICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5vcCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICBy
ZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBm
b3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJvbSBwcmlvciBibG9ja3MsCkBAIC0xNzksMjEgKzIw
MSwzNCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBo
W25vZGVJbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgewor
ICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAg
ICAgICBpZiAobm9kZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28g
cG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2
ZQorICAgICAgICAgICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0
IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ug
d2UncmUgZG9uZS4KKyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtu
b2RlUHRyLT5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0g
UGhpKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFNldEFyZ3VtZW50KSB7CiAgICAgICAgICAg
ICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBhcmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxv
Y2s7IGxpbmsKICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3Vt
ZW50LgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8
VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBu
b2RlSW5kZXgpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5sb2NhbCgpID09IHN0
YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0TG9jYWwpCisgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwot
ICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQxKCk7CisgICAgICAgICAgICBBU1NFUlQobm9k
ZVB0ci0+b3AgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxk
MSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKQEAgLTIx
NCw2ICsyNDksNTEgQEAgcHJpdmF0ZToKIAogICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5m
byhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQorICAgIAor
ICAgIHZvaWQgZmx1c2goaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBvcGVyYW5kID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4OworICAgICAgICBpbnQgaW5kZXg7CisgICAgICAg
IGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW5kZXggPSBv
cGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoaW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaW5kZXggPSBvcGVyYW5kOworICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChpbmRleCk7CisgICAgICAgICAgICBtX3By
ZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3Jh
cGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IEZsdXNoIHx8IG5vZGUu
b3AgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBhIGxvY2FsIGhhcyBh
bHJlYWR5IGJlZW4gZmx1c2hlZCwgb3IgaWYgaXQncyBhbiBhcmd1bWVudCBpbiB0aGUKKyAgICAg
ICAgICAgICAgICAvLyBmaXJzdCBiYXNpYyBibG9jaywgdGhlbiB0aGVyZSBpcyByZWFsbHkgbm8g
bmVlZCB0byBmbHVzaCBpdC4gSW4gZmFjdAorICAgICAgICAgICAgICAgIC8vIGVtaXR0aW5nIGEg
Rmx1c2ggaW5zdHJ1Y3Rpb24gY291bGQganVzdCBjb25mdXNlIHRoaW5ncywgc2luY2UgdGhlCisg
ICAgICAgICAgICAgICAgLy8gZ2V0QXJndW1lbnQoKSBjb2RlIGFzc3VtZXMgdGhhdCB3ZSBuZXZl
ciBzZWUgYSBGbHVzaCBvZiBhIFNldEFyZ3VtZW50LgorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBP
cEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwor
ICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFj
Y2Vzc0RhdGEpKTsKKyAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZv
KHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgeworICAgICAgICAgICAgbV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlT
dGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRG
aXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBo
aSwgaW5kZXgpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwoaW5kZXgpID0gbm9kZUluZGV4OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAg
ICAgfQorICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50
MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KICAgICBOb2RlSW5kZXggZ2V0VG9JbnQzMihp
bnQgb3BlcmFuZCkKQEAgLTY2Myw4ICs3NDMsNiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQaGlT
dGFja0VudHJ5LCAxNj4gbV9hcmd1bWVudFBoaVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0Vu
dHJ5LCAxNj4gbV9sb2NhbFBoaVN0YWNrOwogICAgIAotICAgIFZlY3RvcjxOb2RlKiwgMTY+IG1f
cmV1c2FibGVOb2RlU3RhY2s7Ci0gICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewog
ICAgICAgICBCeXRlQ29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC02
ODQsNyArNzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gQmxvY2tzIGludHJvZHVjZWQgYnkg
dGhpcyBjb2RlIGJsb2NrLCB3aGljaCBuZWVkIHN1Y2Nlc3NvciBsaW5raW5nLgogICAgICAgICAv
LyBNYXkgaW5jbHVkZSB1cCB0byBvbmUgYmFzaWMgYmxvY2sgdGhhdCBpbmNsdWRlcyB0aGUgY29u
dGludWF0aW9uIGFmdGVyCiAgICAgICAgIC8vIHRoZSBjYWxsc2l0ZSBpbiB0aGUgY2FsbGVyLgot
ICAgICAgICBWZWN0b3I8QmxvY2tJbmRleD4gbV91bmxpbmtlZEJsb2NrczsKKyAgICAgICAgVmVj
dG9yPFVubGlua2VkQmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CiAgICAgICAgIAogICAgICAgICAv
LyBJZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQgaW50byB0d28sIHRoZW4g
dGhpcyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBjYWxsc2l0ZSBibG9jay4g
SXQgbmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQpAQCAtNjkyLDIyICs3NzAsNDAg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxvY2tzIHRv
IGp1bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCiAgICAgICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0
ZUJsb2NrSGVhZDsKICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVl
OworICAgICAgICAvLyBEb2VzIHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8g
VGhpcyBpcyB0eXBpY2FsbHkgdHJ1ZQorICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3Ig
dGhlIG1hY2hpbmUgY29kZSBibG9jaydzIGlubGluZSBzdGFjayBlbnRyeQorICAgICAgICAvLyAo
c2luY2UgdGhhdCBvbmUgaXMgbm90IGlubGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5s
aW5lIGNhbGxlZQorICAgICAgICAvLyBkaWQgdGhlIGxpbmtpbmcgZm9yIHVzLgorICAgICAgICBi
b29sIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmc7CiAgICAgICAgIAotICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlVlIpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1cm5WYWx1ZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8gaGFu
ZGxlIHRoZSAodW5jb21tb24gYnV0IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8gY2FzZSB3aGVyZSBh
IHByb2NlZHVyZSB0aGF0IGRvZXMgbm90IHJldHVybiB3YXMgaW5saW5lZC4KKyAgICAgICAgYm9v
bCBtX2RpZFJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIERpZCB3ZSBoYXZlIGFueSBlYXJs
eSByZXR1cm5zPworICAgICAgICBib29sIG1fZGlkRWFybHlSZXR1cm47CisgICAgICAgIAorICAg
ICAgICBJbmxpbmVTdGFja0VudHJ5KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAgICAgIElubGlu
ZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBj
YWxsZWVWUiwgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBp
bmxpbmVDYWxsRnJhbWVTdGFydCk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRy
eSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3Rh
Y2tUb3AgPSBtX2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5l
U3RhY2tUb3AgPSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJl
bWFwT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3Bl
cmFuZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFt
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXhdICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisgICAgICAgICAgICBp
ZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgeworICAgICAgICAgICAg
ICAgIGludCByZXN1bHQgPSBtX2NvbnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID49IEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZCArIG1f
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQpAQCAtNzU2LDYgKzg1Miwx
NzkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1
c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgs
IGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpT
RnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVu
c2lnbmVkIG5leHRPZmZzZXQpCit7CisgICAgLy8gRmlyc3QsIHRoZSByZWFsbHkgc2ltcGxlIGNo
ZWNrczogZG8gd2UgaGF2ZSBhbiBhY3R1YWwgSlMgZnVuY3Rpb24/CisgICAgaWYgKCFleHBlY3Rl
ZEZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGV4cGVjdGVkRnVuY3Rp
b24tPmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9uLT5qc0V4ZWN1
dGFibGUoKTsKKyAgICAKKyAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3Jl
IHBhc3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGNvdWxkCisgICAgLy8g
aW5saW5lIGFyaXR5IGNoZWNrIGZhaWx1cmVzLCBidXQgZm9yIHNpbXBsaWNpdHkgd2UgY3VycmVu
dGx5IGRvbid0LgorICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFtZXRl
ckNvdW50KCkpICsgMSAhPSBsYXN0QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3RhY2sgZGVwdGgs
IG9yIGFyZSB3ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/CisgICAgLy8gSWYg
ZWl0aGVyIG9mIHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUuCisgICAgdW5z
aWduZWQgZGVwdGggPSAwOworICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lu
bGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKKyAgICAgICAg
KytkZXB0aDsKKyAgICAgICAgaWYgKGRlcHRoID49IEhldXJpc3RpY3M6Om1heGltdW1Jbmxpbmlu
Z0RlcHRoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KKyAg
ICAgICAgCisgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICB9Cisg
ICAgCisgICAgLy8gRG9lcyB0aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3Rp
Y3MvcmVxdWlyZW1lbnRzIGZvciBiZWluZworICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/Cisg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxv
Y2tGb3IoQ29kZUZvckNhbGwpOworICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwo
cHJvZmlsZWRCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBJZiB3
ZSBnZXQgaGVyZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5saW5l
IHRoaXMgY29kZS4gUHJvY2VlZAorICAgIC8vIHdpdGggcGFyc2luZyB0aGUgY29kZSB0byBnZXQg
Ynl0ZWNvZGUsIHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhlIGJ5dGVjb2RlLgorICAgIC8v
IE5vdGUgdGhhdCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBpcyBpbnRlbmRlZCB0byBkaWUg
YWZ0ZXIgaGFuZGxlSW5saW5pbmcoKQorICAgIC8vIHJldHVybnMuCisgICAgSlNPYmplY3QqIGV4
Y2VwdGlvbjsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5w
cm9kdWNlQ29kZUJsb2NrRm9yKGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCksIE9wdGltaXppbmdD
b21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2sp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgCisg
ICAgLy8gTm93IHRoYXQgd2UgaGF2ZSB0aGUgYnl0ZWNvZGUsIGNoZWNrIGlmIHdlIHJlYWxseSBj
YW4gaW5saW5lIGl0LiBUaGlzIG1heSBmYWlsCisgICAgLy8gaWYgdGhlIGNvZGUgYmxvY2sgY29u
dGFpbnMgc29tZSBuYXN0eSBvcGNvZGVzLgorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3JD
YWxsKGNvZGVCbG9jay5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBwcmludGYoIklubGluaW5nIGV4ZWN1dGFibGUgJXAu
XG4iLCBleGVjdXRhYmxlKTsKKyNlbmRpZgorICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhv
dXQgYSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5pbmcuIFNvIGJlZ2luIHRo
ZSBwcm9jZXNzCisgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBh
bmQgbWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZWUKKyAgICAvLyBhcmUg
Zmx1c2hlZC4KKyAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxs
VGFyZ2V0Tm9kZUluZGV4KTsKKyAgICAKKyAgICBmbHVzaChjYWxsVGFyZ2V0KTsKKyAgICBmb3Ig
KGludCBhcmcgPSBmaXJzdEFyZyArIDE7IGFyZyA8PSBsYXN0QXJnOyArK2FyZykKKyAgICAgICAg
Zmx1c2goYXJnKTsKKyAgICAKKyAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQobGFzdEFyZykgKyAxOworICAgIAorICAgIC8vIE1ha2Ug
c3VyZSB0aGF0IHRoZSBhcmVhIHVzZWQgYnkgdGhlIGNhbGwgZnJhbWUgaXMgcmVzZXJ2ZWQuCisg
ICAgZm9yIChpbnQgYXJnID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtVmFyczsgYXJnLS0gPiBpbmxpbmVD
YWxsRnJhbWVTdGFydCArIDE7KQorICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChhcmcpKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhh
dCB3ZSBoYXZlIGVub3VnaCBsb2NhbHMuCisgICAgdW5zaWduZWQgbmV3TnVtTG9jYWxzID0gaW5s
aW5lQ2FsbEZyYW1lU3RhcnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBj
b2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmIChuZXdOdW1Mb2NhbHMgPiBt
X251bUxvY2FscykgeworICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2FsczsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CisgICAgfQorCisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMs
IGNvZGVCbG9jay5nZXQoKSwgcHJvZmlsZWRCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkg
LSAxLCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxs
VGFyZ2V0KSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQo
dXNlc1Jlc3VsdCA/IHJlc3VsdE9wZXJhbmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwgKFZp
cnR1YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCk7CisgICAgCisgICAgLy8gVGhpcyBp
cyB3aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgorICAgIHVuc2lnbmVk
IG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgbV9jdXJyZW50SW5kZXggPSAwOworICAg
IHBhcnNlQ29kZUJsb2NrKCk7CisgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKKyAgICAK
KyAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tz
LCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5t
X2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkgeworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3Mu
aXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2Nr
SGVhZE5lZWRzTGlua2luZykKKyAgICAgICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tz
W2lubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0uZ2V0KCksIGlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VS
VChtX2dyYXBoLm1fYmxvY2tzW2lubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0t
PmlzTGlua2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUg
Y2FsbHNpdGUgYmxvY2sgaGVhZCBpcyBub3cgb3duZWQgYnkgdGhlIGNhbGxlci4KKyAgICAgICAg
aWYgKCFpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBpbmxpbmVTdGFja0VudHJ5Lm1fY2Fs
bHNpdGVCbG9ja0hlYWQpOworICAgICAgICAgICAgQVNTRVJUKGlubGluZVN0YWNrRW50cnkubV9j
YWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nKTsKKyAg
ICAgICAgICAgIGlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MubGFz
dCgpLm1fbmVlZHNOb3JtYWxMaW5raW5nID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV9jYWxsc2l0ZUJsb2Nr
SGVhZE5lZWRzTGlua2luZyk7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lU3RhY2tFbnRyeS5t
X2NhbGxlci0+bV9jYWxsc2l0ZUJsb2NrSGVhZCA9PSBpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNp
dGVCbG9ja0hlYWQpOworICAgICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV9j
YWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBsaW5rQmxvY2tzKGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7
CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRC
bG9ja3MuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSByZXR1cm4sIGJ1
dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBhcnNpbmcgb2YK
KyAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2ljIGJsb2NrIHdl
J3JlIGluIHJpZ2h0IG5vdy4KKyAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9kaWRFYXJseVJl
dHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOworICAgICAgICBB
U1NFUlQobGFzdEJsb2NrLT5iZWdpbiA9PSBsYXN0QmxvY2stPmVuZCB8fCAhbV9ncmFwaC5sYXN0
KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIGNyZWF0ZWQgbmV3
IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBpbiB0aGUKKyAg
ICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRvLCBidXQgaXQg
bmVlZHMgb3V0Z29pbmcgbGlua3MuCisgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3Vu
bGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gR2l2ZSBpdCBhIHZhbHVl
IHRoYXQgd29uJ3QgcGVydHVyYiBiaW5hcnkgc2VhcmNoLCBhbmQgd29uJ3QgYmUgZm91bmQuIFRo
aXMgd291bGQKKyAgICAgICAgICAgIC8vIGZhaWwgaWYgb3BfY2FsbCBjb3VsZCBhcHBlYXIgYXQg
dGhlIGhlYWQgb2YgYSBiYXNpYyBibG9jay4gVGhhdCBzaG91bGRuJ3QgaGFwcGVuLAorICAgICAg
ICAgICAgLy8gZ2l2ZW4gdGhlIHdheSB0aGUgYnl0ZWNvZGUgZ2VuZXJhdG9yIHdvcmtzLgorI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50ZigiUmVhc2NyaWJp
bmcgYnl0ZWNvZGUgaW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMldSAoaW5saW5l
IHJldHVybiBjYXNlKS5cbiIsIGxhc3RCbG9jaywgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luLCBt
X2N1cnJlbnRJbmRleCk7CisjZW5kaWYKKyAgICAgICAgICAgIGxhc3RCbG9jay0+Ynl0ZWNvZGVC
ZWdpbiA9IG1fY3VycmVudEluZGV4OworICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tU
b3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSB8fCBtX2dyYXBoLm1fYmxv
Y2tzW21faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5t
X2Jsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luIDwgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luKTsK
KyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX3VubGlua2VkQmxvY2tz
LmFwcGVuZChVbmxpbmtlZEJsb2NrKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3MubGFzdCgpLmdldCgpOworCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAg
ICBwcmludGYoIkRvbmUgaW5saW5pbmcgZXhlY3V0YWJsZSAlcCwgY29udGludWluZyBjb2RlIGdl
bmVyYXRpb24gYXQgZXBpbG9ndWUuXG4iLCBleGVjdXRhYmxlKTsKKyNlbmRpZgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZ2V0IHRvIHRoaXMgcG9pbnQg
dGhlbiBhbGwgYmxvY2tzIG11c3QgZW5kIGluIHNvbWUgc29ydCBvZiB0ZXJtaW5hbHMuCisgICAg
QVNTRVJUKG1fZ3JhcGgubGFzdCgpLmlzVGVybWluYWwoKSk7CisgICAgCisgICAgLy8gTGluayB0
aGUgZWFybHkgcmV0dXJucyB0byB0aGUgYmFzaWMgYmxvY2sgd2UncmUgYWJvdXQgdG8gY3JlYXRl
LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5saW5lU3RhY2tFbnRyeS5tX3VubGlua2Vk
QmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5saW5lU3RhY2tFbnRyeS5tX3Vu
bGlua2VkQmxvY2tzW2ldLm1fbmVlZHNFYXJseVJldHVybkxpbmtpbmcpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2lu
bGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX2Jsb2NrSW5kZXhdLmdldCgpOwor
ICAgICAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW2Jsb2NrLT5lbmQgLSAxXTsKKyAgICAgICAgQVNTRVJUKG5vZGUub3AgPT0gSnVtcCk7
CisgICAgICAgIEFTU0VSVChub2RlLnRha2VuQmxvY2tJbmRleCgpID09IE5vQmxvY2spOworICAg
ICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7Cisg
ICAgICAgIGlubGluZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlS
ZXR1cm5MaW5raW5nID0gZmFsc2U7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBibG9j
ay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlmCisgICAgfQorICAgIAorICAgIC8vIE5lZWQgdG8g
Y3JlYXRlIGEgbmV3IGJhc2ljIGJsb2NrIGZvciB0aGUgY29udGludWF0aW9uIGF0IHRoZSBjYWxs
ZXIuCisgICAgT3duUHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gYWRvcHRQdHIobmV3IEJhc2ljQmxv
Y2sobmV4dE9mZnNldCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2Fs
cykpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICBwcmludGYoIkNyZWF0aW5n
IGlubGluZSBlcGlsb2d1ZSBiYXNpYyBibG9jayAlcCwgIyVsdSBmb3IgJXAgYmMjJXUgYXQgaW5s
aW5lIGRlcHRoICV1LlxuIiwgYmxvY2suZ2V0KCksIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpLCBt
X2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIG1fY3VycmVudEluZGV4LCBDb2RlT3JpZ2lu
OjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxG
cmFtZSkpOworI2VuZGlmCisgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKKyAgICBB
U1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleF0tPmJ5dGVjb2RlQmVnaW4gPCBuZXh0T2Zm
c2V0KTsKKyAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5h
cHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOworICAgIG1fZ3Jh
cGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgCisgICAgLy8gQXQgdGhp
cyBwb2ludCB3ZSByZXR1cm4gYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIHRoZSBj
YWxsZXIsIGJ1dAorICAgIC8vIGluIHRoZSBuZXcgYmFzaWMgYmxvY2suCisjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQorICAgIHByaW50ZigiRG9uZSBpbmxpbmluZyBleGVjdXRhYmxlICVw
LCBjb250aW51aW5nIGNvZGUgZ2VuZXJhdGlvbiBpbiBuZXcgYmxvY2suXG4iLCBleGVjdXRhYmxl
KTsKKyNlbmRpZgorICAgIHJldHVybiB0cnVlOworfQorCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmlu
c2ljIGludHJpbnNpYywgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uKQogewogICAgIHN3aXRjaCAoaW50cmluc2ljKSB7CkBAIC04NTMsNyArMTEyMiw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAvLyBJZiB3
ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1l
bnRzLiBUaGlzIGFsbG93cwogICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3Vt
ZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3Nl
ZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgotICAgIGlmIChtX2N1cnJlbnRC
bG9jayA9PSBtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSB7CisgICAgaWYgKG1fY3VycmVudEJs
b2NrID09IG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1f
bnVtQXJndW1lbnRzKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVJbmRl
eCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJs
ZUFjY2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOwpAQCAtODY5LDcgKzExMzgsMjAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25zLgogICAg
ICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQpIHsKLSAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4KSk7CisgICAgICAgICAgICAvLyBPcmRpbmFy
aWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNlIHRvIGRvIHRoaXMgaWYgdGhl
IGJsb2NrIGlzCisgICAgICAgICAgICAvLyBlbXB0eS4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBm
b3IgaW5saW5pbmcsIHdoaWNoIG1pZ2h0IG90aGVyd2lzZSBjcmVhdGUKKyAgICAgICAgICAgIC8v
IHNvbWUgZW1wdHkgYmxvY2tzIGluIHNvbWUgY2FzZXMuIFdoZW4gcGFyc2VCbG9jaygpIHJldHVy
bnMgd2l0aCBhbiBlbXB0eQorICAgICAgICAgICAgLy8gYmxvY2ssIGl0IHdpbGwgZ2V0IHJlcHVy
cG9zZWQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIG5ldyBvbmUuIE5vdGUgdGhhdCB0aGlzCisgICAg
ICAgICAgICAvLyBsb2dpYyByZWxpZXMgb24gZXZlcnkgYnl0ZWNvZGUgcmVzdWx0aW5nIGluIG9u
ZSBvciBtb3JlIG5vZGVzLCB3aGljaCB3b3VsZAorICAgICAgICAgICAgLy8gYmUgdHJ1ZSBhbnl3
YXkgZXhjZXB0IGZvciBvcF9sb29wX2hpbnQsIHdoaWNoIGVtaXRzIGEgUGhhbnRvbSB0byBmb3Jj
ZSB0aGlzCisgICAgICAgICAgICAvLyB0byBiZSB0cnVlLgorICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudEJsb2NrLT5iZWdpbiAhPSBtX2dyYXBoLnNpemUoKSkKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCkpOworICAgICAgICAgICAgZWxzZSB7
CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgICAgIHByaW50Zigi
UmVmdXNpbmcgdG8gcGxhbnQganVtcCBhdCBsaW1pdCAldSBiZWNhdXNlIGJsb2NrICVwIGlzIGVt
cHR5LlxuIiwgbGltaXQsIG1fY3VycmVudEJsb2NrKTsKKyNlbmRpZgorICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuICFtX3BhcnNlRmFpbGVkOwogICAgICAgICB9CiAgICAgICAgIApA
QCAtODg4LDcgKzExNzAsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7CiAgICAgICAgICAgICBOb2Rl
SW5kZXggb3AxID0gZ2V0VGhpcygpOwotICAgICAgICAgICAgc2V0VGhpcyhhZGRUb0dyYXBoKENv
bnZlcnRUaGlzLCBvcDEpKTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoW29wMV0ub3AgPT0gQ29u
dmVydFRoaXMpCisgICAgICAgICAgICAgICAgc2V0VGhpcyhvcDEpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHNldFRoaXMoYWRkVG9HcmFwaChDb252ZXJ0VGhpcywgb3AxKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb252ZXJ0X3RoaXMpOwogICAgICAgICB9CiAK
QEAgLTE2MjEsMTAgKzE5MDYsMjkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9yZXQ6CisgICAgICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSAhPSBJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQorICAgICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+
bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKKyAg
ICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2RpZFJldHVybiA9IHRydWU7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBpbmxpbmluZyBjcmVhdGVkIGJsb2Nr
cywgYW5kIHdlJ3JlIGRvaW5nIGEgcmV0dXJuLCB0aGVuIHdlIG5lZWQgc29tZQorICAgICAgICAg
ICAgICAgICAgICAvLyBzcGVjaWFsIGxpbmtpbmcuCisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmxhc3QoKS5tX2Jsb2NrSW5kZXgg
PT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtp
bmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9yZXQpICE9IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9k
aWRFYXJseVJldHVybikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX3JldCkgPD0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSnVtcCwgT3BJbmZvKE5vQmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVT
dGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc0Vhcmx5UmV0dXJuTGlua2lu
ZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZGlkRWFy
bHlSZXR1cm4gPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9yZXQpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYWRkVG9HcmFwaChS
ZXR1cm4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAg
ICBMQVNUX09QQ09ERShvcF9yZXQpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZW5k
OgorICAgICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2VuZCk7CiAKQEAg
LTE2NDAsOSArMTk0NCwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGVudW0geyBDb25zdGFudEZ1bmN0aW9u
LCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7CiAgICAgICAgICAg
ICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICBwcmludGYoIlNs
b3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAldS5cbiIsIG1fZ3JhcGguc2l6
ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5y
YXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRl
cik7CisjZW5kaWYKKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNGdW5j
dGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgICAgICAgICBj
YWxsVHlwZSA9IENvbnN0YW50RnVuY3Rpb247Ci0gICAgICAgICAgICBlbHNlIGlmICghIW1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudElu
ZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkpCisgICAgICAgICAgICBlbHNlIGlmICghIW1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5s
YXN0U2VlbkNhbGxlZSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3Vs
ZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpCiAgICAgICAgICAgICAgICAgY2FsbFR5cGUg
PSBMaW5rZWRGdW5jdGlvbjsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjYWxs
VHlwZSA9IFVua25vd25GdW5jdGlvbjsKQEAgLTE2NTUsMjUgKzE5NjMsMzggQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8vIERvIHdl
IGhhdmUgYSByZXN1bHQ/CiAgICAgICAgICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgaW50IHJlc3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVy
IGhhcHB5CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudElu
ZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKICAgICAgICAgICAgICAgICBJbnN0cnVjdGlv
biogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9w
X2NhbGwpOwogICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRp
Y3ROb25lOwogICAgICAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgICAgICAgICAgdXNlc1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJ
bmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkpOworICAgICAgICAgICAgICAgICAgICBwcmVk
aWN0aW9uID0gZ2V0UHJlZGljdGlvbihtX2dyYXBoLnNpemUoKSwgbmV4dE9mZnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIG5leHRPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1dF9y
ZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBl
eHBlY3RlZEZ1bmN0aW9uOwogICAgICAgICAgICAgICAgIERGRzo6SW50cmluc2ljIGludHJpbnNp
YzsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgaW50cmluc2ljID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25z
dGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCktPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBjZXJ0YWluQWJv
dXRFeHBlY3RlZEZ1bmN0aW9uOworICAgICAgICAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25z
dGFudEZ1bmN0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBt
X2dyYXBoLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KTsK
KyAgICAgICAgICAgICAgICAgICAgaW50cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0
YWJsZSgpLT5pbnRyaW5zaWMoKTsKKyAgICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhw
ZWN0ZWRGdW5jdGlvbiA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IExpbmtlZEZ1bmN0aW9uKTsKLSAgICAgICAg
ICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxs
ZWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGZ1bmN0aW9uLT5leGVj
dXRhYmxlKCktPmludHJpbnNpYygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW50cmluc2lj
ICE9IE5vSW50cmluc2ljKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a0Z1bmN0aW9uLCBPcEluZm8oZnVuY3Rpb24pLCBjYWxsVGFyZ2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgaW50cmluc2ljID0gZXhwZWN0ZWRGdW5jdGlvbi0+ZXhlY3V0
YWJsZSgpLT5pbnRyaW5zaWMoKTsKKyAgICAgICAgICAgICAgICAgICAgY2VydGFpbkFib3V0RXhw
ZWN0ZWRGdW5jdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3Vs
dE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcsIHByZWRpY3Rpb24pKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNpYykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1
bmN0aW9uKSwgY2FsbFRhcmdldCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGlu
dHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcsIHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgorICAg
ICAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNS
ZXN1bHQsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3Vs
dE9wZXJhbmQsIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24s
IGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zmc2V0KSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgogICAgICAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNzMyLDcg
KzIwNTMsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgLy8gYXJlIGNvbXBhdGlibGUuCiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGJs
b2NrQmVnaW4sIG1fY3VycmVudEluZGV4ID09IGJsb2NrQmVnaW4pOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+aXNPU1JUYXJnZXQgPSB0cnVlOworICAgICAgICAg
ICAgLy8gV2UgbmV2ZXIgZG8gT1NSIGludG8gYW4gaW5saW5lZCBjb2RlIGJsb2NrLiBUaGF0IGNv
dWxkIG5vdCBoYXBwZW4sIHNpbmNlIE9TUgorICAgICAgICAgICAgLy8gbG9va3MgdXAgdGhlIGNv
ZGUgYmxvY2sgdGhhdCBpcyB0aGUgcmVwbGFjZW1lbnQgZm9yIHRoZSBiYXNlbGluZSBKSVQgY29k
ZQorICAgICAgICAgICAgLy8gYmxvY2suIEhlbmNlLCBtYWNoaW5lIGNvZGUgYmxvY2sgPSB0cnVl
IGNvZGUgYmxvY2sgPSBub3QgaW5saW5lIGNvZGUgYmxvY2suCisgICAgICAgICAgICBpZiAoIW1f
aW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyKQorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5pc09TUlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEVtaXQg
YSBwaGFudG9tIG5vZGUgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBwbGFjZWhvbGRlciBub2Rl
IGZvciB0aGlzIGJ5dGVjb2RlCisgICAgICAgICAgICAvLyBvcC4KKyAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2xvb3BfaGludCk7CiAgICAgICAgIH0KQEAgLTE3ODQsNyArMjExMyw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLmNo
aWxkMSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gUGhpIHx8IChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0QXJn
dW1lbnQgJiYgc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spKTsKKyAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gU2V0TG9jYWwgfHwgbV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFBoaSB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gRmx1c2ggfHwgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBT
ZXRBcmd1bWVudCAmJiBzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGFGb3JQcmVkZWNlc3NvciA9
IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAg
ICAgICAgIApAQCAtMTgyNSw0NiArMjE1NCw4MyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9j
ZXNzUGhpU3RhY2soKQogICAgIH0KIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2Nr
KEJhc2ljQmxvY2sqIGJsb2NrLCBWZWN0b3I8QmxvY2tJbmRleD4mIHBvc3NpYmxlVGFyZ2V0cykK
K3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgVmVjdG9y
PFVubGlua2VkQmxvY2s+JiBwb3NzaWJsZVRhcmdldHMpCiB7CiAgICAgQVNTRVJUKGJsb2NrLT5l
bmQgIT0gTm9Ob2RlKTsKKyAgICBBU1NFUlQoIWJsb2NrLT5pc0xpbmtlZCk7CisgICAgQVNTRVJU
KGJsb2NrLT5lbmQgPiBibG9jay0+YmVnaW4pOwogICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Js
b2NrLT5lbmQgLSAxXTsKICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwogICAgIAogICAg
IHN3aXRjaCAobm9kZS5vcCkgewogICAgIGNhc2UgSnVtcDoKICAgICAgICAgbm9kZS5zZXRUYWtl
bkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVU
YXJnZXRzLCBub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiTGlua2VkIGJhc2ljIGJs
b2NrICVwIHRvICVwLCAjJXUuXG4iLCBibG9jaywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2Vu
QmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS50YWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBub2RlLnNl
dFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChwb3Nz
aWJsZVRhcmdldHMsIG5vZGUudGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOwog
ICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JC
eXRlY29kZU9mZnNldChwb3NzaWJsZVRhcmdldHMsIG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNl
dER1cmluZ1BhcnNpbmcoKSkpOworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKKyAgICAg
ICAgcHJpbnRmKCJMaW5rZWQgYmFzaWMgYmxvY2sgJXAgdG8gJXAsICMldSBhbmQgJXAsICMldS5c
biIsIGJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLmdldCgp
LCBub2RlLnRha2VuQmxvY2tJbmRleCgpLCBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5C
bG9ja0luZGV4KCldLmdldCgpLCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKKyNlbmRpZgog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiTWFya2luZyBiYXNpYyBibG9jayAlcCBhcyBs
aW5rZWQuXG4iLCBibG9jayk7CisjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIAor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBibG9jay0+aXNMaW5rZWQgPSB0cnVlOworI2VuZGlm
CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9yPEJsb2NrSW5kZXg+
JiB1bmxpbmtlZEJsb2NrcykKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmxpbmtCbG9ja3MoVmVjdG9y
PFVubGlua2VkQmxvY2s+JiB1bmxpbmtlZEJsb2NrcykKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKQotICAgICAgICBsaW5rQmxvY2sobV9n
cmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2Nrc1tpXV0uZ2V0KCksIHVubGlua2VkQmxvY2tzKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVubGlua2VkQmxvY2tzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICh1bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzTm9ybWFsTGlua2luZykgewor
ICAgICAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9ibG9ja3NbdW5saW5rZWRCbG9ja3NbaV0u
bV9ibG9ja0luZGV4XS5nZXQoKSwgdW5saW5rZWRCbG9ja3MpOworICAgICAgICAgICAgdW5saW5r
ZWRCbG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vzc29yKFZlY3RvcjxCbG9j
a0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJsb2NrSW5kZXgg
c3VjY2Vzc29ySW5kZXgpCit7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5t
X2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVh
Y2hhYmxlKSB7CisgICAgICAgIHN1Y2Nlc3Nvci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAg
ICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29ySW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNj
ZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChibG9ja0luZGV4KTsKIH0KIAotdm9pZCBCeXRl
Q29kZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3NvcnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZGV0
ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKLSAgICBmb3IgKEJsb2NrSW5kZXggaW5kZXggPSAwOyBp
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2luZGV4KSB7CisgICAgVmVjdG9yPEJs
b2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5hcHBlbmQoMCk7CisgICAgbV9n
cmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJsb2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0
KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgCiAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAg
IEFTU0VSVChibG9jay0+ZW5kICE9IE5vTm9kZSk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNM
aW5rZWQpOworICAgICAgICAKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVu
ZCAtIDFdOwogICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwotCisgICAgICAgIAog
ICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nb
bm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Cisg
ICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Iod29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxv
Y2tJbmRleCgpKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAg
ICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vz
c29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5v
dFRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAg
ICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3JrbGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCkpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODc3LDMw
ICsyMjQzLDM1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkKICAgICAgICAgbV9pZGVudGlmaWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihpKS5pbXBsKCksIGkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxv
Y2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKQotICAgICAgICBtX2pzVmFsdWVN
YXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkpOworICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpT
VmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4KSksIGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgCiAg
ICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpJ
bmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29k
ZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
QmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSKQor
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0ZUNv
ZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVn
aXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVn
aXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQpCiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVD
b2RlUGFyc2VyKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxl
ZEJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAgLCBtX2NhbGxzaXRlQmxvY2tIZWFkKGNhbGxzaXRl
QmxvY2tIZWFkKQotICAgICwgbV9jYWxsZWUoYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tU
b3ApCisgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCisgICAgLCBtX2RpZFJldHVy
bihmYWxzZSkKKyAgICAsIG1fZGlkRWFybHlSZXR1cm4oZmFsc2UpCisgICAgLCBtX2NhbGxlcihi
eXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKIHsKLSAgICBpZiAobV9jYWxsZWUpIHsK
KyAgICBpZiAobV9jYWxsZXIpIHsKICAgICAgICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFT
U0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrKTsKICAgICAgICAg
QVNTRVJUKGNhbGxlZVZSICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCAhPSBOb0Jsb2NrKTsKICAgICAgICAgCiAgICAg
ICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIGlubGluZUNhbGxG
cmFtZS5leGVjdXRhYmxlID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gbV9jYWxsZWUtPm1fY29kZUJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUuc2V0
KCpieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxEYXRhLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAg
ICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIGlubGluZUNhbGxG
cmFtZS5jYWxsZWVWUiA9IGNhbGxlZVZSOwogICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVy
ID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIGlubGluZUNh
bGxGcmFtZS5udW1Bcmd1bWVudHNJbmNsdWRpbmdUaGlzID0gY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnM7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0NhbGwgPSB0cnVlOwogICAgICAgICBi
eXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxGcmFtZXMoKS5hcHBlbmQoaW5s
aW5lQ2FsbEZyYW1lKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAmYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxsRnJhbWVzKCkubGFzdCgpOwogICAgICAgICAKQEAg
LTE5MTgsMTUgKzIyODksMjEgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICB9CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKLSAgICAgICAgICAgIHBhaXI8SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJl
c3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSksIGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAg
ICAgICAgICBwYWlyPEpTVmFsdWVNYXA6Oml0ZXJhdG9yLCBib29sPiByZXN1bHQgPSBieXRlQ29k
ZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBieXRlQ29k
ZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7
CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFw
cGVuZChDb25zdGFudFJlY29yZCgpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY29u
c3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5maXJzdC0+c2Vjb25kOwogICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gdHJ1ZTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBNYWNoaW5lIGNvZGUgYmxvY2sgY2FzZS4KICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jayA9PSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBB
U1NFUlQoY2FsbGVlVlIgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VS
VChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NF
UlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgPT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAg
ICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVhZCA9PSBOb0Jsb2NrKTsKIAogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9IDA7CkBAIC0xOTM3LDkgKzIzMTQsMTQgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lk
ZW50aWZpZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKLSAgICAgICAgICAgIG1f
Y29uc3RhbnRSZW1hcFtpXSA9IGk7CisgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBp
ICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisKKyAgICAgICAgbV9jYWxsc2l0ZUJsb2Nr
SGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOwogICAgIH0KICAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fY29uc3RhbnRSZW1hcC5zaXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKG1f
Y29uc3RhbnRSZW1hcFtpXSA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgCiAg
ICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwogfQogCkBAIC0xOTUw
LDIxICsyMzMyLDQ4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAg
ICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJnZXRJbmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBj
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKICAg
ICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1cnJl
bnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhlIG5leHQganVtcCB0YXJnZXQsIG9yIHRoZSBlbmQg
b2YgdGhlIGluc3RydWN0aW9ucy4KICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0
SW5kZXggPCBjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSA/IGNvZGVCbG9jay0+anVt
cFRhcmdldChqdW1wVGFyZ2V0SW5kZXgpIDogY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXpl
KCk7CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIlBhcnNp
bmcgYnl0ZWNvZGUgd2l0aCBsaW1pdCAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBt
X2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCksIGxpbWl0LCBDb2RlT3JpZ2luOjppbmxpbmVE
ZXB0aEZvckNhbGxGcmFtZShtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkpOwor
I2VuZGlmCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKIAogICAgICAg
ICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRoZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVt
cCB0YXJnZXQpLgogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4g
YmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNCbG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5z
aXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscykpOwotICAgICAgICAgICAgbV9jdXJy
ZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
dW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAgICAgICAg
ICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5kKGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICBpZiAoIW1fY3VycmVudEJsb2NrKSB7CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
Y2FuIHVzZSB0aGUgbGFzdCBibG9jay4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9i
bG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLT5iZWdpbiA9PSBtX2dy
YXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
bXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0byB1cy4KKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRl
eCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAv
LyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
UmVhc2NyaWJpbmcgYnl0ZWNvZGUgaW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMl
dSAocGVlcGhvbGUgY2FzZSkuXG4iLCBtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50QmxvY2stPmJ5
dGVjb2RlQmVnaW4sIG1fY3VycmVudEluZGV4KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4OworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4LCBtX2dyYXBo
LnNpemUoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNyZWF0aW5nIGJhc2lj
IGJsb2NrICVwLCAjJWx1IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBibG9j
ay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1
dGFibGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZy
YW1lKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nr
cy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVudEluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5h
cHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOworICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzLmFwcGVuZChibG9jay5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFwYXJzZUJs
b2NrKGxpbWl0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAv
LyBXZSBzaG91bGQgbm90IGhhdmUgZ29uZSBiZXlvbmQgdGhlIGxpbWl0LgogICAgICAgICAgICAg
QVNTRVJUKG1fY3VycmVudEluZGV4IDw9IGxpbWl0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGhhdmUgcGxhbnRlZCBhIHRlcm1pbmFsLCBvciB3ZSBqdXN0IGdhdmUg
dXAgYmVjYXVzZQorICAgICAgICAgICAgLy8gd2UgcmVhbGl6ZWQgdGhhdCB0aGUganVtcCB0YXJn
ZXQgaW5mb3JtYXRpb24gaXMgaW1wcmVjaXNlLCBvciB3ZQorICAgICAgICAgICAgLy8gYXJlIGF0
IHRoZSBlbmQgb2YgYW4gaW5saW5lIGZ1bmN0aW9uLgorICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEJsb2NrLT5iZWdpbiA9PSBtX2dyYXBoLnNpemUoKSB8fCBtX2dyYXBoLmxhc3QoKS5pc1Rl
cm1pbmFsKCkgfHwgKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpICYmIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CiAKICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5lbmQgPSBtX2dyYXBoLnNpemUoKTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrID0gMDsKICAgICAgICAgfSB3aGlsZSAobV9jdXJyZW50SW5kZXggPCBs
aW1pdCk7CiAgICAgfQogCkBAIC0xOTc5LDEyICsyMzg4LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQo
IW1fY3VycmVudEluZGV4KTsKICAgICAKLSAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNr
RW50cnkodGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxp
ZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5
KHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxvY2ssIEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIsIEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKICAgICBsaW5rQmxvY2tzKGlubGlu
ZVN0YWNrRW50cnkubV91bmxpbmtlZEJsb2Nrcyk7Ci0gICAgc2V0dXBQcmVkZWNlc3NvcnMoKTsK
KyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8TG9jYWxQ
aGlTdGFjaz4oKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8QXJndW1lbnRQaGlTdGFjaz4oKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi1ib29sIGNhbkNv
bXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQordGVtcGxhdGU8Ym9vbCAoKmNhbkhh
bmRsZU9wY29kZSkoT3Bjb2RlSUQpPgorYm9vbCBjYW5IYW5kbGVPcGNvZGVzKENvZGVCbG9jayog
Y29kZUJsb2NrKQogewogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+
Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25z
QmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CkBAIC00Myw3ICs0NCw3
IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICAgICAgc3dp
dGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVP
ZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBERUZJTkVfT1Aob3Bjb2RlLCBsZW5ndGgpICAg
ICAgICAgICBcCiAgICAgICAgIGNhc2Ugb3Bjb2RlOiAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZU9wY29kZShvcGNvZGUpKSAgXAorICAgICAgICAg
ICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUob3Bjb2RlKSkgIFwKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0g
bGVuZ3RoOyAgICAgICBcCiAgICAgICAgICAgICBicmVhazsKQEAgLTU4LDYgKzU5LDE2IEBAIGJv
b2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmwKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAg
ICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Db21waWxlT3Bjb2RlPihjb2RlQmxvY2spOwor
fQorCitib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
cmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuSW5saW5lT3Bjb2RlPihjb2RlQmxvY2spOworfQor
CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDIwICsyNiw0MiBAQAogI2lmbmRlZiBERkdDYXBhYmlsaXRpZXNfaAogI2RlZmluZSBE
RkdDYXBhYmlsaXRpZXNfaAogCisjaW5jbHVkZSAiREZHSW50cmluc2ljLmgiCisjaW5jbHVkZSAi
REZHTm9kZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaW5jbHVkZSAiREZHTm9kZS5oIgot
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0aGV5IHJldHVybiB0cnVlIGl0IGlzIHN0aWxs
IG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rlcy4KLWlubGluZSBib29sIG1pZ2h0Q29tcGls
ZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21w
aWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVybiB0cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdo
dENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQotaW5s
aW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRXZhbChDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0g
SGV1cmlzdGljczo6bWF4aW11bUV2YWxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1
cmlzdGljczo6bWF4aW11bVByb2dyYW1PcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNv
dW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQo
KSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlk
YXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9u
Rm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2RlQmxv
Y2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JD
b25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQorCitpbmxp
bmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGlj
czo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7
Cit9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9j
ayopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiAvLyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxp
bmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQpAQCAtMTQ2LDE0ICsx
NjgsNDUgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZShPcGNvZGVJRCBvcAogICAgIH0K
IH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wY29kZUlEKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAgCisgICAgLy8gVGhlc2Ugb3Bjb2RlcyB3
b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQgd2l0aCBpbmxpbmluZywgYnV0IHdlIGN1cnJlbnRseSBk
b24ndCBkbyBpdC4KKyAgICAvLyBUaGUgaXNzdWUgaXMgdGhhdCB0aGUgc2NvcGUgY2hhaW4gd2ls
bCBub3QgYmUgc2V0IGNvcnJlY3RseS4KKyAgICBjYXNlIG9wX2dldF9zY29wZWRfdmFyOgorICAg
IGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CisgICAgY2FzZSBvcF9yZXNvbHZlOgorICAgIGNhc2Ug
b3BfcmVzb2x2ZV9iYXNlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6CisgICAgICAgIAor
ICAgIC8vIFRyaXZpYWwgdG8gc3VwcG9ydCB3aXRoIHRoZSBjb3B5IHByb3BhZ2F0aW9uIG1hY2hp
bmUgd2UgYWxyZWFkeSBoYXZlLCBidXQgdGhlIGdsdWUKKyAgICAvLyBpc24ndCB0aGVyZSwgeWV0
LgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICAgICAgCisgICAgLy8gSW5saW5pbmcgZG9l
c24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBleHByZXNzaW9uIG9wZXJhbmRzLgorICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gY2FuQ29tcGlsZU9wY29kZShvcGNvZGVJRCk7CisgICAg
fQorfQorCiBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayopOworYm9vbCBjYW5Jbmxp
bmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQpCiBpbmxpbmUg
Ym9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxp
bmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9
CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBtaWdodElubGlu
ZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJv
b2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sqKSB7IHJldHVybiBm
YWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVy
biBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2RlKE9wY29kZUlEKSB7IHJldHVy
biBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKikgeyBy
ZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJsb2NrKikg
eyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogaW5saW5lIGJv
b2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCkBAIC0xNzYsNiArMjI5LDE2
IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnUKICAgICByZXR1cm4g
bWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5Db21waWxl
T3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZv
ckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVu
Y3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5saW5lT3Bjb2Rlcyhjb2RlQmxvY2spOwor
fQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gREZHQ2FwYWJpbGl0aWVzX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5ODA4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw0NiBAQCBjb25zdCBjaGFyKiBHcmFwaDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NE
CiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKHVuc2ln
bmVkIGFtb3VudCkKK3sKKyAgICB3aGlsZSAoYW1vdW50LS0gPiAwKQorICAgICAgICBwcmludGYo
IiAiKTsKK30KKwordm9pZCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4IG5vZGVJbmRl
eCkKK3sKKyAgICBpZiAoIW5vZGVJbmRleCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIE5v
ZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsKKyAgICBOb2RlJiBwcmV2aW91c05vZGUg
PSBhdChub2RlSW5kZXggLSAxKTsKKyAgICBpZiAocHJldmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPENvZGVPcmlnaW4+IHByZXZpb3VzSW5s
aW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29kZU9yaWdpbi5pbmxpbmVTdGFjaygpOworICAgIFZl
Y3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5saW5lU3RhY2sgPSBjdXJyZW50Tm9kZS5jb2RlT3Jp
Z2luLmlubGluZVN0YWNrKCk7CisgICAgdW5zaWduZWQgY29tbW9uU2l6ZSA9IHN0ZDo6bWluKHBy
ZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50SW5saW5lU3RhY2suc2l6ZSgpKTsKKyAg
ICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNvbW1vblNpemU7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkgeworICAgICAgICBpZiAocHJldmlvdXNJ
bmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUgIT0gY3VycmVudElubGluZVN0YWNrW2ldLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaW5kZXhPZkRpdmVyZ2VuY2UgPSBpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gUHJpbnQgdGhl
IHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gcHJldmlvdXNJbmxpbmVTdGFjay5zaXplKCk7
IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykgeworICAgICAgICBwcmludFdoaXRlU3BhY2UoaSAq
IDIpOworICAgICAgICBwcmludGYoIjwtLSAlcFxuIiwgcHJldmlvdXNJbmxpbmVTdGFja1tpXS5p
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgIH0KKyAgICAKKyAgICAvLyBQ
cmludCB0aGUgcHVzaGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNl
OyBpIDwgY3VycmVudElubGluZVN0YWNrLnNpemUoKTsgKytpKSB7CisgICAgICAgIHByaW50V2hp
dGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50ZigiLS0+ICVwXG4iLCBjdXJyZW50SW5saW5l
U3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICB9Cit9CisK
IHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CkBAIC05MSw2ICsxMzEsOSBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIEFTU0VS
VChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVmQ291bnQ7CiAgICAgfQorICAgIAorICAgIGR1bXBD
b2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAgcHJpbnRXaGl0ZVNwYWNlKChub2RlLmNvZGVPcmln
aW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9u
IG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTI0MCw3ICsyODMsNyBAQCB2b2lk
IEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGZvciAoc2l6ZV90IGIg
PSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKLSAgICAgICAgcHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1
KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBibG9jay0+aXNPU1JUYXJn
ZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CisgICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChi
YyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1Jl
YWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1Ig
dGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIHByaW50ZigiICB2YXJzOiAiKTsKICAgICAgICAgaWYg
KGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52
YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDkgKzExMSwxMyBAQCBwdWJsaWM6CiAgICAgLy8g
Q29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChD
b2RlQmxvY2sqID0gMCk7CiAgICAgdm9pZCBkdW1wKE5vZGVJbmRleCwgQ29kZUJsb2NrKiA9IDAp
OworCisgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBk
aWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQorICAgIC8vIHByZWNlZGluZyBub2RlLgor
ICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4KTsKICNlbmRpZgogCi0gICAgQmxvY2tJ
bmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVjdG9yPEJsb2NrSW5kZXg+JiBibG9j
a3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOworICAgIEJsb2NrSW5kZXggYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBi
eXRlY29kZUJlZ2luKTsKIAogICAgIGJvb2wgcHJlZGljdEdsb2JhbFZhcih1bnNpZ25lZCB2YXJO
dW1iZXIsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CkBAIC0yNDgsMTggKzI1Miwx
OCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBvcGVyYXRvcigp
KEJsb2NrSW5kZXgqIGJsb2NrSW5kZXgpIGNvbnN0CisgICAgdW5zaWduZWQgb3BlcmF0b3IoKShV
bmxpbmtlZEJsb2NrKiB1bmxpbmtlZEJsb2NrKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fZ3JhcGgubV9ibG9ja3NbKmJsb2NrSW5kZXhdLT5ieXRlY29kZUJlZ2luOworICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2NrLT5tX2Jsb2NrSW5kZXhdLT5ieXRl
Y29kZUJlZ2luOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKIH07CiAK
LWlubGluZSBCbG9ja0luZGV4IEdyYXBoOjpibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoVmVj
dG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pCitpbmxpbmUg
QmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxVbmxp
bmtlZEJsb2NrPiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQogewotICAgIHJldHVy
biAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4oYmxv
Y2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJl
UHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJl
dHVybiBXVEY6OmJpbmFyeVNlYXJjaFdpdGhGdW5jdG9yPFVubGlua2VkQmxvY2ssIHVuc2lnbmVk
PihibG9ja3MuYmVnaW4oKSwgYmxvY2tzLnNpemUoKSwgYnl0ZWNvZGVCZWdpbiwgV1RGOjpLZXlN
dXN0QmVQcmVzZW50SW5BcnJheSwgR2V0Qnl0ZWNvZGVCZWdpbkZvckJsb2NrKCp0aGlzKSktPm1f
YmxvY2tJbmRleDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwyMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2
ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zl
cnksIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCkKK3Zv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhp
dCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1h
IHN0dWZmLgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVk
IChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBl
eGl0Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIs
ICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAg
Zm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBK
SVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zmc2V0KCkpOwogICAgIGV4aXQuZHVtcChzdGRlcnIp
OwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkBA
IC00NDQsMTkgKzQ1MSw1OSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRo
T1NSCiAgICAgICAgIGxvYWQzMih0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAgICAK
LSAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lIChz
KS4KICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOwogICAgIAorICAgIGZvciAoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lOworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlcik7CisgICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcCA9IGRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
KTsKKyAgICAgICAgdW5zaWduZWQgcmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAg
ICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Ojpn
ZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5z
aXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1h
cHBpbmcpOworICAgICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVy
bkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9t
YWNoaW5lQ29kZU9mZnNldCk7CisKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVWUiksIEdQUkluZm86OnJlZ1Q0KTsKKyAg
ICAgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgYWRkMzIoSW1tMzIo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihiYXNlbGluZUNvZGVCbG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOworICAg
ICAgICBzdG9yZTMyKEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbikpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDIsIHBheWxvYWRGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihjYWxsZXJG
cmFtZUdQUiwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykp
KTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxl
OjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMyKEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+bnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDQsIHBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisKICAgICAvLyAxNCkgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAotICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CisgICAgVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3Io
YmFzZWxpbmVDb2RlQmxvY2spOworICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCog
bWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVk
LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2Rl
TWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBw
aW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CiAgICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7
CisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0
KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAgICAgQVNTRVJUKEdQ
UkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyICYmIEdQUkluZm86
OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CiAgICAgCkBAIC00Njgs
MjQgKzUxNSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNl
bmRpZgogfQogCi12b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQm
IHNwZWN1bGF0aXZlKQotewotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRl
Y29kZWRDb2RlTWFwOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+aml0Q29kZU1hcCgpKTsKLSAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29k
ZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOwotICAgIAotICAgIE9TUkV4aXRWZWN0b3I6
Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKLSAg
ICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRz
KCkuZW5kKCk7Ci0gICAgCi0gICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewotICAg
ICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKLSAgICAgICAgZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQu
bV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOwotICAgICAgICArK2V4aXRzSXRlcjsK
LSAgICB9Ci19Ci0KIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiB7CiAgICAgbV9z
dGFydE9mQ29kZSA9IGxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSNpZiBVU0UoSlNWQUxVRTY0KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
REZHSklUQ29kZUdlbmVyYXRvci5oIgpAQCAtMzksMTMgKzM4LDQ4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVy
eSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQorVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVkQ29kZU1h
cEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrID09IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpKTsKKyAgICAKKyAgICBzdGQ6OnBhaXI8SGFzaE1hcDxDb2RlQmxvY2sqLCBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0
ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4oKSk7CisgICAgCisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIGNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAg
IAorICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKK3sKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmJl
Z2luKCk7CisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNFbmQgPSBzcGVjdWxhdGl2
ZS5vc3JFeGl0cygpLmVuZCgpOworICAgIAorICAgIHdoaWxlIChleGl0c0l0ZXIgIT0gZXhpdHNF
bmQpIHsKKyAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhpdCA9ICpleGl0c0l0ZXI7CisgICAgICAg
IGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNv
dmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCkpOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJl
Y292ZXJ5KQogewogICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KICAgICBleGl0Lm1fY2hlY2su
bGluayh0aGlzKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgl
eCAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdP
ZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIs
IChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAl
cCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAg
fQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zm
c2V0KCkpOwogICAgIGV4aXQuZHVtcChzdGRlcnIpOwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShW
RVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkBAIC00ODIsMTkgKzUxNiw1NSBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgaWYgKGV4aXQubV9sYXN0U2V0
T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTMpIEZpeCBjYWxs
IGZyYW1lLgorICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZShzKS4KICAgICAKICAgICBBU1NFUlQo
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJu
YXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVC
bG9jaykpOwogICAgIAorICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9y
aWdpbik7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcik7CisgICAgICAgIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29kZWRD
b2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyKTsKKyAgICAgICAgdW5zaWduZWQg
cmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1
bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNv
ZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1hcHBpbmcpOworICAgICAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVWUiksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fc2NvcGVDaGFpbikpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIEdQUlJlZyBjYWxs
ZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkgeworICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAg
ICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgc3RvcmVQ
dHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6
UmV0dXJuUEMpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+bnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcykp
KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjpyZWdUMSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGFkZFB0
cihJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAKICAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBj
b2RlLgogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFy
eVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRl
Y29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9y
aWdpbik7CisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2Rl
TWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOworICAgIAorICAgIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5
dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUo
KSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1h
cHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2J5
dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCoganVtcFRhcmdl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGlu
Zy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVC
bG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNl
dCk7CiAgICAgCiAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJl
c3VsdFJlZ2lzdGVyKTsKICAgICAKQEAgLTUwNiwyNCArNTc2LDYgQEAgdm9pZCBKSVRDb21waWxl
cjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogI2VuZGlmCiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCi17Ci0gICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOwotICAgIGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1h
cCk7Ci0gICAgCi0gICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3Vs
YXRpdmUub3NyRXhpdHMoKS5iZWdpbigpOwotICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4
aXRzRW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKLSAgICAKLSAgICB3aGlsZSAo
ZXhpdHNJdGVyICE9IGV4aXRzRW5kKSB7Ci0gICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAq
ZXhpdHNJdGVyOwotICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0
aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29k
ZU1hcCk7Ci0gICAgICAgICsrZXhpdHNJdGVyOwotICAgIH0KLX0KLQogdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KCkKIHsKICAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKQEAgLTc5
Myw3ICs4NDUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjbGVhclNhbXBsaW5nRmxhZyhpbnQzCiB9
CiAjZW5kaWYKIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9u
IDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsOCArMjU1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgIHN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAg
ICAgfQorI2lmIENQVShYODZfNjQpCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmd1bWVu
dCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisjZWxpZiBDUFUoWDg2KQorICAg
ICAgICBwb2tlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcG9rZShU
cnVzdGVkSW1tUHRyKGFyZ3VtZW50KSwgMSk7CisjZWxzZQorI2Vycm9yICJERkcgSklUIG5vdCBz
dXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCisjZW5kaWYKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86OnJlZ1Qw
KTsKICAgICAgICAgY2FsbChHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC00MzAsOCAr
NDM3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQgbGlu
ayhMaW5rQnVmZmVyJik7CiAKLSAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3Qg
T1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9T
Uihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgbGlua09T
UkV4aXRzKFNwZWN1bGF0aXZlSklUJik7CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZv
ckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCkgPT0gY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigp
KTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpOworICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBG
b3IoQ29kZUJsb2NrKik7CiAKICAgICAvLyBUaGUgZ2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3Mg
Y29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOwpAQCAtNDQxLDcgKzQ2MSw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgY29kZUJsb2Nr
IGN1cnJlbnRseSBiZWluZyBnZW5lcmF0ZWQsIHVzZWQgdG8gYWNjZXNzIGluZm9ybWF0aW9uIHN1
Y2ggYXMgY29uc3RhbnQgdmFsdWVzLCBpbW1lZGlhdGVzLgogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7Ci0KKyAgICAKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+ID4gbV9kZWNvZGVkQ29kZU1hcHM7CisgICAgCiAgICAgLy8gVmVjdG9y
IG9mIGNhbGxzIG91dCBmcm9tIEpJVCBjb2RlLCBpbmNsdWRpbmcgZXhjZXB0aW9uIGhhbmRsZXIg
aW5mb3JtYXRpb24uCiAgICAgLy8gQ291bnQgb2YgdGhlIG51bWJlciBvZiBDYWxsUmVjb3JkcyB3
aXRoIGV4Y2VwdGlvbiBoYW5kbGVycy4KICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5ODA4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTUsNiArMjE1LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwog
ICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFBoaSwgMCkgXAorICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4g
Ki9cCiAgICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKQEAgLTQ4NSw2ICs0ODYsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgUGhpOgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC04MzYsNyArODM4LDcgQEAgc3RydWN0IE5vZGUgewogCiAgICAgYm9vbCBzaG91bGRHZW5l
cmF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGk7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50ICYmIG9wICE9IFBoaSAmJiBvcCAhPSBGbHVzaDsKICAg
ICB9CiAKICAgICB1bnNpZ25lZCByZWZDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0LDMxIEBA
IHB1YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhd
OyB9CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bHNbaWR4XTsgfQogICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQorICAg
IHsKKyAgICAgICAgaWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOworICAgICAg
ICBtX2xvY2Fscy5yZXNpemUoc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXpl
OyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRy
YWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6
ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoaWR4ID49IG1fbG9j
YWxzLnNpemUoKSkgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7Ci0gICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKLSAgICAgICAg
fQorICAgICAgICBlbnN1cmVMb2NhbHMoaWR4ICsgMSk7CiAgICAgICAgIAogICAgICAgICBtX2xv
Y2Fsc1tpZHhdID0gdmFsdWU7CiAgICAgfQogICAgIAorICAgIFQgZ2V0TG9jYWwoc2l6ZV90IGlk
eCkKKyAgICB7CisgICAgICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIHJldHVybiBtX2xvY2Fs
c1tpZHhdOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVf
dCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRz
W2lkeF0gPT0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTc4LDYgKzU3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIEZs
dXNoOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5
ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MCwxMCArNzQwLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0
cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQogICAgICAgICAvLyBT
ZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgotICAg
ICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbkZvck9TUiA9PSBub2RlLmNv
ZGVPcmlnaW4pOwogICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IGF0KG1fY29tcGlsZUluZGV4ICsg
MSk7CiAgICAgICAgIAotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5l
eHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAgIAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTgwNiw3ICsx
ODA2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNh
c2UgQ29udmVydFRoaXM6IHsKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
Y2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTgyOSwxMSArMTgzMSwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmpl
Y3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAg
ICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5n
cHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNT
dHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
R1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0
cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1Zh
bHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNW
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTIzMzEsNiArMjMzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyB0byB0aGUgKm5leHQqIGlu
c3RydWN0aW9uLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5ICJleGVjdXRlZCIgdGhlCiAgICAgICAgIC8v
IFNldExvY2FsIGFuZCB3aGF0ZXZlciBvdGhlciBERkcgTm9kZXMgYXJlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgc2FtZQogICAgICAgICAvLyBieXRlY29kZSBpbmRleCBhcyB0aGUgU2V0TG9jYWwuCi0g
ICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luRm9yT1NSID09IG5vZGUu
Y29kZU9yaWdpbik7CiAgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXgg
KyAxKTsKICAgICAgICAgCiAgICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUg
Ynl0ZWNvZGUgaW5kZXggZm9yIHRoZSBuZXh0IG5vZGUgdG8gYmUKQEAgLTg2MSw3ICs4NjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHN0
YXRlbWVudCkgd291bGQgYmUgZGVhZCBhbnl3YXkgLSBzbyB0aGUgZmFjdCB0aGF0IERGRyB3b3Vs
ZCBoYXZlCiAgICAgICAgIC8vIGFscmVhZHkgbWFkZSB0aGUgYXNzaWdubWVudCwgYW5kIGJha2Vk
IGl0IGludG8gdGhlIHJlZ2lzdGVyIGZpbGUgZHVyaW5nCiAgICAgICAgIC8vIE9TUiBleGl0LCB3
b3VsZCBub3QgYmUgdmlzaWJsZSB0byB0aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgotICAgICAgICBt
X2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7
CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAg
ICAgIAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg5MCw3ICsxODkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKICAgICAg
ICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTkxMywxMSArMTkxNSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hp
bGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVH
UFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjM5MSw2
ICsyMzk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk4MDgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChG
SUxFKiBvdXQpIGNvbnMKIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hl
Y2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBt
X2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKLSAg
ICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKKyAgICAsIG1f
Y29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKICAgICAsIG1fcmVjb3ZlcnlJbmRl
eChyZWNvdmVyeUluZGV4KQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXpl
KCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewotICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKKyAg
ICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOwogICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKICAgICAg
ICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihq
aXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9
IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQpAQCAtMjYwLDYg
KzI2MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAg
ICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBi
bG9jay5iZWdpbik7CisgICAgCisgICAgaWYgKCFibG9jay5pc1JlYWNoYWJsZSkgeworICAgICAg
ICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnko
YmxvY2spOwpAQCAtMjkxLDExICsyOTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgbV9jb2RlT3JpZ2luRm9y
T1NSID0gQ29kZU9yaWdpbigpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2su
ZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChtX2NvbXBp
bGVJbmRleCk7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5vZGUuY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4OworICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBub2RlLmNvZGVP
cmlnaW47CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxh
dGl2ZUpJVCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAg
IiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOwpAQCAtMzY2LDcgKzM3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSID0gMDsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2RlT3JpZ2luKDAp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkK
ICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RydWN0IE9T
UkV4aXQgewogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7CiAgICAgTm9k
ZUluZGV4IG1fbm9kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBD
b2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5k
ZXg7CiAgICAgCkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWVT
b3VyY2UsIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJp
YWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Ci0gICAgdWludDMyX3QgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yT1NSOwogICAgIAog
ICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKQEAgLTgwMSw3ICs4MDEsNiBAQCBpbmxp
bmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX2FyZ3VtZW50cyhq
aXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKICAgICAsIG1fdmFyaWFibGVzKGppdC5n
cmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuY29kZUJs
b2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsNyArOTIsNyBAQCBDYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1l
U2xvCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbWFjaGluZUNhbGxlci0+Y29kZUJsb2Nr
KCktPmNvZGVPcmlnaW5Gb3JSZXR1cm4ocmV0dXJuUEMoKSk7CiAgICAgCiAgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGlu
ZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0SW5saW5lQ2FsbEZy
YW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAK
ICAgICAgICAgQ2FsbEZyYW1lKiBpbmxpbmVkQ2FsbGVyID0gbWFjaGluZUNhbGxlciArIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTMgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShJbnN0cnVjdAogICAgIC8vIERvbmUhIC0g
cmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRoLgogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9w
X2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9ldmFsKSk7CiAgICAgQVNTRVJUKE9QQ09E
RV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAg
ICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSBtX2NvZGVCbG9jay0+cmFyZUNh
c2VQcm9maWxlKG1fY29kZUJsb2NrLT5udW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSAtIDEpOwor
ICAgICAgICBBU1NFUlQoKHVuc2lnbmVkKXJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCA9PSBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgYWRkMzIoSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKKyAgICB9CisjZW5kaWYKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkpOwogCiAg
ICAgLy8gVGhpcyBoYW5kbGVzIGhvc3QgZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxNSw3ICsyMDE1LDEx
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KIAogICAgIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQotICAgICAgICBwcmludGYoIlJldHVybmluZyBmcm9tIG9sZCBKSVQgY2FsbCBm
cmFtZSB3aXRoIG9wdGltaXplZCByZXBsYWNlbWVudCAlcCglcCksIHdpdGggc3VjY2Vzcy9mYWls
ICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisgICAgICAgIHByaW50
ZigiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxh
Y2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2
ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgaWYgKGNhbGxlckZyYW1lKQorICAgICAgICAgICAg
cHJpbnRmKCIsIGNhbGxlckZyYW1lID0gJXAsIHJldHVyblBDID0gJXAsIGNhbGxlciBjb2RlIGJs
b2NrID0gJXAiLCBjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCksIGNh
bGxlckZyYW1lLT5jb2RlQmxvY2soKSk7CisgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgog
ICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplTm93
KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpAQCAtMjAyMyw2ICsyMDI3LDggQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2VuZGlmCiAgICAgICAg
ICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogCiAg
ICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDI0IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNsZWFyQ29kZVZpcnR1YWwKICAgICBCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKCk7CiB9CiAK
K0NvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQ29kZUJsb2NrKiByZXN1bHQ7CisgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2NrRm9y
Q2FsbC5nZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgp
OworICAgIH0KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgd2hpbGUg
KHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5hbHRlcm5h
dGl2ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIEFTU0VSVChyZXN1bHQtPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
SlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7CiAgICAgQVNT
RVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKQEAgLTQwNiwxMSAr
NDI0LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKICAgICBy
ZXR1cm4gZXJyb3I7CiB9CiAKLVBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9u
RXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxl
Ojpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29t
cGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVj
aWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGV4Y2VwdGlvbiA9
IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2Jh
bERhdGE7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5w
YXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgMCwgMCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBK
U1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7
CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXIt
PnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2JhbE9iamVjdCwgMCwgMCwgbV9zb3VyY2UsIG1f
cGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJz
ZU5vcm1hbCwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKCFib2R5KSB7CiAgICAgICAgIEFTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTQyMCw4ICs0MzksNiBAQCBQ
YXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAgICAgYm9keS0+ZmluaXNo
UGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7CiAgICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVh
dHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7Ci0KICAgICBPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IHJlc3VsdDsKICAgICBBU1NFUlQoKGNvbXBpbGF0aW9uS2luZCA9PSBGaXJzdENv
bXBpbGF0aW9uKSA9PSAhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpOwogICAgIHJl
c3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQo
KSwgc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpKTsKQEAgLTQ0Miw3ICs0
NTksNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYK
ICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9j
b2RlQmxvY2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNhbGwgPyBPcHRpbWl6aW5nQ29tcGls
YXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKKyAgICBP
d25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tG
b3Ioc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBp
bGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CiAgICAg
aWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKQEAgLTUwMCw3
ICs1MTcsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAg
CiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0Zv
cihleGVjLCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4
Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBw
cm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNv
bnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBDb21w
aWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9u
KTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9j
a0ZvcihTY29wZUNoYWluTm9kZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxl
Rm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
ICAgICAgICAgewpAQCAtNTcwLDkgKzU3MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAK
KyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICAg
ICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVlLmdldCgp
OyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVycy0+c2l6ZSgpOyB9IC8vIEluY2x1ZGluZyAndGhpcychCisgICAgICAgIHNpemVfdCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9IC8v
IEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIHVuc2lnbmVkIGNhcHR1cmVkVmFyaWFibGVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7IH0KICAgICAgICAgVVN0
cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkocmV2aXNpb24gOTgwODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KIAogLy8gU2V0IHRv
IDEgdG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMu
Ci0jZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAKKyNkZWZpbmUgRU5BQkxFX1JV
Tl9USU1FX0hFVVJJU1RJQ1MgMQogCiAjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM5LDYgKzM5LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK3Vuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9u
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1Qcm9ncmFtT3B0aW1p
emF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlv
bkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQg
bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOworCiBp
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CiBpbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOwogaW50
MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKQEAg
LTUwLDYgKzU5LDkgQEAgaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dQog
CiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCit1bnNpZ25l
ZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKK3Vuc2lnbmVkIGNvdWxkVGFrZVNsb3dD
YXNlVGhyZXNob2xkOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CiB1
bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkBAIC05OSw2ICsx
MTEsMTggQEAgdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYQogCiB2b2lk
IGluaXRpYWxpemVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhNRTogTXVzdCByZXZpc2l0IHRo
ZXNlIGhldXJpc3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGltaXppbmcgY29tcGlsZXIsIG1h
eQorICAgIC8vIHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1Z2UgY29kZSBi
bG9ja3MuIFRoZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAvLyB0aGlzIGlzIHRvIHJlZnVz
ZSB0byBvcHRpbWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1p
emF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RP
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKKyAgICAKKyAgICBTRVQobWF4
aW11bUlubGluaW5nRGVwdGgsIDMpOworCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAwMCk7CiAgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSk7CkBAIC0xMDksNiArMTMzLDkgQEAgdm9pZCBpbml0aWFs
aXplSGV1cmlzdGljcygpCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4sIDE1KTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvLCA2
KTsKKyAgICAKKyAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDEwMCk7Cisg
ICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAxMCk7IC8vIFNob3VsZG4ndCBi
ZSB6ZXJvIGJlY2F1c2Ugc29tZSBvcHMgd2lsbCBzcHVyaW91c2x5IHRha2Ugc2xvdyBjYXNlLCBm
b3IgZXhhbXBsZSBmb3IgbGlua2luZyBvciBjYWNoaW5nLgogCiAgICAgU0VUKGxhcmdlRmFpbENv
dW50VGhyZXNob2xkQmFzZSwgICAgICAgIDIwKTsKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJl
c2hvbGRCYXNlRm9yTG9vcCwgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTUgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVyaXN0aWNzIHsKIAorZXh0ZXJuIHVuc2ln
bmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4
dGVybiB1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1
bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsK
KworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7
IC8vIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25lIGxl
dmVsLCBldGMuCisKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwpAQCAtNDEsNiArNTAsOSBAQCBleHRlcm4g
aW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50CiAKIGV4dGVybiB1bnNpZ25lZCBkZXNp
cmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCitleHRlcm4gdW5zaWduZWQgbGlrZWx5
VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CitleHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQ7CisKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJh
c2U7CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOwogICAgIG5hbWVzcGFjZSBERkcgewogICAgIGNsYXNz
IEpJVENvZGVHZW5lcmF0b3I7CisgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAgICAgfQogCiAgICAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqKTsKQEAgLTQ2LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGlsZXI7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODgxLDEyICs4ODEsMTYgQEAKICNk
ZWZpbmUgRU5BQkxFX0pJVCAxCiAjZW5kaWYKIAorI2RlZmluZSBFTkFCTEVfREZHX0pJVCAxCiAv
KiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxVRTY0LCBvbmx5IHRlc3RlZCBv
biBQTEFURk9STShNQUMpICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX0RGR19KSVQpICYmIEVOQUJM
RShKSVQpICYmIFVTRShKU1ZBTFVFNjQpICYmIFBMQVRGT1JNKE1BQykKICNkZWZpbmUgRU5BQkxF
X0RGR19KSVQgMQogI2VuZGlmCiAKLS8qIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBK
U1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9uIFBMQVRGT1JNKE1BQykuICovCisvKiBQcm9maWxpbmcg
b2YgdHlwZXMgYW5kIHZhbHVlcyB1c2VkIGJ5IEpJVCBjb2RlLiBERkdfSklUIGRlcGVuZHMgb24g
aXQsIGJ1dCB5b3UKKyAgIGNhbiBlbmFibGUgaXQgbWFudWFsbHkgd2l0aCBERkcgdHVybmVkIG9m
ZiBpZiB5b3Ugd2FudCB0byB1c2UgaXQgYXMgYSBzdGFuZGFsb25lCisgICBwcm9maWxlci4gSW4g
dGhhdCBjYXNlLCB5b3UgcHJvYmFibHkgd2FudCB0byBhbHNvIGVuYWJsZSBWRVJCT1NFX1ZBTFVF
X1BST0ZJTEUKKyAgIGJlbG93LiAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9WQUxVRV9QUk9GSUxF
UikgJiYgRU5BQkxFKERGR19KSVQpCiAjZGVmaW5lIEVOQUJMRV9WQUxVRV9QUk9GSUxFUiAxCiAj
ZW5kaWYK
</data>
<flag name="review"
          id="110021"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="110023"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112050</attachid>
            <date>2011-10-21 17:34:46 -0700</date>
            <delta_ts>2011-10-21 18:10:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlining_patch_11.diff</filename>
            <type>text/plain</type>
            <size>115784</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMyIEBA
CisyMDExLTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBoYXZlIGlubGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02OTk5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50cyBpbmxpbmluZyB0aGF0J3MgaG9va2Vk
IGludG8gdGhlIGJ5dGVjb2RlIHBhcnNlci4gT25seQorICAgICAgICB3b3JrcyBmb3IgY2FsbHMs
IGZvciBub3csIHRob3VnaCBub3RoaW5nIGZ1bmRhbWVudGFsbHkgcHJldmVudHMgdXMKKyAgICAg
ICAgZnJvbSBpbmxpbmluZyBjb25zdHJ1Y3RvciBjYWxscy4gMiUgb3ZlcmFsbCBzcGVlZC11cCBv
biBhbGwKKyAgICAgICAgYmVuY2htYXJrcy4gNyUgc3BlZWQtdXAgb24gVjggKGFyb3VuZCAzNCUg
YW5kIDI3JSBvbiBkZWx0YWJsdWUgYW5kCisgICAgICAgIHJpY2hhcmRzIHJlc3BlY3RpdmVseSks
IG5ldXRyYWwgb24gS3Jha2VuIGFuZCBTdW5TcGlkZXIuIAorICAgICAgICAKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0QWdn
cmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpiYXNlbGluZVZlcnNpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNl
dEluc3RydWN0aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFr
ZVNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpjb3VsZFRha2VTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpsaWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UpOgor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omxpa2VseVRvVGFrZUFueVNsb3dDYXNlKToKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Omlu
bGluZURlcHRoRm9yQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5l
RGVwdGgpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2su
aDoKKyAgICAgICAgKEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjplbnN1cmVMb2NhbHMpOgorICAgICAgICAoSlNDOjpERkc6
OlVubGlua2VkQmxvY2s6OlVubGlua2VkQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkJ5dGVDb2Rl
UGFyc2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0RGlyZWN0KToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0
TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmZsdXNoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6fklubGluZVN0YWNrRW50
cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpyZW1hcE9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3Rh
Y2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAg
ICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhbkhhbmRs
ZU9wY29kZXMpOgorICAgICAgICAoSlNDOjpERkc6OmNhbkNvbXBpbGVPcGNvZGVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpjYW5JbmxpbmVPcGNvZGVzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJp
bGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRDb21waWxlRXZhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6bWlnaHRDb21waWxlUHJvZ3JhbSk6CisgICAgICAgIChKU0M6OkRGRzo6bWln
aHRDb21waWxlRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjptaWdodENvbXBp
bGVGdW5jdGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6bWlnaHRJbmxpbmVG
dW5jdGlvbkZvckNhbGwpOgorICAgICAgICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lT3Bjb2Rlcyk6CisgICAgICAgIChKU0M6OkRGRzo6Y2Fu
SW5saW5lRnVuY3Rpb25Gb3JDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpjYW5JbmxpbmVGdW5j
dGlvbkZvckNvbnN0cnVjdCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpwcmludFdoaXRlU3BhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpk
dW1wQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdldEJ5dGVjb2RlQmVnaW5G
b3JCbG9jazo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVjb2RlZENvZGVNYXBGb3IpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZGVi
dWdDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YmFzZWxpbmVDb2RlQmxv
Y2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUik6CisgICAgICAg
ICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZUFj
Y2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNob3VsZEdlbmVyYXRlKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
ZW5zdXJlTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWwpOgor
ICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpnZXRMb2NhbCk6CisgICAgICAgICogZGZnL0RG
R1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0
ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklU
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lOjp0cnVlQ2FsbGVyRnJhbWVTbG93KToKKyAgICAgICAgKiBqaXQvSklUQ2Fs
bC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElP
Tik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbCk6CisgICAgICAgIChKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKToKKyAgICAg
ICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpwcm9maWxlZENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6cGFyYW1ldGVyQ291bnQpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlzdGljcy5jcHA6
CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNzKToKKyAgICAg
ICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24u
aDoKKwogMjAxMS0xMC0yMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBmaW5hbGl6ZXIgdG8gSlNPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5ODA4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTgxLDYgKzE1ODEsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVnYXRl
KFNsb3RWaXNpdAogICAgIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgaWYg
KGhhc0NvZGVPcmlnaW5zKCkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgZXhlY3V0YWJs
ZXMgdGhhdCB3ZSBoYXZlIGlubGluZWQgZG9uJ3QgZGllLgorICAgICAgICAvLyBGSVhNRTogSWYg
dGhleSB3b3VsZCBoYXZlIG90aGVyd2lzZSBkaWVkLCB3ZSBzaG91bGQgcHJvYmFibHkgdHJpZ2dl
ciByZWNvbXBpbGF0aW9uLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZUNh
bGxGcmFtZXMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZpbmxp
bmVDYWxsRnJhbWVzKClbaV0uZXhlY3V0YWJsZSk7CisgICAgfQorI2VuZGlmCisKICNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCiAgICAgZm9yICh1bnNpZ25lZCBwcm9maWxlSW5kZXggPSAwOyBw
cm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytwcm9maWxlSW5kZXgpCiAg
ICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTEsNiArMjUxLDE4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBQYXNzT3duUHRyPENvZGVCbG9jaz4gcmVsZWFzZUFsdGVybmF0aXZlKCkgeyBy
ZXR1cm4gbV9hbHRlcm5hdGl2ZS5yZWxlYXNlKCk7IH0KICAgICAgICAgdm9pZCBzZXRBbHRlcm5h
dGl2ZShQYXNzT3duUHRyPENvZGVCbG9jaz4gYWx0ZXJuYXRpdmUpIHsgbV9hbHRlcm5hdGl2ZSA9
IGFsdGVybmF0aXZlOyB9CiAgICAgICAgIAorICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVy
c2lvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9jayogcmVzdWx0ID0gcmVwbGFj
ZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVy
biAwOyAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UncmUgaW4gdGhlIHByb2Nlc3Mgb2YgY3JlYXRp
bmcgdGhlIGJhc2VsaW5lIHZlcnNpb24uCisgICAgICAgICAgICB3aGlsZSAocmVzdWx0LT5hbHRl
cm5hdGl2ZSgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+YWx0ZXJuYXRpdmUo
KTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dC0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHZvaWQgdmlzaXRBZ2dy
ZWdhdGUoU2xvdFZpc2l0b3ImKTsKIAogICAgICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGlj
cygpOwpAQCAtMzc2LDEwICszODgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgVmVjdG9y
PEluc3RydWN0aW9uPiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0K
ICAgICAgICAgdm9pZCBkaXNjYXJkQnl0ZWNvZGUoKSB7IG1faW5zdHJ1Y3Rpb25zLmNsZWFyKCk7
IH0KIAotI2lmbmRlZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCgp
IHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25Db3VudDsgfQogICAgICAgICB2b2lkIHNldEluc3RydWN0
aW9uQ291bnQodW5zaWduZWQgaW5zdHJ1Y3Rpb25Db3VudCkgeyBtX2luc3RydWN0aW9uQ291bnQg
PSBpbnN0cnVjdGlvbkNvdW50OyB9Ci0jZW5kaWYKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAg
IHZvaWQgc2V0SklUQ29kZShjb25zdCBKSVRDb2RlJiBjb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVdpdGhBcml0eUNoZWNrKQpAQCAtNTMxLDEwICs1NDEsMTQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpnZW5lcmljQmluYXJ5U2VhcmNoPFJhcmVDYXNl
UHJvZmlsZSwgaW50LCBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldD4obV9yYXJlQ2Fz
ZVByb2ZpbGVzLCBtX3JhcmVDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHN0YXRpYyB1aW50MzJfdCBzbG93Q2FzZVRocmVz
aG9sZCgpIHsgcmV0dXJuIDEwMDsgfQogICAgICAgICBib29sIGxpa2VseVRvVGFrZVNsb3dDYXNl
KGludCBieXRlY29kZU9mZnNldCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJhcmVD
YXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyID49
IHNsb3dDYXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gSGV1cmlzdGlj
czo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgY291bGRUYWtlU2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXIgPj0gSGV1cmlzdGljczo6Y291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogYWRkU3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpbnQgYnl0ZWNvZGVPZmZzZXQpCkBAIC01NTIs
MjEgKzU2NiwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBsaWtlbHlUb1Rha2VT
cGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAg
ICB1bnNpZ25lZCBzcGVjaWFsRmFzdENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAgICAg
IHJldHVybiBzcGVjaWFsRmFzdENhc2VDb3VudCA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAg
ICAgICAgICAgcmV0dXJuIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID49IEhldXJpc3RpY3M6Omxpa2Vs
eVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBi
b29sIGxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHNsb3dDYXNlQ291bnQgPSByYXJlQ2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPm1fY291bnRlcjsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHNwZWNpYWxGYXN0Q2FzZUNvdW50ID0gc3BlY2lhbEZhc3RDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+bV9jb3VudGVyOwotICAgICAgICAg
ICAgcmV0dXJuIChzbG93Q2FzZUNvdW50IC0gc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IHNsb3dD
YXNlVGhyZXNob2xkKCk7CisgICAgICAgICAgICByZXR1cm4gKHNsb3dDYXNlQ291bnQgLSBzcGVj
aWFsRmFzdENhc2VDb3VudCkgPj0gSGV1cmlzdGljczo6bGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJl
c2hvbGQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGJvb2wgbGlrZWx5VG9UYWtlQW55
U2xvd0Nhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBzbG93Q2FzZUNvdW50ID0gcmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpLT5tX2NvdW50ZXI7CiAgICAgICAgICAgICB1bnNpZ25lZCBzcGVjaWFsRmFz
dENhc2VDb3VudCA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPm1fY291bnRlcjsKLSAgICAgICAgICAgIHJldHVybiAoc2xvd0Nhc2VDb3Vu
dCArIHNwZWNpYWxGYXN0Q2FzZUNvdW50KSA+PSBzbG93Q2FzZVRocmVzaG9sZCgpOworICAgICAg
ICAgICAgcmV0dXJuIChzbG93Q2FzZUNvdW50ICsgc3BlY2lhbEZhc3RDYXNlQ291bnQpID49IEhl
dXJpc3RpY3M6Omxpa2VseVRvVGFrZVNsb3dDYXNlVGhyZXNob2xkOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIHJlc2V0UmFyZUNhc2VQcm9maWxlcygpOwpAQCAtOTQ1LDkgKzk1
OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0
YTsKIAogICAgICAgICBWZWN0b3I8SW5zdHJ1Y3Rpb24+IG1faW5zdHJ1Y3Rpb25zOwotI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgdW5zaWduZWQgbV9pbnN0cnVjdGlvbkNvdW50OwotI2VuZGlmCiAK
ICAgICAgICAgaW50IG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBpbnQgbV9hcmd1bWVudHNSZWdp
c3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw5IEBACiAjaWZuZGVmIENvZGVP
cmlnaW5faAogI2RlZmluZSBDb2RlT3JpZ2luX2gKIAorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NiwxNCArNTgsMjggQEAgc3RydWN0IENvZGVPcmln
aW4gewogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNv
ZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICAK
KyAgICAvLyBUaGUgaW5saW5lIGRlcHRoIGlzIHRoZSBkZXB0aCBvZiB0aGUgaW5saW5lIHN0YWNr
LCBzbyAxID0gbm90IGlubGluZWQsCisgICAgLy8gMiA9IGlubGluZWQgb25lIGRlZXAsIGV0Yy4K
KyAgICB1bnNpZ25lZCBpbmxpbmVEZXB0aCgpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyB1bnNp
Z25lZCBpbmxpbmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqKTsKKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OworICAgIAor
I2lmbmRlZiBOREVCVUcKKyAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBzbG93
LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorICAgIFZlY3RvcjxDb2RlT3Jp
Z2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgSW5saW5lQ2Fs
bEZyYW1lIHsKLSAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZTsKKyAgICBXcml0ZUJhcnJp
ZXI8RXhlY3V0YWJsZUJhc2U+IGV4ZWN1dGFibGU7CiAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQ7
CiAgICAgdW5zaWduZWQgY2FsbGVlVlI7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7Ci0gICAgdW5z
aWduZWQgbnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpczsKKyAgICB1bnNpZ25lZCBudW1Bcmd1bWVu
dHNJbmNsdWRpbmdUaGlzIDogMzE7CisgICAgYm9vbCBpc0NhbGwgOiAxOwogfTsKIAogc3RydWN0
IENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQgewpAQCAtNzEsNiArODcsMzggQEAgc3RydWN0
IENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQgewogICAgIHVuc2lnbmVkIGNhbGxSZXR1cm5P
ZmZzZXQ7CiB9OwogCitpbmxpbmUgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JD
YWxsRnJhbWUoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCit7CisgICAgdW5zaWdu
ZWQgcmVzdWx0ID0gMTsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGlu
ZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgIHJlc3VsdCsrOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSB1bnNpZ25lZCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGlubGluZURlcHRoRm9yQ2FsbEZyYW1lKGlubGluZUNhbGxGcmFtZSk7Cit9CisgICAgCitpbmxp
bmUgYm9vbCBDb2RlT3JpZ2luOjpvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBieXRlY29kZUluZGV4ID09IG90aGVyLmJ5dGVjb2RlSW5kZXgK
KyAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lID09IG90aGVyLmlubGluZUNhbGxGcmFtZTsKK30K
KyAgICAKKyNpZm5kZWYgTkRFQlVHCisvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhpcyBpcyBz
bG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgoraW5saW5lIFZlY3RvcjxD
b2RlT3JpZ2luPiBDb2RlT3JpZ2luOjppbmxpbmVTdGFjaygpIGNvbnN0Cit7CisgICAgVmVjdG9y
PENvZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0aCgpKTsKKyAgICByZXN1bHQubGFzdCgpID0g
KnRoaXM7CisgICAgdW5zaWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKKyAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJlc3VsdFtp
bmRleC0tXSA9IGN1cnJlbnQtPmNhbGxlcjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlm
CisKIGlubGluZSB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbihDb2Rl
T3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0KiBkYXRhKQogewogICAgIHJldHVybiBkYXRhLT5jYWxs
UmV0dXJuT2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NCw5ICsxNDQsOSBAQCBKU09iamVjdCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKCkKIAogICAgIG1fc2NvcGVOb2RlLT5lbWl0Qnl0ZWNvZGUoKnRoaXMp
OwogCi0jaWZuZGVmIE5ERUJVRwogICAgIG1fY29kZUJsb2NrLT5zZXRJbnN0cnVjdGlvbkNvdW50
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogCisjaWZuZGVmIE5ERUJVRwog
ICAgIGlmIChzX2R1bXBzR2VuZXJhdGVkQ29kZSkKICAgICAgICAgbV9jb2RlQmxvY2stPmR1bXAo
bV9zY29wZUNoYWluLT5nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSk7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMCBAQCB2b2lkIEFic3RyYWN0U3Rh
dGU6OmJlZ2luQmFzaWNCbG9jayhCYXNpCiAgICAgCiAgICAgQVNTRVJUKCFtX2Jsb2NrKTsKICAg
ICAKKyAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIEFT
U0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNp
Y0Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgQVNTRVJUKGJhc2lj
QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJhc2ljQmxvY2stPmVuZCAtIGJhc2ljQmxvY2stPmJlZ2luOyArK2kpCiAgICAg
ICAgIG1fbm9kZXNbaV0uY2xlYXIoKTsKICAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZh
bHVlc0F0SGVhZDsKQEAgLTYyOSw2ICs2MzMsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUoTm9kZUluZGV4IG5vCiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBQ
aGk6CisgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBj
YXNlIEJyZWFrcG9pbnQ6CkBAIC02ODMsNiArNjg4LDcgQEAgaW5saW5lIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6bWVyZ2VTdGF0ZUF0VAogICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgIGNhc2UgUGhp
OgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgY2FzZSBGbHVzaDoKICAgICAgICAgLy8gVGhl
IGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUgZnJvbSBoZWFkIHRvIHRhaWwuCiAgICAgICAgIHNv
dXJjZSA9ICZpblZhcmlhYmxlOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MiArNDYsMjQgQEAgc3RydWN0IEJhc2ljQmxvY2sgewogICAgICAgICAsIGlzT1NSVGFyZ2V0KGZh
bHNlKQogICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCiAgICAgICAgICwgY2ZhU2hvdWxk
UmV2aXNpdChmYWxzZSkKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgaXNMaW5rZWQo
ZmFsc2UpCisjZW5kaWYKKyAgICAgICAgLCBpc1JlYWNoYWJsZShmYWxzZSkKICAgICAgICAgLCB2
YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgICAgICwgdmFyaWFi
bGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQogICAgICAgICAsIHZhbHVlc0F0SGVh
ZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKICAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJn
dW1lbnRzLCBudW1Mb2NhbHMpCiAgICAgewogICAgIH0KKyAgICAKKyAgICB2b2lkIGVuc3VyZUxv
Y2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisgICAgeworICAgICAgICB2YXJpYWJsZXNBdEhl
YWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgIHZhcmlhYmxlc0F0VGFpbC5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKKyAgICAgICAgdmFsdWVzQXRIZWFkLmVuc3VyZUxv
Y2FscyhuZXdOdW1Mb2NhbHMpOworICAgICAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5l
d051bUxvY2Fscyk7CisgICAgfQogCiAgICAgLy8gVGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFs
bHkgZm9yIGJsb2NrIGxpbmtpbmcgYW5kIE9TUiBlbnRyeS4gSXQgaXMgbW9zdGx5IG1lYW5pbmds
ZXNzCiAgICAgLy8gZm9yIG90aGVyIHB1cnBvc2VzIGR1ZSB0byBpbmxpbmluZy4KQEAgLTYyLDYg
Kzc0LDEwIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICBib29sIGlzT1NSVGFyZ2V0OwogICAg
IGJvb2wgY2ZhSGFzVmlzaXRlZDsKICAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIGJvb2wgaXNMaW5rZWQ7CisjZW5kaWYKKyAgICBib29sIGlzUmVh
Y2hhYmxlOwogICAgIAogICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKICAgICAK
QEAgLTcyLDYgKzg4LDIxIEBAIHN0cnVjdCBCYXNpY0Jsb2NrIHsKICAgICBPcGVyYW5kczxBYnN0
cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7CiB9OwogCitzdHJ1Y3QgVW5saW5rZWRCbG9jayB7Cisg
ICAgQmxvY2tJbmRleCBtX2Jsb2NrSW5kZXg7CisgICAgYm9vbCBtX25lZWRzTm9ybWFsTGlua2lu
ZzsKKyAgICBib29sIG1fbmVlZHNFYXJseVJldHVybkxpbmtpbmc7CisgICAgCisgICAgVW5saW5r
ZWRCbG9jaygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IFVubGlua2VkQmxvY2soQmxvY2tJbmRl
eCBibG9ja0luZGV4KQorICAgICAgICA6IG1fYmxvY2tJbmRleChibG9ja0luZGV4KQorICAgICAg
ICAsIG1fbmVlZHNOb3JtYWxMaW5raW5nKHRydWUpCisgICAgICAgICwgbV9uZWVkc0Vhcmx5UmV0
dXJuTGlua2luZyhmYWxzZSkKKyAgICB7CisgICAgfQorfTsKKyAgICAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk4
MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fY29k
ZUJsb2NrKGNvZGVCbG9jaykKICAgICAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJvZmlsZWRCbG9j
aykKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fY3VycmVudEJsb2NrKDAp
CiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKICAgICAgICAgLCBtX3BhcnNlRmFpbGVkKGZh
bHNlKQogICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgpCkBAIC03NywxNSAr
NzgsMTkgQEAgcHJpdmF0ZToKICAgICAvLyBIZWxwZXIgZm9yIG1pbiBhbmQgbWF4LgogICAgIGJv
b2wgaGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVU
eXBlIG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKTsKICAgICAKLSAgICAvLyBIYW5kbGUg
aW50cmluc2ljIGZ1bmN0aW9ucy4KKyAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVl
IGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCisgICAg
Ym9vbCBoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIGludCBjYWxsVGFyZ2V0LCBOb2Rl
SW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJlc3VsdE9wZXJhbmQsIGJvb2wgY2VydGFp
bkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlvbiosIGludCBmaXJzdEFyZywgaW50IGxh
c3RBcmcsIHVuc2lnbmVkIG5leHRPZmZzZXQpOworICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVu
Y3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8g
cGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwg
aW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywg
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICAvLyBQYXJzZSBhIHNpbmdsZSBiYXNpYyBi
bG9jayBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCiAgICAgYm9vbCBwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KTsKLSAgICAvLyBTZXR1cCBwcmVkZWNlc3NvciBsaW5rcyBpbiB0aGUgZ3JhcGgn
cyBCYXNpY0Jsb2Nrcy4KLSAgICB2b2lkIHNldHVwUHJlZGVjZXNzb3JzKCk7CisgICAgLy8gRmlu
ZCByZWFjaGFibGUgY29kZSBhbmQgc2V0dXAgcHJlZGVjZXNzb3IgbGlua3MgaW4gdGhlIGdyYXBo
J3MgQmFzaWNCbG9ja3MuCisgICAgdm9pZCBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKKyAgICAv
LyBFbnF1ZXVlIGEgYmxvY2sgb250byB0aGUgd29ya2xpc3QsIGlmIG5lY2Vzc2FyeS4KKyAgICB2
b2lkIGhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2tJbmRleCwgMTY+JiB3b3JrbGlzdCwgQmxv
Y2tJbmRleCwgQmxvY2tJbmRleCBzdWNjZXNzb3IpOwogICAgIC8vIExpbmsgYmxvY2sgc3VjY2Vz
c29ycy4KICAgICB2b2lkIGxpbmtCbG9jayhCYXNpY0Jsb2NrKiwgVmVjdG9yPEJsb2NrSW5kZXg+
JiBwb3NzaWJsZVRhcmdldHMpOwotICAgIHZvaWQgbGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJbmRl
eD4mIHVubGlua2VkQmxvY2tzKTsKKyAgICB2b2lkIGxpbmtCbG9ja3MoVmVjdG9yPFVubGlua2Vk
QmxvY2s+JiB1bmxpbmtlZEJsb2NrcywgVmVjdG9yPEJsb2NrSW5kZXg+JiBwb3NzaWJsZVRhcmdl
dHMpOwogICAgIC8vIExpbmsgR2V0TG9jYWwgJiBTZXRMb2NhbCBub2RlcywgdG8gZW5zdXJlIGxp
dmUgdmFsdWVzIGFyZSBnZW5lcmF0ZWQuCiAgICAgZW51bSBQaGlTdGFja1R5cGUgewogICAgICAg
ICBMb2NhbFBoaVN0YWNrLApAQCAtMTA1LDEwICsxMTAsOCBAQCBwcml2YXRlOgogICAgIH0KICAg
ICAKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0
cnVjdGlvbi4KLSAgICBOb2RlSW5kZXggZ2V0KGludCBvcGVyYW5kKQorICAgIE5vZGVJbmRleCBn
ZXREaXJlY3QoaW50IG9wZXJhbmQpCiAgICAgewotICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAKICAgICAgICAgLy8gSXMg
dGhpcyBhIGNvbnN0YW50PwogICAgICAgICBpZiAob3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCkgewogICAgICAgICAgICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVyYW5kIC0g
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CkBAIC0xMjMsMTAgKzEyNiwxMiBAQCBwcml2YXRl
OgogICAgICAgICAvLyBNdXN0IGJlIGEgbG9jYWwuCiAgICAgICAgIHJldHVybiBnZXRMb2NhbCgo
dW5zaWduZWQpb3BlcmFuZCk7CiAgICAgfQotICAgIHZvaWQgc2V0KGludCBvcGVyYW5kLCBOb2Rl
SW5kZXggdmFsdWUpCisgICAgTm9kZUluZGV4IGdldChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJh
bmQpKTsKKyAgICB9CisgICAgdm9pZCBzZXREaXJlY3QoaW50IG9wZXJhbmQsIE5vZGVJbmRleCB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIG9wZXJhbmQgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50
PwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKICAgICAgICAgICAg
IHNldEFyZ3VtZW50KG9wZXJhbmQsIHZhbHVlKTsKQEAgLTEzNiwxOCArMTQxLDM1IEBAIHByaXZh
dGU6CiAgICAgICAgIC8vIE11c3QgYmUgYSBsb2NhbC4KICAgICAgICAgc2V0TG9jYWwoKHVuc2ln
bmVkKW9wZXJhbmQsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXQoaW50IG9wZXJhbmQsIE5v
ZGVJbmRleCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9w
LT5yZW1hcE9wZXJhbmQob3BlcmFuZCksIHZhbHVlKTsKKyAgICB9CiAKICAgICAvLyBVc2VkIGlu
IGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBsb2Nh
bCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCkKICAg
ICB7CiAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkgewotICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldExvY2FsKQorICAgICAgICAgICAg
Tm9kZSogbm9kZVB0ciA9ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9k
ZVB0ci0+b3AgPT0gRmx1c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGll
czogZWl0aGVyIHRoZSBibG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAg
ICAgICAgIC8vIGJ1dCBoYXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQg
aXRzIHZhbHVlLCBpbgorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4K
KyAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGls
ZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
Zmx1c2hDaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
IG5vZGVQdHItPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbm9kZVB0ciA9ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG5vZGVQdHItPm9wID09IEdldExvY2FsKQogICAgICAgICAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7Ci0gICAgICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbm9kZS5jaGlsZDEoKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlUHRyLT5v
cCA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Y2hpbGQxKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBDaGVjayBmb3IgcmVhZHMgb2YgdGVtcG9yYXJpZXMgZnJv
bSBwcmlvciBibG9ja3MsCkBAIC0xNzksMjEgKzIwMSwzNCBAQCBwcml2YXRlOgogICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKLSAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Ci0gICAgICAgICAgICBp
ZiAobm9kZS5vcCA9PSBTZXRBcmd1bWVudCkgeworICAgICAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gRmx1
c2gpIHsKKyAgICAgICAgICAgICAgICAvLyBUd28gcG9zc2liaWxpdGllczogZWl0aGVyIHRoZSBi
bG9jayB3YW50cyB0aGUgbG9jYWwgdG8gYmUgbGl2ZQorICAgICAgICAgICAgICAgIC8vIGJ1dCBo
YXMgbm90IGxvYWRlZCBpdHMgdmFsdWUsIG9yIGl0IGhhcyBsb2FkZWQgaXRzIHZhbHVlLCBpbgor
ICAgICAgICAgICAgICAgIC8vIHdoaWNoIGNhc2Ugd2UncmUgZG9uZS4KKyAgICAgICAgICAgICAg
ICBOb2RlJiBmbHVzaENoaWxkID0gbV9ncmFwaFtub2RlUHRyLT5jaGlsZDEoKV07CisgICAgICAg
ICAgICAgICAgaWYgKGZsdXNoQ2hpbGQub3AgPT0gUGhpKSB7CisgICAgICAgICAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gZmx1c2hDaGlsZC52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIG5vZGVQdHItPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9kZVB0ciA9
ICZmbHVzaENoaWxkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9w
ID09IFNldEFyZ3VtZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UncmUgZ2V0dGluZyBhbiBh
cmd1bWVudCBpbiB0aGUgZmlyc3QgYmFzaWMgYmxvY2s7IGxpbmsKICAgICAgICAgICAgICAgICAv
LyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgotICAgICAgICAgICAgICAgIEFTU0VS
VChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7
Ci0gICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOworICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlUHRyLT5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4o
b3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9j
YWwsIE9wSW5mbyhub2RlUHRyLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChh
cmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0g
R2V0TG9jYWwpCisgICAgICAgICAgICBpZiAobm9kZVB0ci0+b3AgPT0gR2V0TG9jYWwpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QVNTRVJUKG5vZGUub3AgPT0gU2V0TG9jYWwpOwotICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hp
bGQxKCk7CisgICAgICAgICAgICBBU1NFUlQobm9kZVB0ci0+b3AgPT0gU2V0TG9jYWwpOworICAg
ICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmNoaWxkMSgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1Zhcmlh
YmxlQWNjZXNzRGF0YShvcGVyYW5kKTsKQEAgLTIxNCw2ICsyNDksNTEgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50
KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCkpLCB2YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2goaW50IG9wZXJhbmQp
CisgICAgeworICAgICAgICBvcGVyYW5kID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG9wZXJhbmQgPCBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
OworICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVy
YW5kKSkgeworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAg
ICAgIG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
aW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5kZXggPSBvcGVyYW5kOwor
ICAgICAgICAgICAgbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChpbmRleCk7CisgICAgICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG9wZXJhbmQpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewor
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAg
IGlmIChub2RlLm9wID09IEZsdXNoIHx8IG5vZGUub3AgPT0gU2V0QXJndW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICAvLyBJZiBhIGxvY2FsIGhhcyBhbHJlYWR5IGJlZW4gZmx1c2hlZCwgb3IgaWYg
aXQncyBhbiBhcmd1bWVudCBpbiB0aGUKKyAgICAgICAgICAgICAgICAvLyBmaXJzdCBiYXNpYyBi
bG9jaywgdGhlbiB0aGVyZSBpcyByZWFsbHkgbm8gbmVlZCB0byBmbHVzaCBpdC4gSW4gZmFjdAor
ICAgICAgICAgICAgICAgIC8vIGVtaXR0aW5nIGEgRmx1c2ggaW5zdHJ1Y3Rpb24gY291bGQganVz
dCBjb25mdXNlIHRoaW5ncywgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgLy8gZ2V0QXJndW1l
bnQoKSBjb2RlIGFzc3VtZXMgdGhhdCB3ZSBuZXZlciBzZWUgYSBGbHVzaCBvZiBhIFNldEFyZ3Vt
ZW50LgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICBhZGRUb0dyYXBoKEZsdXNoLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSksIG5vZGVJbmRleCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOworICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKKyAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChGbHVzaCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7
CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAg
bV9hcmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBw
aGksIGluZGV4KSk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KGluZGV4KSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoaW5kZXgsIG5vZGVJbmRleCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBo
aVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgaW5kZXgpKTsKKyAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwoaW5kZXgpID0gbm9kZUluZGV4Owor
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0
VGltZShpbmRleCwgbm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8vIEdldCBh
biBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBp
dC4KICAgICBOb2RlSW5kZXggZ2V0VG9JbnQzMihpbnQgb3BlcmFuZCkKQEAgLTY2Myw4ICs3NDMs
NiBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9hcmd1bWVudFBo
aVN0YWNrOwogICAgIFZlY3RvcjxQaGlTdGFja0VudHJ5LCAxNj4gbV9sb2NhbFBoaVN0YWNrOwog
ICAgIAotICAgIFZlY3RvcjxOb2RlKiwgMTY+IG1fcmV1c2FibGVOb2RlU3RhY2s7Ci0gICAgCiAg
ICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAgICAgICBCeXRlQ29kZVBhcnNlciogbV9i
eXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC02ODMsOCArNzYxLDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICAvLyBCbG9ja3MgaW50cm9kdWNlZCBieSB0aGlzIGNvZGUgYmxvY2ss
IHdoaWNoIG5lZWQgc3VjY2Vzc29yIGxpbmtpbmcuCiAgICAgICAgIC8vIE1heSBpbmNsdWRlIHVw
IHRvIG9uZSBiYXNpYyBibG9jayB0aGF0IGluY2x1ZGVzIHRoZSBjb250aW51YXRpb24gYWZ0ZXIK
LSAgICAgICAgLy8gdGhlIGNhbGxzaXRlIGluIHRoZSBjYWxsZXIuCi0gICAgICAgIFZlY3RvcjxC
bG9ja0luZGV4PiBtX3VubGlua2VkQmxvY2tzOworICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW4g
dGhlIGNhbGxlci4gVGhlc2UgbXVzdCBiZSBhcHBlbmRlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5
CisgICAgICAgIC8vIGFyZSBjcmVhdGVkLCBidXQgdGhlaXIgYnl0ZWNvZGVCZWdpbiB2YWx1ZXMg
bmVlZCBub3QgYmUgaW4gb3JkZXIgYXMgdGhleQorICAgICAgICAvLyBhcmUgaWdub3JlZC4KKyAg
ICAgICAgVmVjdG9yPFVubGlua2VkQmxvY2s+IG1fdW5saW5rZWRCbG9ja3M7CisgICAgICAgIAor
ICAgICAgICAvLyBQb3RlbnRpYWwgYmxvY2sgbGlua2luZyB0YXJnZXRzLiBNdXN0IGJlIHNvcnRl
ZCBieSBieXRlY29kZUJlZ2luLCBhbmQKKyAgICAgICAgLy8gY2Fubm90IGhhdmUgdHdvIGJsb2Nr
cyB0aGF0IGhhdmUgdGhlIHNhbWUgYnl0ZWNvZGVCZWdpbi4gRm9yIHRoaXMgdmVyeQorICAgICAg
ICAvLyByZWFzb24sIHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gCisgICAgICAgIFZlY3RvcjxC
bG9ja0luZGV4PiBtX2Jsb2NrTGlua2luZ1RhcmdldHM7CiAgICAgICAgIAogICAgICAgICAvLyBJ
ZiB0aGUgY2FsbHNpdGUncyBiYXNpYyBibG9jayB3YXMgc3BsaXQgaW50byB0d28sIHRoZW4gdGhp
cyB3aWxsIGJlCiAgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBjYWxsc2l0ZSBibG9jay4gSXQg
bmVlZHMgaXRzIHN1Y2Nlc3NvcnMgbGlua2VkIHRvIHRoZQpAQCAtNjkyLDIyICs3NzcsNDAgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gYW55IGJsb2NrcyBpbiBtX3VubGlua2VkQmxvY2tzIHRvIGp1
bXAgYmFjayBpbnRvIHRoaXMgYmxvY2suCiAgICAgICAgIEJsb2NrSW5kZXggbV9jYWxsc2l0ZUJs
b2NrSGVhZDsKICAgICAgICAgCi0gICAgICAgIElubGluZVN0YWNrRW50cnkqIG1fY2FsbGVlOwor
ICAgICAgICAvLyBEb2VzIHRoZSBjYWxsc2l0ZSBibG9jayBoZWFkIG5lZWQgbGlua2luZz8gVGhp
cyBpcyB0eXBpY2FsbHkgdHJ1ZQorICAgICAgICAvLyBidXQgd2lsbCBiZSBmYWxzZSBmb3IgdGhl
IG1hY2hpbmUgY29kZSBibG9jaydzIGlubGluZSBzdGFjayBlbnRyeQorICAgICAgICAvLyAoc2lu
Y2UgdGhhdCBvbmUgaXMgbm90IGlubGluZWQpIGFuZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW5saW5l
IGNhbGxlZQorICAgICAgICAvLyBkaWQgdGhlIGxpbmtpbmcgZm9yIHVzLgorICAgICAgICBib29s
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmc7CiAgICAgICAgIAotICAgICAgICBJbmxp
bmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIg
Y2FsbGVlVlIpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9yZXR1cm5WYWx1ZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIERpZCB3ZSBzZWUgYW55IHJldHVybnM/IFdlIG5lZWQgdG8gaGFuZGxl
IHRoZSAodW5jb21tb24gYnV0IG5lY2Vzc2FyeSkKKyAgICAgICAgLy8gY2FzZSB3aGVyZSBhIHBy
b2NlZHVyZSB0aGF0IGRvZXMgbm90IHJldHVybiB3YXMgaW5saW5lZC4KKyAgICAgICAgYm9vbCBt
X2RpZFJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIERpZCB3ZSBoYXZlIGFueSBlYXJseSBy
ZXR1cm5zPworICAgICAgICBib29sIG1fZGlkRWFybHlSZXR1cm47CisgICAgICAgIAorICAgICAg
ICBJbmxpbmVTdGFja0VudHJ5KiBtX2NhbGxlcjsKKyAgICAgICAgCisgICAgICAgIElubGluZVN0
YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIEJsb2NrSW5kZXggY2FsbHNpdGVCbG9ja0hlYWQsIFZpcnR1YWxSZWdpc3RlciBjYWxs
ZWVWUiwgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsIFZpcnR1YWxSZWdpc3RlciBpbmxp
bmVDYWxsRnJhbWVTdGFydCk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tU
b3AgPSBtX2NhbGxlZTsKKyAgICAgICAgICAgIG1fYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3Rh
Y2tUb3AgPSBtX2NhbGxlcjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFw
T3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICAgICAgaW50IHJlbWFwT3BlcmFuZChpbnQgb3BlcmFu
ZCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKG9wZXJhbmQgPj0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kIC0gRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXhdICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CisgICAgICAgICAgICBpZiAo
b3BlcmFuZCA+PSBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkgeworICAgICAgICAgICAgICAg
IGludCByZXN1bHQgPSBtX2NvbnN0YW50UmVtYXBbb3BlcmFuZCAtIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4XTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID49IEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZCArIG1faW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICAgICAgfQpAQCAtNzU2LDYgKzg1OSwxODMg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2Vz
UmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGlu
dCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVu
Y3Rpb24qIGV4cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2ln
bmVkIG5leHRPZmZzZXQpCit7CisgICAgLy8gRmlyc3QsIHRoZSByZWFsbHkgc2ltcGxlIGNoZWNr
czogZG8gd2UgaGF2ZSBhbiBhY3R1YWwgSlMgZnVuY3Rpb24/CisgICAgaWYgKCFleHBlY3RlZEZ1
bmN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24t
PmlzSG9zdEZ1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBleHBlY3RlZEZ1bmN0aW9uLT5qc0V4ZWN1dGFi
bGUoKTsKKyAgICAKKyAgICAvLyBEb2VzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHdlJ3JlIHBh
c3NpbmcgbWF0Y2ggdGhlIGFyaXR5IG9mIHRoZSB0YXJnZXQ/IFdlIGNvdWxkCisgICAgLy8gaW5s
aW5lIGFyaXR5IGNoZWNrIGZhaWx1cmVzLCBidXQgZm9yIHNpbXBsaWNpdHkgd2UgY3VycmVudGx5
IGRvbid0LgorICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFtZXRlckNv
dW50KCkpICsgMSAhPSBsYXN0QXJnIC0gZmlyc3RBcmcgKyAxKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxpbmUgc3RhY2sgZGVwdGgsIG9y
IGFyZSB3ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNhbGw/CisgICAgLy8gSWYgZWl0
aGVyIG9mIHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBpbmxpbmUuCisgICAgdW5zaWdu
ZWQgZGVwdGggPSAwOworICAgIGZvciAoSW5saW5lU3RhY2tFbnRyeSogZW50cnkgPSBtX2lubGlu
ZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxsZXIpIHsKKyAgICAgICAgKytk
ZXB0aDsKKyAgICAgICAgaWYgKGRlcHRoID49IEhldXJpc3RpY3M6Om1heGltdW1JbmxpbmluZ0Rl
cHRoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBEZXB0aCBleGNlZWRlZC4KKyAgICAg
ICAgCisgICAgICAgIGlmIChlbnRyeS0+ZXhlY3V0YWJsZSgpID09IGV4ZWN1dGFibGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlY3Vyc2lvbiBkZXRlY3RlZC4KKyAgICB9CisgICAg
CisgICAgLy8gRG9lcyB0aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3RpY3Mv
cmVxdWlyZW1lbnRzIGZvciBiZWluZworICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/CisgICAg
Q29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZUZvckNhbGwpOworICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwocHJv
ZmlsZWRCbG9jaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSB0aGVuIGl0IGxvb2tzIGxpa2Ugd2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5saW5lIHRo
aXMgY29kZS4gUHJvY2VlZAorICAgIC8vIHdpdGggcGFyc2luZyB0aGUgY29kZSB0byBnZXQgYnl0
ZWNvZGUsIHNvIHRoYXQgd2UgY2FuIHRoZW4gcGFyc2UgdGhlIGJ5dGVjb2RlLgorICAgIC8vIE5v
dGUgdGhhdCB0aGUgY29kZSBibG9jayB3ZSBnZXQgaGVyZSBpcyBpbnRlbmRlZCB0byBkaWUgYWZ0
ZXIgaGFuZGxlSW5saW5pbmcoKQorICAgIC8vIHJldHVybnMuCisgICAgSlNPYmplY3QqIGV4Y2Vw
dGlvbjsKKyAgICBPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5wcm9k
dWNlQ29kZUJsb2NrRm9yKGV4cGVjdGVkRnVuY3Rpb24tPnNjb3BlKCksIE9wdGltaXppbmdDb21w
aWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoIWV4Y2VwdGlvbik7CisgICAgCisgICAg
Ly8gTm93IHRoYXQgd2UgaGF2ZSB0aGUgYnl0ZWNvZGUsIGNoZWNrIGlmIHdlIHJlYWxseSBjYW4g
aW5saW5lIGl0LiBUaGlzIG1heSBmYWlsCisgICAgLy8gaWYgdGhlIGNvZGUgYmxvY2sgY29udGFp
bnMgc29tZSBuYXN0eSBvcGNvZGVzLgorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxs
KGNvZGVCbG9jay5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIERGR19FTkFC
TEUoREVCVUdfVkVSQk9TRSkKKyAgICBwcmludGYoIklubGluaW5nIGV4ZWN1dGFibGUgJXAuXG4i
LCBleGVjdXRhYmxlKTsKKyNlbmRpZgorICAgIAorICAgIC8vIE5vdyB3ZSBrbm93IHdpdGhvdXQg
YSBkb3VidCB0aGF0IHdlIGFyZSBjb21taXR0ZWQgdG8gaW5saW5pbmcuIFNvIGJlZ2luIHRoZSBw
cm9jZXNzCisgICAgLy8gYnkgY2hlY2tpbmcgdGhlIGNhbGxlZSAoaWYgbmVjZXNzYXJ5KSBhbmQg
bWFraW5nIHN1cmUgdGhhdCBhcmd1bWVudHMgYW5kIHRoZSBjYWxsZWUKKyAgICAvLyBhcmUgZmx1
c2hlZC4KKyAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFy
Z2V0Tm9kZUluZGV4KTsKKyAgICAKKyAgICBmbHVzaChjYWxsVGFyZ2V0KTsKKyAgICBmb3IgKGlu
dCBhcmcgPSBmaXJzdEFyZyArIDE7IGFyZyA8PSBsYXN0QXJnOyArK2FyZykKKyAgICAgICAgZmx1
c2goYXJnKTsKKyAgICAKKyAgICBpbnQgaW5saW5lQ2FsbEZyYW1lU3RhcnQgPSBtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQobGFzdEFyZykgKyAxOworICAgIAorICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IHRoZSBhcmVhIHVzZWQgYnkgdGhlIGNhbGwgZnJhbWUgaXMgcmVzZXJ2ZWQuCisgICAg
Zm9yIChpbnQgYXJnID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUgKyBjb2RlQmxvY2stPm1fbnVtVmFyczsgYXJnLS0gPiBpbmxpbmVDYWxs
RnJhbWVTdGFydCArIDE7KQorICAgICAgICBtX3ByZXNlcnZlZFZhcnMuc2V0KG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChhcmcpKTsKKyAgICAKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB3
ZSBoYXZlIGVub3VnaCBsb2NhbHMuCisgICAgdW5zaWduZWQgbmV3TnVtTG9jYWxzID0gaW5saW5l
Q2FsbEZyYW1lU3RhcnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBjb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOworICAgIGlmIChuZXdOdW1Mb2NhbHMgPiBtX251
bUxvY2FscykgeworICAgICAgICBtX251bUxvY2FscyA9IG5ld051bUxvY2FsczsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tpXS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
CisgICAgfQorCisgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMsIGNv
ZGVCbG9jay5nZXQoKSwgcHJvZmlsZWRCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAx
LCAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChjYWxsVGFy
Z2V0KSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQodXNl
c1Jlc3VsdCA/IHJlc3VsdE9wZXJhbmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwgKFZpcnR1
YWxSZWdpc3RlcilpbmxpbmVDYWxsRnJhbWVTdGFydCk7CisgICAgCisgICAgLy8gVGhpcyBpcyB3
aGVyZSB0aGUgYWN0dWFsIGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgorICAgIHVuc2lnbmVkIG9s
ZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CisgICAgbV9jdXJyZW50SW5kZXggPSAwOworICAgIHBh
cnNlQ29kZUJsb2NrKCk7CisgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKKyAgICAKKyAg
ICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0
aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KKyAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2Nh
bGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSkgeworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKCFpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MuaXNF
bXB0eSgpKTsKKyAgICAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVh
ZE5lZWRzTGlua2luZykKKyAgICAgICAgICAgIGxpbmtCbG9jayhtX2dyYXBoLm1fYmxvY2tzW2lu
bGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZF0uZ2V0KCksIGlubGluZVN0YWNrRW50
cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNT
RVJUKG1fZ3JhcGgubV9ibG9ja3NbaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFk
XS0+aXNMaW5rZWQpOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
ZSBjYWxsc2l0ZSBibG9jayBoZWFkIGlzIG5vdCBvd25lZCBieSB0aGUgY2FsbGVyLgorICAgICAg
ICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9jYWxsZXItPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAvLyBJdCdzIGRlZmluaXRlbHkgb3duZWQgYnkgdGhlIGNhbGxl
ciwgYmVjYXVzZSB0aGUgY2FsbGVyIGNyZWF0ZWQgbmV3IGJsb2Nrcy4KKyAgICAgICAgICAgIC8v
IEFzc2VydCB0aGF0IHRoaXMgYWxsIGFkZHMgdXAuCisgICAgICAgICAgICBBU1NFUlQoaW5saW5l
U3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4
ID09IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgICAgICBB
U1NFUlQoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCku
bV9uZWVkc05vcm1hbExpbmtpbmcpOworICAgICAgICAgICAgaW5saW5lU3RhY2tFbnRyeS5tX2Nh
bGxlci0+bV91bmxpbmtlZEJsb2Nrcy5sYXN0KCkubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxz
ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEl0J3MgZGVmaW5pdGVseSBub3Qg
b3duZWQgYnkgdGhlIGNhbGxlci4gVGVsbCB0aGUgY2FsbGVyIHRoYXQgaGUgZG9lcyBub3QKKyAg
ICAgICAgICAgIC8vIG5lZWQgdG8gbGluayBoaXMgY2FsbHNpdGUgYmxvY2sgaGVhZCwgYmVjYXVz
ZSB3ZSBkaWQgaXQgZm9yIGhpbS4KKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5
Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nKTsKKyAgICAgICAgICAg
IEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkID09
IGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCk7CisgICAgICAgICAgICBpbmxp
bmVTdGFja0VudHJ5Lm1fY2FsbGVyLT5tX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxpbmtCbG9ja3MoaW5saW5lU3Rh
Y2tFbnRyeS5tX3VubGlua2VkQmxvY2tzLCBpbmxpbmVTdGFja0VudHJ5Lm1fYmxvY2tMaW5raW5n
VGFyZ2V0cyk7CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVChpbmxpbmVTdGFja0VudHJ5Lm1f
dW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBJZiB0aGVyZSB3YXMgYSBy
ZXR1cm4sIGJ1dCBubyBlYXJseSByZXR1cm5zLCB0aGVuIHdlJ3JlIGRvbmUuIFdlIGFsbG93IHBh
cnNpbmcgb2YKKyAgICAvLyB0aGUgY2FsbGVyIHRvIGNvbnRpbnVlIGluIHdoYXRldmVyIGJhc2lj
IGJsb2NrIHdlJ3JlIGluIHJpZ2h0IG5vdy4KKyAgICBpZiAoIWlubGluZVN0YWNrRW50cnkubV9k
aWRFYXJseVJldHVybiAmJiBpbmxpbmVTdGFja0VudHJ5Lm1fZGlkUmV0dXJuKSB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGxhc3RCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3MubGFzdCgpLmdldCgpOwor
ICAgICAgICBBU1NFUlQobGFzdEJsb2NrLT5iZWdpbiA9PSBsYXN0QmxvY2stPmVuZCB8fCAhbV9n
cmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIGNy
ZWF0ZWQgbmV3IGJsb2NrcyB0aGVuIHRoZSBsYXN0IGJsb2NrIG5lZWRzIGxpbmtpbmcsIGJ1dCBp
biB0aGUKKyAgICAgICAgLy8gY2FsbGVyLiBJdCBkb2Vzbid0IG5lZWQgdG8gYmUgbGlua2VkIHRv
LCBidXQgaXQgbmVlZHMgb3V0Z29pbmcgbGlua3MuCisgICAgICAgIGlmICghaW5saW5lU3RhY2tF
bnRyeS5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgeworI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50ZigiUmVhc2NyaWJpbmcgYnl0ZWNvZGUgaW5kZXgg
b2YgYmxvY2sgJXAgZnJvbSBiYyMldSB0byBiYyMldSAoaW5saW5lIHJldHVybiBjYXNlKS5cbiIs
IGxhc3RCbG9jaywgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luLCBtX2N1cnJlbnRJbmRleCk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHNldCB0aGUgYnl0
ZWNvZGVCZWdpbi4gTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBtYXR0ZXIKKyAgICAgICAgICAgIC8v
IGZvciByZWxlYXNlIGJ1aWxkcyBiZWNhdXNlIHRoaXMgYmxvY2sgd2lsbCBuZXZlciBzZXJ2ZSBh
cyBhIHBvdGVudGlhbCB0YXJnZXQKKyAgICAgICAgICAgIC8vIGluIHRoZSBsaW5rZXIncyBiaW5h
cnkgc2VhcmNoLgorICAgICAgICAgICAgbGFzdEJsb2NrLT5ieXRlY29kZUJlZ2luID0gbV9jdXJy
ZW50SW5kZXg7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV91bmxp
bmtlZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAt
IDEpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzLmxhc3QoKS5nZXQoKTsKKworI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVp
bmcgY29kZSBnZW5lcmF0aW9uIGF0IGVwaWxvZ3VlLlxuIiwgZXhlY3V0YWJsZSk7CisjZW5kaWYK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCB0byB0
aGlzIHBvaW50IHRoZW4gYWxsIGJsb2NrcyBtdXN0IGVuZCBpbiBzb21lIHNvcnQgb2YgdGVybWlu
YWxzLgorICAgIEFTU0VSVChtX2dyYXBoLmxhc3QoKS5pc1Rlcm1pbmFsKCkpOworICAgIAorICAg
IC8vIExpbmsgdGhlIGVhcmx5IHJldHVybnMgdG8gdGhlIGJhc2ljIGJsb2NrIHdlJ3JlIGFib3V0
IHRvIGNyZWF0ZS4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlubGluZVN0YWNrRW50cnku
bV91bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWlubGluZVN0YWNr
RW50cnkubV91bmxpbmtlZEJsb2Nrc1tpXS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9ibG9ja0luZGV4
XS5nZXQoKTsKKyAgICAgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOworICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CisgICAgICAgIEFTU0VSVChub2RlLm9w
ID09IEp1bXApOworICAgICAgICBBU1NFUlQobm9kZS50YWtlbkJsb2NrSW5kZXgoKSA9PSBOb0Js
b2NrKTsKKyAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCkpOworICAgICAgICBpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3NbaV0ubV9u
ZWVkc0Vhcmx5UmV0dXJuTGlua2luZyA9IGZhbHNlOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICAv
LyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBiYXNpYyBibG9jayBmb3IgdGhlIGNvbnRpbnVhdGlvbiBh
dCB0aGUgY2FsbGVyLgorICAgIE93blB0cjxCYXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UHRyKG5l
dyBCYXNpY0Jsb2NrKG5leHRPZmZzZXQsIG1fZ3JhcGguc2l6ZSgpLCBtX251bUFyZ3VtZW50cywg
bV9udW1Mb2NhbHMpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgcHJpbnRm
KCJDcmVhdGluZyBpbmxpbmUgZXBpbG9ndWUgYmFzaWMgYmxvY2sgJXAsICMlbHUgZm9yICVwIGJj
IyV1IGF0IGlubGluZSBkZXB0aCAldS5cbiIsIGJsb2NrLmdldCgpLCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSwgbV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpLCBtX2N1cnJlbnRJbmRleCwg
Q29kZU9yaWdpbjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUobV9pbmxpbmVTdGFja1RvcC0+bV9p
bmxpbmVDYWxsRnJhbWUpKTsKKyNlbmRpZgorICAgIG1fY3VycmVudEJsb2NrID0gYmxvY2suZ2V0
KCk7CisgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbGVyLT5tX2Jsb2NrTGlua2lu
Z1RhcmdldHMuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+
bV9jYWxsZXItPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCldLT5ieXRlY29kZUJlZ2luIDwg
bmV4dE9mZnNldCk7CisgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jYWxsZXItPm1fdW5saW5rZWRC
bG9ja3MuYXBwZW5kKFVubGlua2VkQmxvY2sobV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkpKTsKKyAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlci0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLmFwcGVu
ZChtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQo
YmxvY2sucmVsZWFzZSgpKTsKKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHJldHVybiBh
bmQgY29udGludWUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIGNhbGxlciwgYnV0CisgICAgLy8g
aW4gdGhlIG5ldyBiYXNpYyBibG9jay4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisg
ICAgcHJpbnRmKCJEb25lIGlubGluaW5nIGV4ZWN1dGFibGUgJXAsIGNvbnRpbnVpbmcgY29kZSBn
ZW5lcmF0aW9uIGluIG5ldyBibG9jay5cbiIsIGV4ZWN1dGFibGUpOworI2VuZGlmCisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29s
IHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQg
Zmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAg
c3dpdGNoIChpbnRyaW5zaWMpIHsKQEAgLTg1Myw3ICsxMTMzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFz
aWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAg
ICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0
dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUg
d2Ugc2V0IGV4cGxpY2l0bHkuCi0gICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGgubV9i
bG9ja3NbMF0uZ2V0KCkpIHsKKyAgICBpZiAobV9jdXJyZW50QmxvY2sgPT0gbV9ncmFwaC5tX2Js
b2Nrc1swXS5nZXQoKSAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpIHsK
ICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50cy5yZXNpemUobV9udW1Bcmd1bWVudHMpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFyZ3VtZW50
czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50ID0gYWRk
VG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShhcmd1bWVu
dCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemUpKSk7CkBAIC04NjksNyArMTE0OSwyMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgLy8gRG9u
J3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJ
bmRleCA9PSBsaW1pdCkgewotICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9j
dXJyZW50SW5kZXgpKTsKKyAgICAgICAgICAgIC8vIE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFu
dCBhIGp1bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhpcyBpZiB0aGUgYmxvY2sgaXMKKyAgICAgICAg
ICAgIC8vIGVtcHR5LiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBpbmxpbmluZywgd2hpY2gg
bWlnaHQgb3RoZXJ3aXNlIGNyZWF0ZQorICAgICAgICAgICAgLy8gc29tZSBlbXB0eSBibG9ja3Mg
aW4gc29tZSBjYXNlcy4gV2hlbiBwYXJzZUJsb2NrKCkgcmV0dXJucyB3aXRoIGFuIGVtcHR5Cisg
ICAgICAgICAgICAvLyBibG9jaywgaXQgd2lsbCBnZXQgcmVwdXJwb3NlZCBpbnN0ZWFkIG9mIGNy
ZWF0aW5nIGEgbmV3IG9uZS4gTm90ZSB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8vIGxvZ2ljIHJl
bGllcyBvbiBldmVyeSBieXRlY29kZSByZXN1bHRpbmcgaW4gb25lIG9yIG1vcmUgbm9kZXMsIHdo
aWNoIHdvdWxkCisgICAgICAgICAgICAvLyBiZSB0cnVlIGFueXdheSBleGNlcHQgZm9yIG9wX2xv
b3BfaGludCwgd2hpY2ggZW1pdHMgYSBQaGFudG9tIHRvIGZvcmNlIHRoaXMKKyAgICAgICAgICAg
IC8vIHRvIGJlIHRydWUuCisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPmJlZ2luICE9
IG1fZ3JhcGguc2l6ZSgpKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZv
KG1fY3VycmVudEluZGV4KSk7CisgICAgICAgICAgICBlbHNlIHsKKyNpZiBERkdfRU5BQkxFKERF
QlVHX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWZ1c2luZyB0byBwbGFudCBq
dW1wIGF0IGxpbWl0ICV1IGJlY2F1c2UgYmxvY2sgJXAgaXMgZW1wdHkuXG4iLCBsaW1pdCwgbV9j
dXJyZW50QmxvY2spOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
IW1fcGFyc2VGYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC04ODgsNyArMTE4MSwxMCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9jb252ZXJ0X3RoaXM6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCBvcDEgPSBnZXRUaGlz
KCk7Ci0gICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3JhcGgoQ29udmVydFRoaXMsIG9wMSkpOwor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhbb3AxXS5vcCA9PSBDb252ZXJ0VGhpcykKKyAgICAgICAg
ICAgICAgICBzZXRUaGlzKG9wMSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c2V0VGhpcyhhZGRUb0dyYXBoKENvbnZlcnRUaGlzLCBvcDEpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NvbnZlcnRfdGhpcyk7CiAgICAgICAgIH0KIApAQCAtMTYyMSwxMCArMTkxNywy
OSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIG9wX3JldDoKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9w
LT5tX2lubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNr
VG9wLT5tX3JldHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1f
aW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIElmIGlubGluaW5nIGNyZWF0ZWQgYmxvY2tzLCBhbmQgd2UncmUgZG9pbmcg
YSByZXR1cm4sIHRoZW4gd2UgbmVlZCBzb21lCisgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNp
YWwgbGlua2luZy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3At
Pm1fdW5saW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Vu
bGlua2VkQmxvY2tzLmxhc3QoKS5tX25lZWRzTm9ybWFsTGlua2luZyA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggKyBPUENPREVf
TEVOR1RIKG9wX3JldCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2RpZEVhcmx5UmV0dXJuKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfcmV0KSA8PSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8oTm9C
bG9jaykpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmxhc3QoKS5tX25lZWRzRWFybHlSZXR1cm5MaW5raW5nID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRFYXJseVJldHVybiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFJldHVybiwgZ2V0KGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3Jl
dCk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9lbmQ6CisgICAgICAgICAgICBBU1NF
UlQoIW1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUmV0dXJuLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwog
ICAgICAgICAgICAgTEFTVF9PUENPREUob3BfZW5kKTsKIApAQCAtMTY0MCw5ICsxOTU1LDEzIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5v
ZGVJbmRleCBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwogICAgICAgICAgICAgZW51bSB7IENvbnN0YW50RnVuY3Rpb24sIExpbmtlZEZ1bmN0aW9uLCBV
bmtub3duRnVuY3Rpb24gfSBjYWxsVHlwZTsKICAgICAgICAgICAgIAorI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBj
YWxsIGF0IEAlbHUgYmMjJXU6ICV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5
dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRpZgorICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIGNhbGxUYXJnZXQpKQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRG
dW5jdGlvbjsKLSAgICAgICAgICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVl
ICYmICFtX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4
KSkKKyAgICAgICAgICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3Vy
cmVudEluZGV4KSkKICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0aW9uOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gVW5rbm93bkZ1bmN0
aW9uOwpAQCAtMTY1NSwyNSArMTk3NCwzOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KICAg
ICAgICAgICAgICAgICBib29sIHVzZXNSZXN1bHQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBp
bnQgcmVzdWx0T3BlcmFuZCA9IDA7IC8vIG1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RI
KG9wX2NhbGwpOwogICAgICAgICAgICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9
IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7CiAgICAgICAgICAg
ICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gUHJlZGljdE5vbmU7CiAgICAgICAgICAg
ICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNv
ZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICByZXN1bHRP
cGVyYW5kID0gcHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgICAgICAg
ICB1c2VzUmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdU
SChvcF9jYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0
aW9uKG1fZ3JhcGguc2l6ZSgpLCBuZXh0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV4
dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CiAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb247CiAg
ICAgICAgICAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotICAgICAgICAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDb25zdGFudEZ1bmN0aW9uKQotICAgICAgICAgICAgICAgICAgICBp
bnRyaW5zaWMgPSBtX2dyYXBoLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBj
YWxsVGFyZ2V0KS0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWMoKTsKLSAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb247
CisgICAgICAgICAgICAgICAgaWYgKGNhbGxUeXBlID09IENvbnN0YW50RnVuY3Rpb24pIHsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9IG1fZ3JhcGgudmFsdWVPZkZ1bmN0
aW9uQ29uc3RhbnQobV9jb2RlQmxvY2ssIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAg
ICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygp
OworICAgICAgICAgICAgICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gTGlua2VkRnVuY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0Q2Fs
bExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaW50cmluc2ljID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2lj
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhm
dW5jdGlvbiksIGNhbGxUYXJnZXQpOworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZEZ1bmN0
aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8o
bV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpYygp
OworICAgICAgICAgICAgICAgICAgICBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmIChoYW5kbGVJbnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2lj
LCBmaXJzdEFyZywgbGFzdEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2Vy
dGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24pLCBjYWxsVGFyZ2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVJ
bnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywg
bGFzdEFyZywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRf
T1BDT0RFKCkgaGFzIHRvIGJlIGluc2lkZSBicmFjZXMuCisgICAgICAgICAgICAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9jYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2VydGFpbkFi
b3V0RXhwZWN0ZWRGdW5jdGlvbiwgZXhwZWN0ZWRGdW5jdGlvbiwgZmlyc3RBcmcsIGxhc3RBcmcs
IG5leHRPZmZzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5FWFRfT1BDT0RFKCkgaGFz
IHRvIGJlIGluc2lkZSBicmFjZXMuCiAgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2NhbGwpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3MzIsNyArMjA2NCwxNSBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBhcmUgY29t
cGF0aWJsZS4KICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYmxvY2tCZWdpbiwgbV9jdXJyZW50
SW5kZXggPT0gYmxvY2tCZWdpbik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5pc09TUlRhcmdldCA9IHRydWU7CisgICAgICAgICAgICAvLyBXZSBuZXZlciBkbyBP
U1IgaW50byBhbiBpbmxpbmVkIGNvZGUgYmxvY2suIFRoYXQgY291bGQgbm90IGhhcHBlbiwgc2lu
Y2UgT1NSCisgICAgICAgICAgICAvLyBsb29rcyB1cCB0aGUgY29kZSBibG9jayB0aGF0IGlzIHRo
ZSByZXBsYWNlbWVudCBmb3IgdGhlIGJhc2VsaW5lIEpJVCBjb2RlCisgICAgICAgICAgICAvLyBi
bG9jay4gSGVuY2UsIG1hY2hpbmUgY29kZSBibG9jayA9IHRydWUgY29kZSBibG9jayA9IG5vdCBp
bmxpbmUgY29kZSBibG9jay4KKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9j
YWxsZXIpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmlzT1NSVGFyZ2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRW1pdCBhIHBoYW50b20gbm9kZSB0byBl
bnN1cmUgdGhhdCB0aGVyZSBpcyBhIHBsYWNlaG9sZGVyIG5vZGUgZm9yIHRoaXMgYnl0ZWNvZGUK
KyAgICAgICAgICAgIC8vIG9wLgorICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbG9vcF9oaW50KTsKICAgICAg
ICAgfQpAQCAtMTc4NCw3ICsyMTI0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1Bo
aVN0YWNrKCkKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVj
ZXNzb3IgPSBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0uY2hpbGQxKCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBBU1NFUlQobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09
IFNldExvY2FsIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBQaGkgfHwgKG1f
Z3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBTZXRBcmd1bWVudCAmJiBzdGFja1R5cGUg
PT0gQXJndW1lbnRQaGlTdGFjaykpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbdmFsdWVJ
blByZWRlY2Vzc29yXS5vcCA9PSBTZXRMb2NhbCB8fCBtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gUGhpIHx8IG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9PSBGbHVzaCB8
fCAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IFNldEFyZ3VtZW50ICYmIHN0YWNr
VHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogZGF0YUZvclByZWRlY2Vzc29yID0gbV9ncmFwaFt2YWx1ZUluUHJl
ZGVjZXNzb3JdLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgCkBAIC0xODI4LDQz
ICsyMTY4LDgwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2soQmFzaWNCbG9jayogYmxvY2ssIFZlY3RvcjxCbG9j
a0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQogewogICAgIEFTU0VSVChibG9jay0+ZW5kICE9IE5v
Tm9kZSk7CisgICAgQVNTRVJUKCFibG9jay0+aXNMaW5rZWQpOworICAgIEFTU0VSVChibG9jay0+
ZW5kID4gYmxvY2stPmJlZ2luKTsKICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5k
IC0gMV07CiAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKICAgICAKICAgICBzd2l0Y2gg
KG5vZGUub3ApIHsKICAgICBjYXNlIEp1bXA6CiAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KHBvc3NpYmxlVGFyZ2V0cywg
bm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisjaWYgREZHX0VOQUJM
RShERUJVR19WRVJCT1NFKQorICAgICAgICBwcmludGYoIkxpbmtlZCBiYXNpYyBibG9jayAlcCB0
byAlcCwgIyV1LlxuIiwgYmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCksIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworI2VuZGlmCiAgICAgICAgIGJy
ZWFrOwogICAgICAgICAKICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgbm9kZS5zZXRUYWtlbkJs
b2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQocG9zc2libGVUYXJn
ZXRzLCBub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKICAgICAgICAg
bm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQocG9zc2libGVUYXJnZXRzLCBub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQ
YXJzaW5nKCkpKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiTGlua2VkIGJhc2ljIGJsb2NrICVwIHRvICVwLCAjJXUgYW5kICVwLCAjJXUuXG4iLCBibG9j
aywgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSwgbm9kZS50
YWtlbkJsb2NrSW5kZXgoKSwgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpXS5nZXQoKSwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CisjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQorICAgICAgICBwcmludGYoIk1hcmtpbmcgYmFzaWMgYmxvY2sgJXAgYXMgbGlua2VkLlxu
IiwgYmxvY2spOworI2VuZGlmCiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICAKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgYmxvY2stPmlzTGlua2VkID0gdHJ1ZTsKKyNlbmRpZgorfQorCit2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpsaW5rQmxvY2tzKFZlY3RvcjxVbmxpbmtlZEJsb2NrPiYgdW5s
aW5rZWRCbG9ja3MsIFZlY3RvcjxCbG9ja0luZGV4PiYgcG9zc2libGVUYXJnZXRzKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdW5saW5rZWRCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKHVubGlua2VkQmxvY2tzW2ldLm1fbmVlZHNOb3JtYWxMaW5raW5nKSB7CisgICAg
ICAgICAgICBsaW5rQmxvY2sobV9ncmFwaC5tX2Jsb2Nrc1t1bmxpbmtlZEJsb2Nrc1tpXS5tX2Js
b2NrSW5kZXhdLmdldCgpLCBwb3NzaWJsZVRhcmdldHMpOworICAgICAgICAgICAgdW5saW5rZWRC
bG9ja3NbaV0ubV9uZWVkc05vcm1hbExpbmtpbmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
IH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6bGlua0Jsb2NrcyhWZWN0b3I8QmxvY2tJbmRleD4m
IHVubGlua2VkQmxvY2tzKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlU3VjY2Vzc29yKFZl
Y3RvcjxCbG9ja0luZGV4LCAxNj4mIHdvcmtsaXN0LCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIEJs
b2NrSW5kZXggc3VjY2Vzc29ySW5kZXgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1
bmxpbmtlZEJsb2Nrcy5zaXplKCk7ICsraSkKLSAgICAgICAgbGlua0Jsb2NrKG1fZ3JhcGgubV9i
bG9ja3NbdW5saW5rZWRCbG9ja3NbaV1dLmdldCgpLCB1bmxpbmtlZEJsb2Nrcyk7CisgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yID0gbV9ncmFwaC5tX2Jsb2Nrc1tzdWNjZXNzb3JJbmRleF0uZ2V0
KCk7CisgICAgaWYgKCFzdWNjZXNzb3ItPmlzUmVhY2hhYmxlKSB7CisgICAgICAgIHN1Y2Nlc3Nv
ci0+aXNSZWFjaGFibGUgPSB0cnVlOworICAgICAgICB3b3JrbGlzdC5hcHBlbmQoc3VjY2Vzc29y
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNzb3JzLmFwcGVu
ZChibG9ja0luZGV4KTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3Nv
cnMoKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKLSAg
ICBmb3IgKEJsb2NrSW5kZXggaW5kZXggPSAwOyBpbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpOyArK2luZGV4KSB7CisgICAgVmVjdG9yPEJsb2NrSW5kZXgsIDE2PiB3b3JrbGlzdDsKKyAg
ICB3b3JrbGlzdC5hcHBlbmQoMCk7CisgICAgbV9ncmFwaC5tX2Jsb2Nrc1swXS0+aXNSZWFjaGFi
bGUgPSB0cnVlOworICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIEJs
b2NrSW5kZXggaW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7CisgICAgICAgIHdvcmtsaXN0LnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgCiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5t
X2Jsb2Nrc1tpbmRleF0uZ2V0KCk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+ZW5kICE9IE5vTm9k
ZSk7CisgICAgICAgIEFTU0VSVChibG9jay0+aXNMaW5rZWQpOworICAgICAgICAKICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NFUlQobm9k
ZS5pc1Rlcm1pbmFsKCkpOwotCisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkK
LSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1f
cHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3Io
d29ya2xpc3QsIGluZGV4LCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgZWxzZSBp
ZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUu
dGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAg
ICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVk
ZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nvcih3b3Jr
bGlzdCwgaW5kZXgsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOworICAgICAgICAgICAgaGFuZGxl
U3VjY2Vzc29yKHdvcmtsaXN0LCBpbmRleCwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xODc3LDMwICsyMjU0LDM1IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Y29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgbV9pZGVudGlm
aWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3Rl
cnMoKTsgKytpKQotICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2Nv
ZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkp
OworICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZShtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSksIGkgKyBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9
IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBieXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVh
ZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxlZVZSKQorQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4
IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdp
c3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQp
CiAgICAgOiBtX2J5dGVDb2RlUGFyc2VyKGJ5dGVDb2RlUGFyc2VyKQogICAgICwgbV9jb2RlQmxv
Y2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKHByb2ZpbGVkQmxvY2spCiAgICAg
LCBtX2NhbGxzaXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxvY2tIZWFkKQotICAgICwgbV9jYWxsZWUo
Ynl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3ApCisgICAgLCBtX3JldHVyblZhbHVlKHJl
dHVyblZhbHVlVlIpCisgICAgLCBtX2RpZFJldHVybihmYWxzZSkKKyAgICAsIG1fZGlkRWFybHlS
ZXR1cm4oZmFsc2UpCisgICAgLCBtX2NhbGxlcihieXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFj
a1RvcCkKIHsKLSAgICBpZiAobV9jYWxsZWUpIHsKKyAgICBpZiAobV9jYWxsZXIpIHsKICAgICAg
ICAgLy8gSW5saW5lIGNhc2UuCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2sgIT0gYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrKTsKICAgICAgICAgQVNTRVJUKGNhbGxlZVZSICE9IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVh
ZCAhPSBOb0Jsb2NrKTsKICAgICAgICAgCiAgICAgICAgIElubGluZUNhbGxGcmFtZSBpbmxpbmVD
YWxsRnJhbWU7Ci0gICAgICAgIGlubGluZUNhbGxGcmFtZS5leGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNrT2Zmc2V0
ID0gbV9jYWxsZWUtPm1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsKKyAgICAgICAg
aW5saW5lQ2FsbEZyYW1lLmV4ZWN1dGFibGUuc2V0KCpieXRlQ29kZVBhcnNlci0+bV9nbG9iYWxE
YXRhLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgaW5saW5lQ2FsbEZyYW1lLnN0YWNr
T2Zmc2V0ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZWVWUiA9IGNhbGxlZVZSOwog
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUuY2FsbGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRD
b2RlT3JpZ2luKCk7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5udW1Bcmd1bWVudHNJbmNsdWRp
bmdUaGlzID0gY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnM7CisgICAgICAgIGlubGluZUNhbGxG
cmFtZS5pc0NhbGwgPSB0cnVlOwogICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2st
PmlubGluZUNhbGxGcmFtZXMoKS5hcHBlbmQoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgbV9p
bmxpbmVDYWxsRnJhbWUgPSAmYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pbmxpbmVDYWxs
RnJhbWVzKCkubGFzdCgpOwogICAgICAgICAKQEAgLTE5MTgsMTUgKzIzMDAsMjEgQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICB9CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCk7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIHBhaXI8
SlNWYWx1ZU1hcDo6aXRlcmF0b3IsIGJvb2w+IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2pz
VmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIGNvZGVCbG9jay0+bnVtYmVyT2ZD
b25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAg
ICAgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICBwYWlyPEpTVmFsdWVNYXA6Oml0
ZXJhdG9yLCBib29sPiByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChK
U1ZhbHVlOjplbmNvZGUodmFsdWUpLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQuc2Vjb25kKSB7CiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQ
YXJzZXItPm1fY29kZUJsb2NrLT5hZGRDb25zdGFudCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
Ynl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5maXJz
dC0+c2Vjb25kOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2NhbGxzaXRlQmxvY2tI
ZWFkTmVlZHNMaW5raW5nID0gdHJ1ZTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBNYWNoaW5l
IGNvZGUgYmxvY2sgY2FzZS4KICAgICAgICAgQVNTRVJUKGNvZGVCbG9jayA9PSBieXRlQ29kZVBh
cnNlci0+bV9jb2RlQmxvY2spOwogICAgICAgICBBU1NFUlQoY2FsbGVlVlIgPT0gSW52YWxpZFZp
cnR1YWxSZWdpc3Rlcik7CisgICAgICAgIEFTU0VSVChyZXR1cm5WYWx1ZVZSID09IEludmFsaWRW
aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lU3RhcnQgPT0g
SW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CiAgICAgICAgIEFTU0VSVChjYWxsc2l0ZUJsb2NrSGVh
ZCA9PSBOb0Jsb2NrKTsKIAogICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IDA7CkBAIC0xOTM3
LDkgKzIzMjUsMTQgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IGk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCk7ICsraSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IGk7CisgICAg
ICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXg7CisKKyAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOwog
ICAgIH0KICAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZW1hcC5z
aXplKCk7ICsraSkKKyAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRSZW1hcFtpXSA+PSBGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCk7CisgICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5l
U3RhY2tUb3AgPSB0aGlzOwogfQogCkBAIC0xOTUwLDIxICsyMzQzLDU3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKICAgICBmb3IgKHVuc2lnbmVkIGp1bXBUYXJnZXRJ
bmRleCA9IDA7IGp1bXBUYXJnZXRJbmRleCA8PSBjb2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdl
dHMoKTsgKytqdW1wVGFyZ2V0SW5kZXgpIHsKICAgICAgICAgLy8gVGhlIG1heGltdW0gYnl0ZWNv
ZGUgb2Zmc2V0IHRvIGdvIGludG8gdGhlIGN1cnJlbnQgYmFzaWNibG9jayBpcyBlaXRoZXIgdGhl
IG5leHQganVtcCB0YXJnZXQsIG9yIHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucy4KICAgICAg
ICAgdW5zaWduZWQgbGltaXQgPSBqdW1wVGFyZ2V0SW5kZXggPCBjb2RlQmxvY2stPm51bWJlck9m
SnVtcFRhcmdldHMoKSA/IGNvZGVCbG9jay0+anVtcFRhcmdldChqdW1wVGFyZ2V0SW5kZXgpIDog
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCk7CisjaWYgREZHX0VOQUJMRShERUJVR19W
RVJCT1NFKQorICAgICAgICBwcmludGYoIlBhcnNpbmcgYnl0ZWNvZGUgd2l0aCBsaW1pdCAlcCBi
YyMldSBhdCBpbmxpbmUgZGVwdGggJXUuXG4iLCBtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxl
KCksIGxpbWl0LCBDb2RlT3JpZ2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkpOworI2VuZGlmCiAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRJbmRleCA8IGxpbWl0KTsKIAogICAgICAgICAvLyBMb29wIHVudGlsIHdlIHJlYWNoIHRo
ZSBjdXJyZW50IGxpbWl0IChpLmUuIG5leHQganVtcCB0YXJnZXQpLgogICAgICAgICBkbyB7Ci0g
ICAgICAgICAgICBPd25QdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFB0cihuZXcgQmFzaWNC
bG9jayhtX2N1cnJlbnRJbmRleCwgbV9ncmFwaC5zaXplKCksIG1fbnVtQXJndW1lbnRzLCBtX251
bUxvY2FscykpOwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKLSAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9ja3MuYXBwZW5kKG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpKTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3MuYXBwZW5k
KGJsb2NrLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgY2FuIHVzZSB0aGUgbGFzdCBibG9jay4KKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGgubV9ibG9ja3MuaXNFbXB0eSgpICYmIG1fZ3JhcGgu
bV9ibG9ja3MubGFzdCgpLT5iZWdpbiA9PSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS0+ZW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbXVzdCBiZSBhIGJsb2NrIGJlbG9uZ2luZyB0
byB1cy4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5s
aW5rZWRCbG9ja3MubGFzdCgpLm1fYmxvY2tJbmRleCA9PSBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEpOworICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgdGhlIGJsb2NrIGlzIGxpbmth
YmxlIG9yIGl0IGlzbid0LiBJZiBpdCdzIGxpbmthYmxlIHRoZW4gaXQncyB0aGUgbGFzdAorICAg
ICAgICAgICAgICAgICAgICAvLyBibG9jayBpbiB0aGUgYmxvY2tMaW5raW5nVGFyZ2V0cyBsaXN0
LiBJZiBpdCdzIG5vdCB0aGVuIHRoZSBsYXN0IGJsb2NrIHdpbGwKKyAgICAgICAgICAgICAgICAg
ICAgLy8gaGF2ZSBhIGxvd2VyIGJ5dGVjb2RlIGluZGV4IHRoYXQgdGhlIG9uZSB3ZSdyZSBhYm91
dCB0byBnaXZlIHRvIHRoaXMgYmxvY2suCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2lubGlu
ZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1RhcmdldHMuaXNFbXB0eSgpIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5sYXN0KCkgIT0gbV9jdXJyZW50SW5kZXgpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgdGhlIGJsb2NrIGxpbmthYmxlLgorICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5r
aW5nVGFyZ2V0cy5pc0VtcHR5KCkgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9ibG9ja0xpbmtpbmdU
YXJnZXRzLmxhc3QoKSA8IG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBlbmQobV9ncmFwaC5t
X2Jsb2Nrcy5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAvLyBDaGFuZ2UgaXRzIGJ5dGVjb2RlIGJlZ2luIGFuZCBjb250aW51ZS4KKyAgICAg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzLmxhc3QoKS5n
ZXQoKTsKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAg
IHByaW50ZigiUmVhc2NyaWJpbmcgYnl0ZWNvZGUgaW5kZXggb2YgYmxvY2sgJXAgZnJvbSBiYyMl
dSB0byBiYyMldSAocGVlcGhvbGUgY2FzZSkuXG4iLCBtX2N1cnJlbnRCbG9jaywgbV9jdXJyZW50
QmxvY2stPmJ5dGVjb2RlQmVnaW4sIG1fY3VycmVudEluZGV4KTsKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+Ynl0ZWNvZGVCZWdpbiA9IG1fY3VycmVudEluZGV4
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIE93blB0cjxC
YXNpY0Jsb2NrPiBibG9jayA9IGFkb3B0UHRyKG5ldyBCYXNpY0Jsb2NrKG1fY3VycmVudEluZGV4
LCBtX2dyYXBoLnNpemUoKSwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzKSk7CisjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkNyZWF0
aW5nIGJhc2ljIGJsb2NrICVwLCAjJWx1IGZvciAlcCBiYyMldSBhdCBpbmxpbmUgZGVwdGggJXUu
XG4iLCBibG9jay5nZXQoKSwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCksIG1faW5saW5lU3RhY2tU
b3AtPmV4ZWN1dGFibGUoKSwgbV9jdXJyZW50SW5kZXgsIENvZGVPcmlnaW46OmlubGluZURlcHRo
Rm9yQ2FsbEZyYW1lKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lKSk7CisjZW5k
aWYKKyAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBibG9jay5nZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fdW5saW5rZWRCbG9j
a3MuaXNFbXB0eSgpIHx8IG1fZ3JhcGgubV9ibG9ja3NbbV9pbmxpbmVTdGFja1RvcC0+bV91bmxp
bmtlZEJsb2Nrcy5sYXN0KCkubV9ibG9ja0luZGV4XS0+Ynl0ZWNvZGVCZWdpbiA8IG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtl
ZEJsb2Nrcy5hcHBlbmQoVW5saW5rZWRCbG9jayhtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMuYXBwZW5kKG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX2Jsb2Nrcy5hcHBlbmQoYmxvY2sucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghcGFyc2VCbG9jayhsaW1pdCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgLy8gV2Ugc2hvdWxk
IG5vdCBoYXZlIGdvbmUgYmV5b25kIHRoZSBsaW1pdC4KICAgICAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRJbmRleCA8PSBsaW1pdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHNo
b3VsZCBoYXZlIHBsYW50ZWQgYSB0ZXJtaW5hbCwgb3Igd2UganVzdCBnYXZlIHVwIGJlY2F1c2UK
KyAgICAgICAgICAgIC8vIHdlIHJlYWxpemVkIHRoYXQgdGhlIGp1bXAgdGFyZ2V0IGluZm9ybWF0
aW9uIGlzIGltcHJlY2lzZSwgb3Igd2UKKyAgICAgICAgICAgIC8vIGFyZSBhdCB0aGUgZW5kIG9m
IGFuIGlubGluZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+
YmVnaW4gPT0gbV9ncmFwaC5zaXplKCkgfHwgbV9ncmFwaC5sYXN0KCkuaXNUZXJtaW5hbCgpIHx8
IChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAmJiBt
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSkpOwogCiAgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+ZW5kID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jayA9IDA7CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudEluZGV4IDwgbGltaXQpOwogICAg
IH0KIApAQCAtMTk3OSwxMiArMjQwOCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgp
CiAgICAgLy8gU2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRJ
bmRleCk7CiAgICAgCi0gICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KHRoaXMs
IG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ssIE5vQmxvY2ssIEludmFsaWRWaXJ0dWFsUmVn
aXN0ZXIpOworICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlzLCBtX2Nv
ZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2NrLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
LCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKICAgICAK
ICAgICBwYXJzZUNvZGVCbG9jaygpOwogCi0gICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5
Lm1fdW5saW5rZWRCbG9ja3MpOwotICAgIHNldHVwUHJlZGVjZXNzb3JzKCk7CisgICAgbGlua0Js
b2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnku
bV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsKKyAgICBkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAg
ICBwcm9jZXNzUGhpU3RhY2s8TG9jYWxQaGlTdGFjaz4oKTsKICAgICBwcm9jZXNzUGhpU3RhY2s8
QXJndW1lbnRQaGlTdGFjaz4oKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCi1ib29sIGNhbkNvbXBpbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2Nr
KQordGVtcGxhdGU8Ym9vbCAoKmNhbkhhbmRsZU9wY29kZSkoT3Bjb2RlSUQpPgorYm9vbCBjYW5I
YW5kbGVPcGNvZGVzKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+Z2xvYmFsRGF0YSgpLT5pbnRlcnByZXRlcjsKICAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCk7CkBAIC00Myw3ICs0NCw3IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJs
b2NrKiBjb2RlQmwKICAgICAgICAgc3dpdGNoIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5z
dHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgewogI2RlZmluZSBERUZJ
TkVfT1Aob3Bjb2RlLCBsZW5ndGgpICAgICAgICAgICBcCiAgICAgICAgIGNhc2Ugb3Bjb2RlOiAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmICghY2FuQ29tcGlsZU9wY29k
ZShvcGNvZGUpKSAgXAorICAgICAgICAgICAgaWYgKCFjYW5IYW5kbGVPcGNvZGUob3Bjb2RlKSkg
IFwKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0gbGVuZ3RoOyAgICAgICBcCiAgICAgICAgICAgICBicmVh
azsKQEAgLTU4LDYgKzU5LDE2IEBAIGJvb2wgY2FuQ29tcGlsZU9wY29kZXMoQ29kZUJsb2NrKiBj
b2RlQmwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBjYW5Db21waWxlT3Bjb2RlcyhDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY2FuSGFuZGxlT3Bjb2RlczxjYW5Db21w
aWxlT3Bjb2RlPihjb2RlQmxvY2spOworfQorCitib29sIGNhbklubGluZU9wY29kZXMoQ29kZUJs
b2NrKiBjb2RlQmxvY2spCit7CisgICAgcmV0dXJuIGNhbkhhbmRsZU9wY29kZXM8Y2FuSW5saW5l
T3Bjb2RlPihjb2RlQmxvY2spOworfQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5o
CShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIwICsyNiw0MiBAQAogI2lmbmRlZiBERkdD
YXBhYmlsaXRpZXNfaAogI2RlZmluZSBERkdDYXBhYmlsaXRpZXNfaAogCisjaW5jbHVkZSAiREZH
SW50cmluc2ljLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3Mu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgog
Ci0jaW5jbHVkZSAiREZHTm9kZS5oIgotCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIC8vIEZhc3QgY2hlY2sgZnVuY3Rpb25zOyBpZiB0aGV5
IHJldHVybiB0cnVlIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0bwogLy8gY2hlY2sgb3Bjb2Rlcy4K
LWlubGluZSBib29sIG1pZ2h0Q29tcGlsZUV2YWwoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsg
fQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlUHJvZ3JhbShDb2RlQmxvY2sqKSB7IHJldHVybiB0
cnVlOyB9Ci1pbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2Nr
KikgeyByZXR1cm4gdHJ1ZTsgfQotaW5saW5lIGJvb2wgbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JD
b25zdHJ1Y3QoQ29kZUJsb2NrKikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgbWlnaHRD
b21waWxlRXZhbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUV2YWxPcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxl
UHJvZ3JhbShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bVByb2dyYW1PcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OworfQoraW5saW5lIGJvb2wgbWlnaHRDb21waWxl
RnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIHJldHVybiBjb2Rl
QmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0aWNzOjptYXhpbXVtRnVuY3Rpb25G
b3JDYWxsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK30KK2lubGluZSBi
b29sIG1pZ2h0Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIHJldHVybiBjb2RlQmxvY2stPmluc3RydWN0aW9uQ291bnQoKSA8PSBIZXVyaXN0
aWNzOjptYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OworfQorCitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2Fs
bChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVj
dGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7Cit9CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQogCiAv
LyBPcGNvZGUgY2hlY2tpbmcuCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlT3Bjb2RlKE9wY29kZUlE
IG9wY29kZUlEKQpAQCAtMTQ2LDE0ICsxNjgsNDUgQEAgaW5saW5lIGJvb2wgY2FuQ29tcGlsZU9w
Y29kZShPcGNvZGVJRCBvcAogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgY2FuSW5saW5lT3Bjb2Rl
KE9wY29kZUlEIG9wY29kZUlEKQoreworICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
CisgICAgLy8gVGhlc2Ugb3Bjb2RlcyB3b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQgd2l0aCBpbmxp
bmluZywgYnV0IHdlIGN1cnJlbnRseSBkb24ndCBkbyBpdC4KKyAgICAvLyBUaGUgaXNzdWUgaXMg
dGhhdCB0aGUgc2NvcGUgY2hhaW4gd2lsbCBub3QgYmUgc2V0IGNvcnJlY3RseS4KKyAgICBjYXNl
IG9wX2dldF9zY29wZWRfdmFyOgorICAgIGNhc2Ugb3BfcHV0X3Njb3BlZF92YXI6CisgICAgY2Fz
ZSBvcF9yZXNvbHZlOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgorICAgIGNhc2Ugb3BfcmVz
b2x2ZV9nbG9iYWw6CisgICAgICAgIAorICAgIC8vIFRyaXZpYWwgdG8gc3VwcG9ydCB3aXRoIHRo
ZSBjb3B5IHByb3BhZ2F0aW9uIG1hY2hpbmUgd2UgYWxyZWFkeSBoYXZlLCBidXQgdGhlIGdsdWUK
KyAgICAvLyBpc24ndCB0aGVyZSwgeWV0LgorICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZToKKyAgICAg
ICAgCisgICAgLy8gSW5saW5pbmcgZG9lc24ndCBjb3JyZWN0bHkgcmVtYXAgcmVndWxhciBleHBy
ZXNzaW9uIG9wZXJhbmRzLgorICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gY2FuQ29tcGls
ZU9wY29kZShvcGNvZGVJRCk7CisgICAgfQorfQorCiBib29sIGNhbkNvbXBpbGVPcGNvZGVzKENv
ZGVCbG9jayopOworYm9vbCBjYW5JbmxpbmVPcGNvZGVzKENvZGVCbG9jayopOwogI2Vsc2UgLy8g
RU5BQkxFKERGR19KSVQpCiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVFdmFsKENvZGVCbG9jayop
IHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVQcm9ncmFtKENvZGVC
bG9jayopIHsgcmV0dXJuIGZhbHNlOyB9CiBpbmxpbmUgYm9vbCBtaWdodENvbXBpbGVGdW5jdGlv
bkZvckNhbGwoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KIGlubGluZSBib29sIG1pZ2h0
Q29tcGlsZUZ1bmN0aW9uRm9yQ29uc3RydWN0KENvZGVCbG9jayopIHsgcmV0dXJuIGZhbHNlOyB9
CitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ2FsbChDb2RlQmxvY2sqKSB7IHJl
dHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVj
dChDb2RlQmxvY2sqKSB7IHJldHVybiBmYWxzZTsgfQorCiBpbmxpbmUgYm9vbCBjYW5Db21waWxl
T3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2FuSW5saW5l
T3Bjb2RlKE9wY29kZUlEKSB7IHJldHVybiBmYWxzZTsgfQogaW5saW5lIGJvb2wgY2FuQ29tcGls
ZU9wY29kZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNhbklu
bGluZU9wY29kZXMoQ29kZUJsb2NrKikgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIAogaW5saW5lIGJvb2wgY2FuQ29tcGlsZUV2YWwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCkBAIC0xNzYsNiArMjI5LDE2IEBAIGlubGluZSBib29sIGNhbkNvbXBpbGVGdW5jdGlv
bkZvckNvbnN0cnUKICAgICByZXR1cm4gbWlnaHRDb21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
Y29kZUJsb2NrKSAmJiBjYW5Db21waWxlT3Bjb2Rlcyhjb2RlQmxvY2spOwogfQogCitpbmxpbmUg
Ym9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvckNhbGwoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7Cisg
ICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5s
aW5lT3Bjb2Rlcyhjb2RlQmxvY2spOworfQorCitpbmxpbmUgYm9vbCBjYW5JbmxpbmVGdW5jdGlv
bkZvckNvbnN0cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICByZXR1cm4gbWlnaHRJ
bmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMo
Y29kZUJsb2NrKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
REZHQ2FwYWJpbGl0aWVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw0NiBAQCBjb25zdCBjaGFyKiBHcmFw
aDo6bmFtZU9mVmFyaWFibGVBY2Nlc3NECiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAorc3RhdGljIHZv
aWQgcHJpbnRXaGl0ZVNwYWNlKHVuc2lnbmVkIGFtb3VudCkKK3sKKyAgICB3aGlsZSAoYW1vdW50
LS0gPiAwKQorICAgICAgICBwcmludGYoIiAiKTsKK30KKwordm9pZCBHcmFwaDo6ZHVtcENvZGVP
cmlnaW4oTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAoIW5vZGVJbmRleCkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIE5vZGUmIGN1cnJlbnROb2RlID0gYXQobm9kZUluZGV4KTsK
KyAgICBOb2RlJiBwcmV2aW91c05vZGUgPSBhdChub2RlSW5kZXggLSAxKTsKKyAgICBpZiAocHJl
dmlvdXNOb2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lID09IGN1cnJlbnROb2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgVmVjdG9y
PENvZGVPcmlnaW4+IHByZXZpb3VzSW5saW5lU3RhY2sgPSBwcmV2aW91c05vZGUuY29kZU9yaWdp
bi5pbmxpbmVTdGFjaygpOworICAgIFZlY3RvcjxDb2RlT3JpZ2luPiBjdXJyZW50SW5saW5lU3Rh
Y2sgPSBjdXJyZW50Tm9kZS5jb2RlT3JpZ2luLmlubGluZVN0YWNrKCk7CisgICAgdW5zaWduZWQg
Y29tbW9uU2l6ZSA9IHN0ZDo6bWluKHByZXZpb3VzSW5saW5lU3RhY2suc2l6ZSgpLCBjdXJyZW50
SW5saW5lU3RhY2suc2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleE9mRGl2ZXJnZW5jZSA9IGNv
bW1vblNpemU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1vblNpemU7ICsraSkg
eworICAgICAgICBpZiAocHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUgIT0g
Y3VycmVudElubGluZVN0YWNrW2ldLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaW5k
ZXhPZkRpdmVyZ2VuY2UgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gUHJpbnQgdGhlIHBvcHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gcHJl
dmlvdXNJbmxpbmVTdGFjay5zaXplKCk7IGktLSA+IGluZGV4T2ZEaXZlcmdlbmNlOykgeworICAg
ICAgICBwcmludFdoaXRlU3BhY2UoaSAqIDIpOworICAgICAgICBwcmludGYoIjwtLSAlcFxuIiwg
cHJldmlvdXNJbmxpbmVTdGFja1tpXS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkp
OworICAgIH0KKyAgICAKKyAgICAvLyBQcmludCB0aGUgcHVzaGVzLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IGluZGV4T2ZEaXZlcmdlbmNlOyBpIDwgY3VycmVudElubGluZVN0YWNrLnNpemUoKTsg
KytpKSB7CisgICAgICAgIHByaW50V2hpdGVTcGFjZShpICogMik7CisgICAgICAgIHByaW50Zigi
LS0+ICVwXG4iLCBjdXJyZW50SW5saW5lU3RhY2tbaV0uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLmdldCgpKTsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJ
bmRleCk7CkBAIC05MSw2ICsxMzEsOSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgICAgIEFTU0VSVChyZWZDb3VudCk7CiAgICAgICAgIC0tcmVmQ291bnQ7
CiAgICAgfQorICAgIAorICAgIGR1bXBDb2RlT3JpZ2luKG5vZGVJbmRleCk7CisgICAgcHJpbnRX
aGl0ZVNwYWNlKChub2RlLmNvZGVPcmlnaW4uaW5saW5lRGVwdGgoKSAtIDEpICogMik7CiAKICAg
ICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8K
QEAgLTI0MCw3ICsyODMsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsK
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKLSAgICAgICAg
cHJpbnRmKCJCbG9jayAjJXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29k
ZUJlZ2luLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CisgICAg
ICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICVzJXNcbiIsIChpbnQpYiwgYmxvY2stPmJ5
dGVjb2RlQmVnaW4sIGJsb2NrLT5pc1JlYWNoYWJsZSA/ICIiIDogIiAoc2tpcHBlZCkiLCBibG9j
ay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CiAgICAgICAgIHByaW50Zigi
ICB2YXJzOiAiKTsKICAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQogICAgICAgICAg
ICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzEx
MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFs
bG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIg
bmFtZXMpLgogICAgIHZvaWQgZHVtcChDb2RlQmxvY2sqID0gMCk7CiAgICAgdm9pZCBkdW1wKE5v
ZGVJbmRleCwgQ29kZUJsb2NrKiA9IDApOworCisgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4g
b2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQor
ICAgIC8vIHByZWNlZGluZyBub2RlLgorICAgIHZvaWQgZHVtcENvZGVPcmlnaW4oTm9kZUluZGV4
KTsKICNlbmRpZgogCiAgICAgQmxvY2tJbmRleCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
VmVjdG9yPEJsb2NrSW5kZXg+JiBibG9ja3MsIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4pOwpAQCAt
MjU3LDkgKzI2MSw5IEBAIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiB9OwogCi1pbmxp
bmUgQmxvY2tJbmRleCBHcmFwaDo6YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KFZlY3RvcjxC
bG9ja0luZGV4PiYgYmxvY2tzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQoraW5saW5lIEJsb2Nr
SW5kZXggR3JhcGg6OmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8QmxvY2tJbmRl
eD4mIGxpbmtpbmdUYXJnZXRzLCB1bnNpZ25lZCBieXRlY29kZUJlZ2luKQogewotICAgIHJldHVy
biAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4oYmxv
Y2tzLmJlZ2luKCksIGJsb2Nrcy5zaXplKCksIGJ5dGVjb2RlQmVnaW4sIFdURjo6S2V5TXVzdEJl
UHJlc2VudEluQXJyYXksIEdldEJ5dGVjb2RlQmVnaW5Gb3JCbG9jaygqdGhpcykpOworICAgIHJl
dHVybiAqV1RGOjpiaW5hcnlTZWFyY2hXaXRoRnVuY3RvcjxCbG9ja0luZGV4LCB1bnNpZ25lZD4o
bGlua2luZ1RhcmdldHMuYmVnaW4oKSwgbGlua2luZ1RhcmdldHMuc2l6ZSgpLCBieXRlY29kZUJl
Z2luLCBXVEY6OktleU11c3RCZVByZXNlbnRJbkFycmF5LCBHZXRCeXRlY29kZUJlZ2luRm9yQmxv
Y2soKnRoaXMpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwyMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2
ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhpdCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3Zl
cnksIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCkKK3Zv
aWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYgZXhp
dCwgU3BlY3VsYXRpb25SZWNvdmVyeSogcmVjb3ZlcnkpCiB7CiAgICAgLy8gMSkgUHJvLWZvcm1h
IHN0dWZmLgogICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOwogCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVk
IChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBl
eGl0Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIs
ICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIsIChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAg
Zm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAg
aWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAlcCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBK
SVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zmc2V0KCkpOwogICAgIGV4aXQuZHVtcChzdGRlcnIp
OwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkBA
IC00NDQsMTkgKzQ1MSw1OSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRo
T1NSCiAgICAgICAgIGxvYWQzMih0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNl
dE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3RlcjIpOwogICAgIH0KICAgICAK
LSAgICAvLyAxMykgRml4IGNhbGwgZnJhbWUuCisgICAgLy8gMTMpIEZpeCBjYWxsIGZyYW1lIChz
KS4KICAgICAKICAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOwogICAgIAorICAgIGZvciAoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lOworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxp
bmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbik7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXIgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlcik7CisgICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNv
ZGVkQ29kZU1hcCA9IGRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVy
KTsKKyAgICAgICAgdW5zaWduZWQgcmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAg
ICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Ojpn
ZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5z
aXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1h
cHBpbmcpOworICAgICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVy
bkJ5dGVjb2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9t
YWNoaW5lQ29kZU9mZnNldCk7CisKKyAgICAgICAgbG9hZFB0cihwYXlsb2FkRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVWUiksIEdQUkluZm86OnJlZ1Q0KTsKKyAg
ICAgICAgbG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUNCwgT0JK
RUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fc2NvcGVDaGFpbikpLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgYWRkMzIoSW1tMzIo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5m
bzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyOworICAgICAgICAKKyAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihiYXNlbGluZUNvZGVCbG9jayksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSkpOworICAg
ICAgICBzdG9yZTMyKEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCB0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVD
aGFpbikpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDIsIHBheWxvYWRGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmls
ZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgdGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lKSkpOworICAgICAgICBzdG9yZVB0cihjYWxsZXJG
cmFtZUdQUiwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSkpKTsKKyAgICAgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgcGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQykp
KTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHRhZ0ZvcigoVmly
dHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxl
OjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZTMyKEltbTMyKGlubGluZUNhbGxGcmFt
ZS0+bnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcyksIHBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCkpKTsKKyAgICAgICAgc3RvcmUzMihJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgdGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxlZSkpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDQsIHBheWxv
YWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJl
Z2lzdGVyRmlsZTo6Q2FsbGVlKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICBhZGRQdHIoSW1tMzIoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CisKICAgICAvLyAxNCkgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAotICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CisgICAgVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gZGVjb2RlZENvZGVNYXBGb3Io
YmFzZWxpbmVDb2RlQmxvY2spOworICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCog
bWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVk
LCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2Rl
TWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1hcHBpbmcpOwotICAgIEFTU0VSVChtYXBw
aW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VS
VChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CiAgICAgCi0gICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7
CisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0
KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAgICAgQVNTRVJUKEdQ
UkluZm86OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyICYmIEdQUkluZm86
OnJlZ1QyICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyMik7CiAgICAgCkBAIC00Njgs
MjQgKzUxNSw2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICNl
bmRpZgogfQogCi12b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQm
IHNwZWN1bGF0aXZlKQotewotICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRl
Y29kZWRDb2RlTWFwOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7Ci0g
ICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwotICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+aml0Q29kZU1hcCgpKTsKLSAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29k
ZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOwotICAgIAotICAgIE9TUkV4aXRWZWN0b3I6
Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKLSAg
ICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRz
KCkuZW5kKCk7Ci0gICAgCi0gICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewotICAg
ICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKLSAgICAgICAgZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQu
bV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOwotICAgICAgICArK2V4aXRzSXRlcjsK
LSAgICB9Ci19Ci0KIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiB7CiAgICAgbV9z
dGFydE9mQ29kZSA9IGxhYmVsKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkRGR0pJVENvbXBpbGVyLmgiCiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
LSNpZiBVU0UoSlNWQUxVRTY0KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
REZHSklUQ29kZUdlbmVyYXRvci5oIgpAQCAtMzksMTMgKzM4LDQ4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVy
eSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQorVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIEpJVENvbXBpbGVyOjpkZWNvZGVkQ29kZU1h
cEZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrID09IGNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+
aml0Q29kZU1hcCgpKTsKKyAgICAKKyAgICBzdGQ6OnBhaXI8SGFzaE1hcDxDb2RlQmxvY2sqLCBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiA+OjppdGVyYXRvciwgYm9vbD4gcmVzdWx0
ID0gbV9kZWNvZGVkQ29kZU1hcHMuYWRkKGNvZGVCbG9jaywgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4oKSk7CisgICAgCisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIGNv
ZGVCbG9jay0+aml0Q29kZU1hcCgpLT5kZWNvZGUocmVzdWx0LmZpcnN0LT5zZWNvbmQpOworICAg
IAorICAgIHJldHVybiByZXN1bHQuZmlyc3QtPnNlY29uZDsKK30KKwordm9pZCBKSVRDb21waWxl
cjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKK3sKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmJl
Z2luKCk7CisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNFbmQgPSBzcGVjdWxhdGl2
ZS5vc3JFeGl0cygpLmVuZCgpOworICAgIAorICAgIHdoaWxlIChleGl0c0l0ZXIgIT0gZXhpdHNF
bmQpIHsKKyAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhpdCA9ICpleGl0c0l0ZXI7CisgICAgICAg
IGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25SZWNv
dmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCkpOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJl
Y292ZXJ5KQogewogICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KICAgICBleGl0Lm1fY2hlY2su
bGluayh0aGlzKTsKIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBmcHJpbnRm
KHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgl
eCAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdP
ZmZzZXQoKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKCIs
IChpbnQpZXhpdC5tX25vZGVJbmRleCk7CisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmNhbGxlcikgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJjIyV1IiwgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAtPiAl
cCAiLCBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAg
fQorICAgIGZwcmludGYoc3RkZXJyLCAiKSBhdCBKSVQgb2Zmc2V0IDB4JXggICIsIGRlYnVnT2Zm
c2V0KCkpOwogICAgIGV4aXQuZHVtcChzdGRlcnIpOwogI2VuZGlmCiAjaWYgREZHX0VOQUJMRShW
RVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkBAIC00ODIsMTkgKzUxNiw1NSBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgaWYgKGV4aXQubV9sYXN0U2V0
T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTMpIEZpeCBjYWxs
IGZyYW1lLgorICAgIC8vIDEzKSBGaXggY2FsbCBmcmFtZShzKS4KICAgICAKICAgICBBU1NFUlQo
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJu
YXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVC
bG9jaykpOwogICAgIAorICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBD
b2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9y
aWdpbik7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcik7CisgICAgICAgIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGRlY29kZWRD
b2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyKTsKKyAgICAgICAgdW5zaWduZWQg
cmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1
bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNv
ZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1hcHBpbmcpOworICAgICAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisK
KyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZWVWUiksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rp
b24sIG1fc2NvcGVDaGFpbikpLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgIEdQUlJlZyBjYWxs
ZXJGcmFtZUdQUjsKKyAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkgeworICAgICAgICAgICAgYWRkUHRyKEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAg
ICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKKyAg
ICAgICAgCisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2sp
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpKTsKKyAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbikpKTsKKyAgICAgICAgc3RvcmVQ
dHIoY2FsbGVyRnJhbWVHUFIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6Q2FsbGVyRnJhbWUpKSk7CisgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIGFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIFJlZ2lzdGVyRmlsZTo6
UmV0dXJuUEMpKSk7CisgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+bnVtQXJndW1lbnRzSW5jbHVkaW5nVGhpcykp
KSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjpyZWdUMSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGFkZFB0
cihJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICAKICAgICAvLyAxNCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBj
b2RlLgogICAgIAotICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFy
eVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRl
Y29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9y
aWdpbik7CisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2Rl
TWFwID0gZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOworICAgIAorICAgIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5
dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUo
KSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgQVNTRVJUKG1h
cHBpbmcpOwotICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2J5
dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhp
dC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgCi0gICAgdm9pZCoganVtcFRhcmdl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGlu
Zy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihiYXNlbGluZUNvZGVC
bG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNl
dCk7CiAgICAgCiAgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJl
c3VsdFJlZ2lzdGVyKTsKICAgICAKQEAgLTUwNiwyNCArNTc2LDYgQEAgdm9pZCBKSVRDb21waWxl
cjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogI2VuZGlmCiB9CiAKLXZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCi17Ci0gICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7Ci0gICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsKLSAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOwotICAgIGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1h
cCk7Ci0gICAgCi0gICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3Vs
YXRpdmUub3NyRXhpdHMoKS5iZWdpbigpOwotICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4
aXRzRW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKLSAgICAKLSAgICB3aGlsZSAo
ZXhpdHNJdGVyICE9IGV4aXRzRW5kKSB7Ci0gICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAq
ZXhpdHNJdGVyOwotICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0
aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29k
ZU1hcCk7Ci0gICAgICAgICsrZXhpdHNJdGVyOwotICAgIH0KLX0KLQogdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KCkKIHsKICAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKQEAgLTc5
Myw3ICs4NDUsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjbGVhclNhbXBsaW5nRmxhZyhpbnQzCiB9
CiAjZW5kaWYKIAorI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAotI2VuZGlmCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9u
IDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNTUsOCArMjU1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmRlYnVnRGF0YUJ1ZmZlciArIEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzICsgaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgIHN0
b3JlRG91YmxlKEZQUkluZm86OnRvUmVnaXN0ZXIoaSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAg
ICAgfQorI2lmIENQVShYODZfNjQpCiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhcmd1bWVu
dCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisjZWxpZiBDUFUoWDg2KQorICAg
ICAgICBwb2tlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAwKTsKKyAgICAgICAgcG9rZShU
cnVzdGVkSW1tUHRyKGFyZ3VtZW50KSwgMSk7CisjZWxzZQorI2Vycm9yICJERkcgSklUIG5vdCBz
dXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCisjZW5kaWYKICAgICAgICAgbW92ZShUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uKSksIEdQUkluZm86OnJlZ1Qw
KTsKICAgICAgICAgY2FsbChHUFJJbmZvOjpyZWdUMCk7CiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKSB7CkBAIC00MzAsOCAr
NDM3LDIxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlQm9keSgpOwogICAgIHZvaWQgbGlu
ayhMaW5rQnVmZmVyJik7CiAKLSAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3Qg
T1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9T
Uihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgbGlua09T
UkV4aXRzKFNwZWN1bGF0aXZlSklUJik7CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAg
aWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpOworICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pOworICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZv
ckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCkgPT0gY29kZUJsb2NrKCktPmJhc2VsaW5lVmVyc2lvbigp
KTsKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpOworICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBG
b3IoQ29kZUJsb2NrKik7CiAKICAgICAvLyBUaGUgZ2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3Mg
Y29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxE
YXRhOwpAQCAtNDQxLDcgKzQ2MSw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGUgY29kZUJsb2Nr
IGN1cnJlbnRseSBiZWluZyBnZW5lcmF0ZWQsIHVzZWQgdG8gYWNjZXNzIGluZm9ybWF0aW9uIHN1
Y2ggYXMgY29uc3RhbnQgdmFsdWVzLCBpbW1lZGlhdGVzLgogICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7Ci0KKyAgICAKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+ID4gbV9kZWNvZGVkQ29kZU1hcHM7CisgICAgCiAgICAgLy8gVmVjdG9y
IG9mIGNhbGxzIG91dCBmcm9tIEpJVCBjb2RlLCBpbmNsdWRpbmcgZXhjZXB0aW9uIGhhbmRsZXIg
aW5mb3JtYXRpb24uCiAgICAgLy8gQ291bnQgb2YgdGhlIG51bWJlciBvZiBDYWxsUmVjb3JkcyB3
aXRoIGV4Y2VwdGlvbiBoYW5kbGVycy4KICAgICBWZWN0b3I8Q2FsbFJlY29yZD4gbV9jYWxsczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5ODA4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTUsNiArMjE1LDcgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwog
ICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKFBoaSwgMCkgXAorICAgIG1hY3JvKEZsdXNoLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4g
Ki9cCiAgICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKQEAgLTQ4NSw2ICs0ODYsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgIGNhc2UgUGhpOgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICBjYXNlIEZsdXNoOgogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC04MzYsNyArODM4LDcgQEAgc3RydWN0IE5vZGUgewogCiAgICAgYm9vbCBzaG91bGRHZW5l
cmF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9yZWZDb3VudCAmJiBvcCAhPSBQaGk7Cisg
ICAgICAgIHJldHVybiBtX3JlZkNvdW50ICYmIG9wICE9IFBoaSAmJiBvcCAhPSBGbHVzaDsKICAg
ICB9CiAKICAgICB1bnNpZ25lZCByZWZDb3VudCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0LDMxIEBA
IHB1YmxpYzoKICAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhd
OyB9CiAgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bHNbaWR4XTsgfQogICAgIAorICAgIHZvaWQgZW5zdXJlTG9jYWxzKHNpemVfdCBzaXplKQorICAg
IHsKKyAgICAgICAgaWYgKHNpemUgPD0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOworICAgICAg
ICBtX2xvY2Fscy5yZXNpemUoc2l6ZSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXpl
OyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRy
YWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgc2V0TG9jYWwoc2l6
ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoaWR4ID49IG1fbG9j
YWxzLnNpemUoKSkgewotICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7Ci0gICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKLSAgICAgICAg
fQorICAgICAgICBlbnN1cmVMb2NhbHMoaWR4ICsgMSk7CiAgICAgICAgIAogICAgICAgICBtX2xv
Y2Fsc1tpZHhdID0gdmFsdWU7CiAgICAgfQogICAgIAorICAgIFQgZ2V0TG9jYWwoc2l6ZV90IGlk
eCkKKyAgICB7CisgICAgICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIHJldHVybiBtX2xvY2Fs
c1tpZHhdOworICAgIH0KKyAgICAKICAgICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVf
dCBpZHgsIGNvbnN0IFQmIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRz
W2lkeF0gPT0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTc4LDYgKzU3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmV0dXJuOgogICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICBjYXNlIEZs
dXNoOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CiAgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5
ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MCwxMCArNzQwLDEwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdG8gdGhlICpuZXh0KiBpbnN0
cnVjdGlvbiwgc2luY2Ugd2UndmUgYWxyZWFkeSAiZXhlY3V0ZWQiIHRoZQogICAgICAgICAvLyBT
ZXRMb2NhbCBhbmQgd2hhdGV2ZXIgb3RoZXIgREZHIE5vZGVzIGFyZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIHNhbWUKICAgICAgICAgLy8gYnl0ZWNvZGUgaW5kZXggYXMgdGhlIFNldExvY2FsLgotICAg
ICAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4Rm9yT1NSID09IG5vZGUuY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY29kZU9yaWdpbkZvck9TUiA9PSBub2RlLmNv
ZGVPcmlnaW4pOwogICAgICAgICBOb2RlJiBuZXh0Tm9kZSA9IGF0KG1fY29tcGlsZUluZGV4ICsg
MSk7CiAgICAgICAgIAotICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5l
eHROb2RlLmNvZGVPcmlnaW47CiAgICAgICAgIAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTgwNiw3ICsx
ODA2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNh
c2UgQ29udmVydFRoaXM6IHsKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAg
Y2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIG1faml0
Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTgyOSwxMSArMTgzMSwxNSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmpl
Y3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAg
ICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5n
cHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNT
dHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
R1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0
cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1Zh
bHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNW
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
QEAgLTIzMzEsNiArMjMzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIFBoaToKKyAgICBjYXNlIEZsdXNoOgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgQnJlYWtwb2ludDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDgsNyArODQ4LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyB0byB0aGUgKm5leHQqIGlu
c3RydWN0aW9uLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5ICJleGVjdXRlZCIgdGhlCiAgICAgICAgIC8v
IFNldExvY2FsIGFuZCB3aGF0ZXZlciBvdGhlciBERkcgTm9kZXMgYXJlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgc2FtZQogICAgICAgICAvLyBieXRlY29kZSBpbmRleCBhcyB0aGUgU2V0TG9jYWwuCi0g
ICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPT0gbm9kZS5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICBBU1NFUlQobV9jb2RlT3JpZ2luRm9yT1NSID09IG5vZGUu
Y29kZU9yaWdpbik7CiAgICAgICAgIE5vZGUmIG5leHROb2RlID0gYXQobV9jb21waWxlSW5kZXgg
KyAxKTsKICAgICAgICAgCiAgICAgICAgIC8vIE9kZGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUg
Ynl0ZWNvZGUgaW5kZXggZm9yIHRoZSBuZXh0IG5vZGUgdG8gYmUKQEAgLTg2MSw3ICs4NjEsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHN0
YXRlbWVudCkgd291bGQgYmUgZGVhZCBhbnl3YXkgLSBzbyB0aGUgZmFjdCB0aGF0IERGRyB3b3Vs
ZCBoYXZlCiAgICAgICAgIC8vIGFscmVhZHkgbWFkZSB0aGUgYXNzaWdubWVudCwgYW5kIGJha2Vk
IGl0IGludG8gdGhlIHJlZ2lzdGVyIGZpbGUgZHVyaW5nCiAgICAgICAgIC8vIE9TUiBleGl0LCB3
b3VsZCBub3QgYmUgdmlzaWJsZSB0byB0aGUgb2xkIEpJVCBpbiBhbnkgd2F5LgotICAgICAgICBt
X2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7
CisgICAgICAgIG1fY29kZU9yaWdpbkZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW47CiAgICAg
ICAgIAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTg5MCw3ICsxODkwLDkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgQ29udmVydFRoaXM6IHsKICAgICAg
ICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTkxMywxMSArMTkxNSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hp
bGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgdGhpc1ZhbHVlKTsKKyAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVH
UFIgPSB0aGlzVmFsdWUuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjM5MSw2
ICsyMzk4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgUGhpOgorICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCiAgICAgY2FzZSBCcmVha3BvaW50OgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk4MDgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChG
SUxFKiBvdXQpIGNvbnMKIE9TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hl
Y2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBt
X2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKLSAg
ICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1fYnl0ZWNvZGVJbmRleEZvck9TUikKKyAgICAsIG1f
Y29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKICAgICAsIG1fcmVjb3ZlcnlJbmRl
eChyZWNvdmVyeUluZGV4KQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXpl
KCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewotICAgIEFTU0VSVChtX2J5
dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKTsKKyAg
ICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOwogICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKICAgICAg
ICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihq
aXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CiAgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9
IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQpAQCAtMjYwLDYg
KzI2MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB7CiAg
ICAgQVNTRVJUKG1fY29tcGlsZU9rYXkpOwogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBi
bG9jay5iZWdpbik7CisgICAgCisgICAgaWYgKCFibG9jay5pc1JlYWNoYWJsZSkgeworICAgICAg
ICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIGlmIChibG9jay5pc09TUlRhcmdldCkKICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnko
YmxvY2spOwpAQCAtMjkxLDExICsyOTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgIH0KICAgICAKICAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgbV9jb2RlT3JpZ2luRm9y
T1NSID0gQ29kZU9yaWdpbigpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2su
ZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBhdChtX2NvbXBp
bGVJbmRleCk7Ci0gICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5vZGUuY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4OworICAgICAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBub2RlLmNvZGVP
cmlnaW47CiAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYgREZHX0VO
QUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxh
dGl2ZUpJVCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAg
IiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOwpAQCAtMzY2LDcgKzM3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7Ci0gICAgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSID0gMDsKKyAgICBtX2NvZGVPcmlnaW5Gb3JPU1IgPSBDb2RlT3JpZ2luKDAp
OwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkK
ICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDk4MDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RydWN0IE9T
UkV4aXQgewogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7CiAgICAgTm9k
ZUluZGV4IG1fbm9kZUluZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICBD
b2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5k
ZXg7CiAgICAgCkBAIC01NjYsNyArNTY2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWVT
b3VyY2UsIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJp
YWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Ci0gICAgdWludDMyX3QgbV9ieXRlY29k
ZUluZGV4Rm9yT1NSOworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yT1NSOwogICAgIAog
ICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICAKQEAgLTgwMSw3ICs4MDEsNiBAQCBpbmxp
bmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX2FyZ3VtZW50cyhq
aXQuY29kZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKICAgICAsIG1fdmFyaWFibGVzKGppdC5n
cmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQotICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuY29kZUJs
b2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTIsNyArOTIsNyBAQCBDYWxsRnJhbWUqIENhbGxGcmFtZTo6dHJ1ZUNhbGxlckZyYW1l
U2xvCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbWFjaGluZUNhbGxlci0+Y29kZUJsb2Nr
KCktPmNvZGVPcmlnaW5Gb3JSZXR1cm4ocmV0dXJuUEMoKSk7CiAgICAgCiAgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogbmV4dElubGlu
ZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBuZXh0SW5saW5lQ2FsbEZy
YW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAK
ICAgICAgICAgQ2FsbEZyYW1lKiBpbmxpbmVkQ2FsbGVyID0gbWFjaGluZUNhbGxlciArIGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTMgQEAg
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShJbnN0cnVjdAogICAgIC8vIERvbmUhIC0g
cmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRoLgogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9w
X2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF9ldmFsKSk7CiAgICAgQVNTRVJUKE9QQ09E
RV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKKyNpZiBF
TkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpIHsKKyAgICAg
ICAgUmFyZUNhc2VQcm9maWxlKiByYXJlQ2FzZVByb2ZpbGUgPSBtX2NvZGVCbG9jay0+cmFyZUNh
c2VQcm9maWxlKG1fY29kZUJsb2NrLT5udW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSAtIDEpOwor
ICAgICAgICBBU1NFUlQoKHVuc2lnbmVkKXJhcmVDYXNlUHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCA9PSBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgYWRkMzIoSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcygmcmFyZUNhc2VQcm9maWxlLT5tX2NvdW50ZXIpKTsKKyAgICB9CisjZW5kaWYKICAg
ICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfY2FsbCkpOwogCiAg
ICAgLy8gVGhpcyBoYW5kbGVzIGhvc3QgZnVuY3Rpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAxNSw3ICsyMDE1LDEx
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KIAogICAgIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQotICAgICAgICBwcmludGYoIlJldHVybmluZyBmcm9tIG9sZCBKSVQgY2FsbCBm
cmFtZSB3aXRoIG9wdGltaXplZCByZXBsYWNlbWVudCAlcCglcCksIHdpdGggc3VjY2Vzcy9mYWls
ICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisgICAgICAgIHByaW50
ZigiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxh
Y2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUiLCBjb2RlQmxvY2ssIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2
ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpKTsKKyAgICAgICAgQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWUoKTsKKyAgICAgICAgaWYgKGNhbGxlckZyYW1lKQorICAgICAgICAgICAg
cHJpbnRmKCIsIGNhbGxlckZyYW1lID0gJXAsIHJldHVyblBDID0gJXAsIGNhbGxlciBjb2RlIGJs
b2NrID0gJXAiLCBjYWxsZXJGcmFtZSwgY2FsbEZyYW1lLT5yZXR1cm5QQygpLnZhbHVlKCksIGNh
bGxlckZyYW1lLT5jb2RlQmxvY2soKSk7CisgICAgICAgIHByaW50ZigiXG4iKTsKICNlbmRpZgog
ICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplTm93
KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpAQCAtMjAyMyw2ICsyMDI3LDggQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2VuZGlmCiAgICAgICAg
ICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwogICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwogCiAg
ICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNiArMzg0LDI0IEBAIHZvaWQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OmNsZWFyQ29kZVZpcnR1YWwKICAgICBCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKCk7CiB9CiAK
K0NvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgQ29kZUJsb2NrKiByZXN1bHQ7CisgICAg
aWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCisgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2NrRm9y
Q2FsbC5nZXQoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgIHJlc3VsdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmdldCgp
OworICAgIH0KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgd2hpbGUg
KHJlc3VsdC0+YWx0ZXJuYXRpdmUoKSkKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0LT5hbHRlcm5h
dGl2ZSgpOworICAgIEFTU0VSVChyZXN1bHQpOworICAgIEFTU0VSVChyZXN1bHQtPmdldEpJVFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
SlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhl
Y1N0YXRlKiBleGVjLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbk5vZGUpCiB7CiAgICAgQVNT
RVJUKGV4ZWMtPmdsb2JhbERhdGEoKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKQEAgLTQwNiwxMSAr
NDI0LDEyIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHQKICAgICBy
ZXR1cm4gZXJyb3I7CiB9CiAKLVBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9u
RXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hh
aW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29tcGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKQorUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gRnVuY3Rpb25FeGVjdXRhYmxl
Ojpwcm9kdWNlQ29kZUJsb2NrRm9yKFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSwgQ29t
cGlsYXRpb25LaW5kIGNvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVj
aWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIGV4Y2VwdGlvbiA9
IDA7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gc2NvcGVDaGFpbk5vZGUtPmdsb2Jh
bERhdGE7Ci0gICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5w
YXJzZXItPnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSwgMCwgMCwgbV9zb3VyY2UsIG1fcGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBK
U1BhcnNlU3RyaWN0IDogSlNQYXJzZU5vcm1hbCwgJmV4Y2VwdGlvbik7CisgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7
CisgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IGJvZHkgPSBnbG9iYWxEYXRhLT5wYXJzZXIt
PnBhcnNlPEZ1bmN0aW9uQm9keU5vZGU+KGdsb2JhbE9iamVjdCwgMCwgMCwgbV9zb3VyY2UsIG1f
cGFyYW1ldGVycy5nZXQoKSwgaXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlU3RyaWN0IDogSlNQYXJz
ZU5vcm1hbCwgJmV4Y2VwdGlvbik7CiAgICAgaWYgKCFib2R5KSB7CiAgICAgICAgIEFTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTQyMCw4ICs0MzksNiBAQCBQ
YXNzT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4CiAgICAgYm9keS0+ZmluaXNo
UGFyc2luZyhtX3BhcmFtZXRlcnMsIG1fbmFtZSk7CiAgICAgcmVjb3JkUGFyc2UoYm9keS0+ZmVh
dHVyZXMoKSwgYm9keS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgYm9keS0+bGluZU5vKCksIGJv
ZHktPmxhc3RMaW5lKCkpOwogCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNj
b3BlQ2hhaW5Ob2RlLT5nbG9iYWxPYmplY3QuZ2V0KCk7Ci0KICAgICBPd25QdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IHJlc3VsdDsKICAgICBBU1NFUlQoKGNvbXBpbGF0aW9uS2luZCA9PSBGaXJzdENv
bXBpbGF0aW9uKSA9PSAhY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCkpOwogICAgIHJl
c3VsdCA9IGFkb3B0UHRyKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCBGdW5jdGlvbkNvZGUs
IGdsb2JhbE9iamVjdCwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRPZmZzZXQo
KSwgc3BlY2lhbGl6YXRpb25LaW5kID09IENvZGVGb3JDb25zdHJ1Y3QpKTsKQEAgLTQ0Miw3ICs0
NTksNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAjZW5kaWYK
ICAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9j
b2RlQmxvY2tGb3JDYWxsKTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93blB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihleGVj
LCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNhbGwgPyBPcHRpbWl6aW5nQ29tcGls
YXRpb24gOiBGaXJzdENvbXBpbGF0aW9uLCBDb2RlRm9yQ2FsbCwgZXhjZXB0aW9uKTsKKyAgICBP
d25QdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tG
b3Ioc2NvcGVDaGFpbk5vZGUsICEhbV9jb2RlQmxvY2tGb3JDYWxsID8gT3B0aW1pemluZ0NvbXBp
bGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7CiAgICAg
aWYgKCFuZXdDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBleGNlcHRpb247CiAKQEAgLTUwMCw3
ICs1MTcsNyBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAg
CiAgICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KTsKICAgICBKU09iamVjdCogZXhjZXB0aW9uOwotICAgIE93
blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0Zv
cihleGVjLCBzY29wZUNoYWluTm9kZSwgISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA/IE9wdGlt
aXppbmdDb21waWxhdGlvbiA6IEZpcnN0Q29tcGlsYXRpb24sIENvZGVGb3JDb25zdHJ1Y3QsIGV4
Y2VwdGlvbik7CisgICAgT3duUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBw
cm9kdWNlQ29kZUJsb2NrRm9yKHNjb3BlQ2hhaW5Ob2RlLCAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0ID8gT3B0aW1pemluZ0NvbXBpbGF0aW9uIDogRmlyc3RDb21waWxhdGlvbiwgQ29kZUZvckNv
bnN0cnVjdCwgZXhjZXB0aW9uKTsKICAgICBpZiAoIW5ld0NvZGVCbG9jaykKICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAkocmV2aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Miw3ICs0NjIsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFBhc3NPd25QdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBDb21w
aWxhdGlvbktpbmQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9u
KTsKKyAgICAgICAgUGFzc093blB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcHJvZHVjZUNvZGVCbG9j
a0ZvcihTY29wZUNoYWluTm9kZSosIENvbXBpbGF0aW9uS2luZCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgSlNPYmplY3QqJiBleGNlcHRpb24pOwogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxl
Rm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkK
ICAgICAgICAgewpAQCAtNTcwLDkgKzU3MCwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIHJldHVybiBnZW5lcmF0ZWRCeXRlY29kZUZvckNvbnN0cnVjdCgpOwogICAgICAgICB9CiAK
KyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3Ioa2luZCk7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICAg
ICAgSlNTdHJpbmcqIG5hbWVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZVZhbHVlLmdldCgp
OyB9Ci0gICAgICAgIHNpemVfdCBwYXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVycy0+c2l6ZSgpOyB9IC8vIEluY2x1ZGluZyAndGhpcychCisgICAgICAgIHNpemVfdCBw
YXJhbWV0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVycy0+c2l6ZSgpOyB9IC8v
IEV4Y2x1ZGluZyAndGhpcychCiAgICAgICAgIHVuc2lnbmVkIGNhcHR1cmVkVmFyaWFibGVDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQ2FwdHVyZWRWYXJpYWJsZXM7IH0KICAgICAgICAgVVN0
cmluZyBwYXJhbVN0cmluZygpIGNvbnN0OwogICAgICAgICBTaGFyZWRTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUoKSBjb25zdCB7IHJldHVybiBtX3N5bWJvbFRhYmxlOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkocmV2aXNpb24gOTgwODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPGxpbWl0cz4KIAogLy8gU2V0IHRv
IDEgdG8gY29udHJvbCB0aGUgaGV1cmlzdGljcyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMu
Ci0jZGVmaW5lIEVOQUJMRV9SVU5fVElNRV9IRVVSSVNUSUNTIDAKKyNkZWZpbmUgRU5BQkxFX1JV
Tl9USU1FX0hFVVJJU1RJQ1MgMQogCiAjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCiAj
aW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM5LDYgKzM5LDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgSGV1cmlzdGljcyB7CiAKK3Vuc2lnbmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9u
Q2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1Qcm9ncmFtT3B0aW1p
emF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlv
bkZvckNhbGxPcHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQg
bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rp
b25Db3VudDsKKwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0
ZUluc3RydWN0aW9uQ291bnQ7CisKK3Vuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOworCiBp
bnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CiBpbnQz
Ml90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOwogaW50
MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKQEAg
LTUwLDYgKzU5LDkgQEAgaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dQog
CiB1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCit1bnNpZ25l
ZCBsaWtlbHlUb1Rha2VTbG93Q2FzZVRocmVzaG9sZDsKK3Vuc2lnbmVkIGNvdWxkVGFrZVNsb3dD
YXNlVGhyZXNob2xkOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CiB1
bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkBAIC05OSw2ICsx
MTEsMTggQEAgdm9pZCBzZXRIZXVyaXN0aWMoVCYgdmFyaWFibGUsIGNvbnN0IGNoYQogCiB2b2lk
IGluaXRpYWxpemVIZXVyaXN0aWNzKCkKIHsKKyAgICAvLyBGSVhNRTogTXVzdCByZXZpc2l0IHRo
ZXNlIGhldXJpc3RpY3MhIFRoZSBERkcsIGJlaW5nIGFuIG9wdGltaXppbmcgY29tcGlsZXIsIG1h
eQorICAgIC8vIHRha2UgYSBsb25nIHRpbWUgZm9yIHBhdGhvbG9naWNhbGx5IGh1Z2UgY29kZSBi
bG9ja3MuIFRoZSBiZXN0IHdheSB0byBjb3BlIHdpdGgKKyAgICAvLyB0aGlzIGlzIHRvIHJlZnVz
ZSB0byBvcHRpbWl6ZSB0aGVtLgorICAgIFNFVChtYXhpbXVtRXZhbE9wdGltaXphdGlvbkNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNh
bmRpZGF0ZUluc3RydWN0aW9uQ291bnQsICAgICAgICAgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1p
emF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RP
cHRpbWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIAorICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKKyAgICAKKyAgICBTRVQobWF4
aW11bUlubGluaW5nRGVwdGgsIDMpOworCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAwMCk7CiAgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptaW4oKSk7CkBAIC0xMDksNiArMTMzLDkgQEAgdm9pZCBpbml0aWFs
aXplSGV1cmlzdGljcygpCiAgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4sIDE1KTsKIAogICAgIFNFVChkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvLCA2
KTsKKyAgICAKKyAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQsIDEwMCk7Cisg
ICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkLCAgICAxMCk7IC8vIFNob3VsZG4ndCBi
ZSB6ZXJvIGJlY2F1c2Ugc29tZSBvcHMgd2lsbCBzcHVyaW91c2x5IHRha2Ugc2xvdyBjYXNlLCBm
b3IgZXhhbXBsZSBmb3IgbGlua2luZyBvciBjYWNoaW5nLgogCiAgICAgU0VUKGxhcmdlRmFpbENv
dW50VGhyZXNob2xkQmFzZSwgICAgICAgIDIwKTsKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJl
c2hvbGRCYXNlRm9yTG9vcCwgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTUgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBIZXVyaXN0aWNzIHsKIAorZXh0ZXJuIHVuc2ln
bmVkIG1heGltdW1FdmFsT3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4
dGVybiB1bnNpZ25lZCBtYXhpbXVtUHJvZ3JhbU9wdGltaXphdGlvbkNhbmRpZGF0ZUluc3RydWN0
aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ2FsbE9wdGltaXph
dGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRlcm4gdW5zaWduZWQgbWF4aW11bUZ1
bmN0aW9uRm9yQ29uc3RydWN0T3B0aW1pemF0aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsK
KworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJ
bnN0cnVjdGlvbkNvdW50OworCitleHRlcm4gdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7
IC8vIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25lIGxl
dmVsLCBldGMuCisKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXA7CiBleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcDsKIGV4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJW
YWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uOwpAQCAtNDEsNiArNTAsOSBAQCBleHRlcm4g
aW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50CiAKIGV4dGVybiB1bnNpZ25lZCBkZXNp
cmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvOwogCitleHRlcm4gdW5zaWduZWQgbGlrZWx5
VG9UYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CitleHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nh
c2VUaHJlc2hvbGQ7CisKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJh
c2U7CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2
aXNpb24gOTgwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
Y2xhc3MgVlB0ckhhY2tFeGVjdXRhYmxlOwogICAgIG5hbWVzcGFjZSBERkcgewogICAgIGNsYXNz
IEpJVENvZGVHZW5lcmF0b3I7CisgICAgY2xhc3MgSklUQ29tcGlsZXI7CiAgICAgfQogCiAgICAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rv
cihFeGVjU3RhdGUqKTsKQEAgLTQ2LDYgKzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgSlNGdW5jdGlvbiA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpJVDsKICAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29kZUdlbmVyYXRvcjsK
KyAgICAgICAgZnJpZW5kIGNsYXNzIERGRzo6SklUQ29tcGlsZXI7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKU0dsb2JhbERhdGE7CiAKICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5ODA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODg2LDcgKzg4NiwxMCBAQAogI2Rl
ZmluZSBFTkFCTEVfREZHX0pJVCAxCiAjZW5kaWYKIAotLyogQ3VycmVudGx5IG9ubHkgaW1wbGVt
ZW50ZWQgZm9yIEpTVkFMVUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKS4gKi8KKy8q
IFByb2ZpbGluZyBvZiB0eXBlcyBhbmQgdmFsdWVzIHVzZWQgYnkgSklUIGNvZGUuIERGR19KSVQg
ZGVwZW5kcyBvbiBpdCwgYnV0IHlvdQorICAgY2FuIGVuYWJsZSBpdCBtYW51YWxseSB3aXRoIERG
RyB0dXJuZWQgb2ZmIGlmIHlvdSB3YW50IHRvIHVzZSBpdCBhcyBhIHN0YW5kYWxvbmUKKyAgIHBy
b2ZpbGVyLiBJbiB0aGF0IGNhc2UsIHlvdSBwcm9iYWJseSB3YW50IHRvIGFsc28gZW5hYmxlIFZF
UkJPU0VfVkFMVUVfUFJPRklMRQorICAgYmVsb3cuICovCiAjaWYgIWRlZmluZWQoRU5BQkxFX1ZB
TFVFX1BST0ZJTEVSKSAmJiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgRU5BQkxFX1ZBTFVFX1BS
T0ZJTEVSIDEKICNlbmRpZgo=
</data>
<flag name="review"
          id="110031"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>