<?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>149433</bug_id>
          
          <creation_ts>2015-09-21 16:34:23 -0700</creation_ts>
          <short_desc>VMs should share GC threads</short_desc>
          <delta_ts>2015-09-26 13:14:06 -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>Other</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>149435</dependson>
    
    <dependson>149509</dependson>
    
    <dependson>149512</dependson>
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1127827</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-21 16:34:23 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128080</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2015-09-22 12:31:56 -0700</bug_when>
    <thetext>+1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128364</commentid>
    <comment_count>2</comment_count>
      <attachid>261835</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-23 12:30:07 -0700</bug_when>
    <thetext>Created attachment 261835
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128393</commentid>
    <comment_count>3</comment_count>
      <attachid>261843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-23 15:12:17 -0700</bug_when>
    <thetext>Created attachment 261843
sort of passing some tests, I guess</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128593</commentid>
    <comment_count>4</comment_count>
      <attachid>261897</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-24 15:04:05 -0700</bug_when>
    <thetext>Created attachment 261897
maybe the patch

I&apos;m still running some tests.  But it looks pretty good so far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128594</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-24 15:05:37 -0700</bug_when>
    <thetext>Attachment 261897 did not pass style-queue:


ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:176:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/CodeCache.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/HeapHelperPool.cpp:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:548:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:633:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:68:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 17 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>1128632</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-24 17:55:46 -0700</bug_when>
    <thetext>Performance is OK:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190217)
&quot;ParallelHelperPool&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r190217)

Collected 7 samples per benchmark/VM, with 7 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             ParallelHelperPool                                
SunSpider:
   3d-cube                                            4.8238+-0.4948            4.4259+-0.1112          might be 1.0899x faster
   3d-morph                                           5.3545+-0.2622            5.2012+-0.1000          might be 1.0295x faster
   3d-raytrace                                        5.3653+-0.1587            5.2177+-0.2311          might be 1.0283x faster
   access-binary-trees                                2.1610+-0.1281     ?      2.2318+-0.2849        ? might be 1.0327x slower
   access-fannkuch                                    5.4899+-0.1947     ?      5.5426+-0.1371        ?
   access-nbody                                       2.5440+-0.1140     ?      2.5831+-0.1806        ? might be 1.0154x slower
   access-nsieve                                      3.0718+-0.0730     ?      3.0813+-0.1555        ?
   bitops-3bit-bits-in-byte                           1.1482+-0.0227     ?      1.1590+-0.0418        ?
   bitops-bits-in-byte                                3.1865+-0.0434     ?      3.2571+-0.1015        ? might be 1.0222x slower
   bitops-bitwise-and                                 1.9811+-0.0172     ?      2.0200+-0.1145        ? might be 1.0196x slower
   bitops-nsieve-bits                                 2.9163+-0.0590     ?      2.9771+-0.1171        ? might be 1.0209x slower
   controlflow-recursive                              2.3349+-0.0745            2.3206+-0.0430        
   crypto-aes                                         3.8618+-0.0679     ?      3.9394+-0.2317        ? might be 1.0201x slower
   crypto-md5                                         2.4306+-0.0634     ?      2.5313+-0.1136        ? might be 1.0414x slower
   crypto-sha1                                        2.4447+-0.1530            2.4429+-0.1040        
   date-format-tofte                                  6.6284+-0.1152     ?      6.7748+-0.2771        ? might be 1.0221x slower
   date-format-xparb                                  4.7655+-0.1693            4.5829+-0.1946          might be 1.0398x faster
   math-cordic                                        2.8865+-0.1388            2.8842+-0.1256        
   math-partial-sums                                  4.7640+-0.0731     ?      4.7845+-0.2007        ?
   math-spectral-norm                                 1.9986+-0.1796            1.9368+-0.0857          might be 1.0319x faster
   regexp-dna                                         6.4210+-0.1994     ^      6.0502+-0.1595        ^ definitely 1.0613x faster
   string-base64                                      4.4975+-0.2186            4.4594+-0.1558        
   string-fasta                                       5.8044+-0.1032     ?      5.8735+-0.1774        ? might be 1.0119x slower
   string-tagcloud                                    7.8370+-0.0885     ?      7.8931+-0.0769        ?
   string-unpack-code                                18.5619+-0.5746     ?     18.7104+-0.4670        ?
   string-validate-input                              4.5297+-0.1527     ?      4.5637+-0.4200        ?

   &lt;arithmetic&gt;                                       4.5311+-0.0236            4.5171+-0.0506          might be 1.0031x faster

                                                        TipOfTree             ParallelHelperPool                                
LongSpider:
   3d-cube                                          800.6923+-9.6531          799.8176+-2.4010        
   3d-morph                                        1485.1298+-2.1368         1484.4645+-3.0170        
   3d-raytrace                                      589.2321+-4.3652     ?    590.7834+-5.1502        ?
   access-binary-trees                              785.2797+-3.3423     ?    787.6647+-6.4111        ?
   access-fannkuch                                  273.3021+-3.7824     ?    274.9242+-4.6492        ?
   access-nbody                                     504.3896+-0.7826          503.6922+-0.6525        
   access-nsieve                                    365.2946+-11.0123    ?    366.2232+-9.7443        ?
   bitops-3bit-bits-in-byte                          33.7894+-0.7732           33.6817+-0.4180        
   bitops-bits-in-byte                               73.9784+-1.3815           73.8790+-0.6959        
   bitops-nsieve-bits                               398.2521+-2.1836     ?    399.3892+-3.1114        ?
   controlflow-recursive                            425.8974+-4.6171          423.2567+-0.6182        
   crypto-aes                                       558.9363+-12.6580         553.3800+-10.7937         might be 1.0100x faster
   crypto-md5                                       431.8727+-3.2255     ?    441.8658+-26.4278       ? might be 1.0231x slower
   crypto-sha1                                      632.6772+-5.6073          628.0345+-10.0830       
   date-format-tofte                                500.2225+-6.0276     ?    504.2688+-6.1823        ?
   date-format-xparb                                658.1238+-1.8384     ?    700.6277+-119.7695      ? might be 1.0646x slower
   hash-map                                         148.6700+-1.6807     ?    149.1348+-1.4700        ?
   math-cordic                                      474.6093+-1.2511          473.9519+-0.5247        
   math-partial-sums                                457.5010+-0.7586     ^    455.0258+-1.5119        ^ definitely 1.0054x faster
   math-spectral-norm                               545.2324+-0.4119     ?    547.1794+-2.7131        ?
   string-base64                                    349.8429+-2.4775     !    357.3467+-2.8458        ! definitely 1.0214x slower
   string-fasta                                     362.0520+-2.0066     ?    364.2637+-1.2252        ?
   string-tagcloud                                  174.2948+-1.6912     ?    175.5440+-2.0972        ?

   &lt;geometric&gt;                                      380.9535+-0.9168     ?    382.6343+-3.2999        ? might be 1.0044x slower

                                                        TipOfTree             ParallelHelperPool                                
V8Spider:
   crypto                                            47.7898+-1.8614           47.6309+-1.1581        
   deltablue                                         79.6906+-3.3930     ?     79.8958+-2.8654        ?
   earley-boyer                                      41.1604+-1.1718           40.7277+-0.7002          might be 1.0106x faster
   raytrace                                          30.8145+-1.3700     ?     31.0355+-1.3871        ?
   regexp                                            61.8230+-1.0898           61.5825+-1.4560        
   richards                                          54.3931+-1.1869           54.3314+-1.7836        
   splay                                             34.6575+-1.2398     ?     36.0469+-0.9957        ? might be 1.0401x slower

   &lt;geometric&gt;                                       47.6916+-0.7557     ?     47.8969+-0.2706        ? might be 1.0043x slower

                                                        TipOfTree             ParallelHelperPool                                
Octane:
   encrypt                                           0.16343+-0.00267          0.16310+-0.00195       
   decrypt                                           2.94817+-0.05449          2.89314+-0.00637         might be 1.0190x faster
   deltablue                                x2       0.13779+-0.00205    ?     0.13879+-0.00254       ?
   earley                                            0.30340+-0.00789          0.30223+-0.00443       
   boyer                                             4.30783+-0.02409          4.29217+-0.03977       
   navier-stokes                            x2       4.82042+-0.00795          4.80779+-0.01098       
   raytrace                                 x2       0.87676+-0.05835          0.85806+-0.00420         might be 1.0218x faster
   richards                                 x2       0.08839+-0.00068    ?     0.08871+-0.00080       ?
   splay                                    x2       0.33154+-0.00416          0.33099+-0.00137       
   regexp                                   x2      23.95248+-0.37488    ?    24.35841+-0.29745       ? might be 1.0169x slower
   pdfjs                                    x2      36.95942+-0.52543         36.75775+-0.45513       
   mandreel                                 x2      41.85882+-0.49120    ?    42.35157+-0.36371       ? might be 1.0118x slower
   gbemu                                    x2      33.13506+-5.06346         32.03116+-2.35316         might be 1.0345x faster
   closure                                           0.57249+-0.00310          0.57035+-0.00235       
   jquery                                            7.23814+-0.02116          7.21110+-0.02052       
   box2d                                    x2       9.10411+-0.06195          9.06213+-0.06407       
   zlib                                     x2     386.51659+-4.52678        385.91389+-5.79452       
   typescript                               x2     652.22147+-8.99379    ?   654.91033+-13.74540      ?

   &lt;geometric&gt;                                       5.31726+-0.07076          5.30404+-0.02898         might be 1.0025x faster

                                                        TipOfTree             ParallelHelperPool                                
Kraken:
   ai-astar                                          126.137+-0.702            126.066+-0.502         
   audio-beat-detection                               49.756+-0.358             49.647+-0.209         
   audio-dft                                          95.089+-0.585      ?      95.293+-0.163         ?
   audio-fft                                          35.076+-0.672             35.034+-0.461         
   audio-oscillator                                   55.413+-0.717      ?      55.541+-0.980         ?
   imaging-darkroom                                   59.730+-0.164      ?      59.848+-0.183         ?
   imaging-desaturate                                 47.560+-0.227             47.531+-0.376         
   imaging-gaussian-blur                              85.038+-0.487      ?      88.892+-6.168         ? might be 1.0453x slower
   json-parse-financial                               37.283+-0.456      ?      38.749+-1.274         ? might be 1.0393x slower
   json-stringify-tinderbox                           23.404+-1.308             21.919+-0.694           might be 1.0678x faster
   stanford-crypto-aes                                40.918+-0.919      ?      40.918+-1.438         ?
   stanford-crypto-ccm                                35.441+-1.153      ?      36.464+-1.711         ? might be 1.0289x slower
   stanford-crypto-pbkdf2                             93.509+-0.208      !      93.882+-0.145         ! definitely 1.0040x slower
   stanford-crypto-sha256-iterative                   36.001+-0.640      ?      36.955+-1.952         ? might be 1.0265x slower

   &lt;arithmetic&gt;                                       58.597+-0.130      ?      59.053+-0.559         ? might be 1.0078x slower

                                                        TipOfTree             ParallelHelperPool                                
JSRegress:
   abc-forward-loop-equal                            29.3565+-1.0327     ?     31.0222+-1.8528        ? might be 1.0567x slower
   abc-postfix-backward-loop                         29.7912+-0.5513           29.3668+-0.5314          might be 1.0145x faster
   abc-simple-backward-loop                          29.4310+-1.0981           29.3534+-0.7962        
   abc-simple-forward-loop                           29.7808+-1.5927           29.0624+-0.4607          might be 1.0247x faster
   abc-skippy-loop                                   21.6326+-0.3919           21.0678+-0.5134          might be 1.0268x faster
   abs-boolean                                        2.4848+-0.1656            2.4536+-0.0799          might be 1.0127x faster
   adapt-to-double-divide                            16.2429+-0.1942     ?     16.4609+-0.5834        ? might be 1.0134x slower
   aliased-arguments-getbyval                         1.1821+-0.0281     ?      1.3010+-0.3082        ? might be 1.1006x slower
   allocate-big-object                                2.5917+-0.2934            2.4178+-0.1343          might be 1.0719x faster
   arguments-named-and-reflective                    10.6881+-0.1507           10.4298+-0.2074          might be 1.0248x faster
   arguments-out-of-bounds                            9.2026+-0.2504     ?      9.2072+-0.3817        ?
   arguments-strict-mode                              9.5392+-0.6549     ?      9.5483+-0.3914        ?
   arguments                                          8.2852+-0.2653     ?      8.4510+-0.3825        ? might be 1.0200x slower
   arity-mismatch-inlining                            0.8222+-0.0106     ?      0.8616+-0.0376        ? might be 1.0480x slower
   array-access-polymorphic-structure                 7.0726+-0.3831            7.0293+-0.2144        
   array-nonarray-polymorhpic-access                 23.6395+-0.5155     ?     23.7437+-0.8642        ?
   array-prototype-every                             74.5624+-0.6370     ?     75.6059+-1.0363        ? might be 1.0140x slower
   array-prototype-forEach                           73.7615+-1.0234     ?     73.8851+-0.9513        ?
   array-prototype-map                               79.7467+-0.9320     ?     80.2307+-0.6464        ?
   array-prototype-reduce                            70.2190+-0.8770     ?     71.3728+-1.1883        ? might be 1.0164x slower
   array-prototype-reduceRight                       70.8346+-1.5496     ?     71.4663+-1.3753        ?
   array-prototype-some                              74.4315+-0.8592     ?     74.7282+-0.8082        ?
   array-splice-contiguous                           21.0511+-0.5749           20.3212+-0.6597          might be 1.0359x faster
   array-with-double-add                              3.3735+-0.0578     ?      3.4865+-0.1107        ? might be 1.0335x slower
   array-with-double-increment                        3.1378+-0.1577            3.0481+-0.0639          might be 1.0294x faster
   array-with-double-mul-add                          4.1968+-0.0944     ?      4.2897+-0.2413        ? might be 1.0221x slower
   array-with-double-sum                              3.2120+-0.1081     ?      3.2314+-0.0786        ?
   array-with-int32-add-sub                           5.8442+-0.1968     ?      5.8567+-0.2952        ?
   array-with-int32-or-double-sum                     3.2271+-0.0461     ?      3.3396+-0.1125        ? might be 1.0349x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.7962+-0.8155     ?     26.2505+-1.3011        ? might be 1.0176x slower
   ArrayBuffer-DataView-alloc-long-lived             11.8668+-0.5699     ?     12.0131+-0.5715        ? might be 1.0123x slower
   ArrayBuffer-Int32Array-byteOffset                  3.5920+-0.1720            3.4819+-0.0327          might be 1.0316x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.4563+-0.9379           25.8607+-0.7490          might be 1.0230x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.2873+-0.8727     ?     19.7725+-0.5821        ? might be 1.0252x slower
   ArrayBuffer-Int8Array-alloc-long-lived            11.2677+-0.5516     ?     11.9112+-0.9822        ? might be 1.0571x slower
   ArrayBuffer-Int8Array-alloc                        9.3154+-0.2028     ?      9.5407+-0.3360        ? might be 1.0242x slower
   arrowfunction-call                                10.4272+-0.1500     ?     10.7147+-0.1907        ? might be 1.0276x slower
   asmjs_bool_bug                                     7.4775+-0.1389     ?      7.6511+-0.2795        ? might be 1.0232x slower
   assign-custom-setter-polymorphic                   2.4796+-0.0398            2.4779+-0.1156        
   assign-custom-setter                               3.4798+-0.0856     ^      3.2400+-0.0417        ^ definitely 1.0740x faster
   basic-set                                          7.1322+-0.2514     ?      7.4105+-0.5650        ? might be 1.0390x slower
   big-int-mul                                        3.4929+-0.0375     ?      3.5125+-0.0412        ?
   boolean-test                                       3.0570+-0.0552            3.0556+-0.0806        
   branch-fold                                        3.5759+-0.0483     ?      3.6265+-0.0553        ? might be 1.0141x slower
   branch-on-string-as-boolean                       17.1311+-0.6498           16.7138+-0.4266          might be 1.0250x faster
   by-val-generic                                     2.4874+-0.0899     ?      2.5834+-0.2736        ? might be 1.0386x slower
   call-spread-apply                                 27.0971+-0.8009     ?     27.5159+-1.2324        ? might be 1.0155x slower
   call-spread-call                                  21.4626+-0.4063     ?     21.5661+-0.6216        ?
   captured-assignments                               0.5231+-0.2430            0.4132+-0.0053          might be 1.2662x faster
   cast-int-to-double                                 5.0504+-0.0742     ?      5.2079+-0.2798        ? might be 1.0312x slower
   cell-argument                                      5.9909+-0.3708            5.8680+-0.1939          might be 1.0210x faster
   cfg-simplify                                       2.8473+-0.0468     ?      2.8748+-0.0681        ?
   chain-getter-access                                8.3989+-0.1335            8.2409+-0.1293          might be 1.0192x faster
   cmpeq-obj-to-obj-other                            12.6030+-1.0444           11.9971+-1.2182          might be 1.0505x faster
   constant-test                                      4.8196+-0.0917     ?      4.8638+-0.1182        ?
   create-lots-of-functions                           9.4813+-0.4761            9.2423+-0.4429          might be 1.0259x faster
   cse-new-array-buffer                               2.3040+-0.1265     ?      2.3085+-0.0937        ?
   cse-new-array                                      2.4287+-0.0913     ?      2.6374+-0.3116        ? might be 1.0859x slower
   DataView-custom-properties                        30.8669+-1.1588           30.6830+-1.0097        
   delay-tear-off-arguments-strictmode               12.3640+-0.4357     ?     12.3947+-0.4274        ?
   deltablue-varargs                                167.8660+-3.5312     ?    172.7589+-3.2891        ? might be 1.0291x slower
   destructuring-arguments                          159.1486+-0.6103     ?    160.2453+-1.2824        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4861+-0.0836     ?      0.5148+-0.1033        ? might be 1.0590x slower
   destructuring-swap                                 4.8428+-0.2323            4.7849+-0.0678          might be 1.0121x faster
   direct-arguments-getbyval                          1.1347+-0.0166     !      1.2075+-0.0500        ! definitely 1.0642x slower
   div-boolean-double                                 5.2413+-0.1098     ?      5.3645+-0.1080        ? might be 1.0235x slower
   div-boolean                                        8.2072+-0.2929     ?      8.2744+-0.2825        ?
   double-get-by-val-out-of-bounds                    4.4515+-0.0672     ?      4.4810+-0.1781        ?
   double-pollution-getbyval                          8.7360+-0.0920            8.6736+-0.1610        
   double-pollution-putbyoffset                       4.0387+-0.5099            3.5668+-0.1647          might be 1.1323x faster
   double-real-use                                   24.5575+-1.4997           23.6573+-0.5163          might be 1.0381x faster
   double-to-int32-typed-array-no-inline              2.2629+-0.1695            2.2012+-0.1551          might be 1.0280x faster
   double-to-int32-typed-array                        2.0365+-0.0276     ?      2.0759+-0.0821        ? might be 1.0194x slower
   double-to-uint32-typed-array-no-inline             2.2050+-0.0554     ?      2.3474+-0.2306        ? might be 1.0646x slower
   double-to-uint32-typed-array                       2.0994+-0.0866            2.0953+-0.0165        
   elidable-new-object-dag                           33.9170+-0.7471           33.5063+-0.5747          might be 1.0123x faster
   elidable-new-object-roflcopter                    32.4588+-0.2753     ?     32.4715+-1.1477        ?
   elidable-new-object-then-call                     31.9255+-1.1010           31.6553+-0.9619        
   elidable-new-object-tree                          37.6223+-1.0741           36.9362+-0.4600          might be 1.0186x faster
   empty-string-plus-int                              4.7040+-0.0544     ?      4.7133+-0.0937        ?
   emscripten-cube2hash                              27.6944+-1.7620           27.2388+-0.6391          might be 1.0167x faster
   exit-length-on-plain-object                       16.3444+-1.2514           15.6522+-0.5977          might be 1.0442x faster
   external-arguments-getbyval                        1.2690+-0.0883     ?      1.3101+-0.0735        ? might be 1.0324x slower
   external-arguments-putbyval                        2.2081+-0.1511     ?      2.2174+-0.1200        ?
   fixed-typed-array-storage-var-index                1.3475+-0.3490            1.2414+-0.0788          might be 1.0855x faster
   fixed-typed-array-storage                          0.9848+-0.0544            0.9353+-0.0766          might be 1.0529x faster
   Float32Array-matrix-mult                           3.9841+-0.0731     ?      4.0958+-0.4146        ? might be 1.0281x slower
   Float32Array-to-Float64Array-set                  46.8357+-0.8639           46.7759+-0.7813        
   Float64Array-alloc-long-lived                     59.5727+-1.9765     ?     60.0234+-1.3327        ?
   Float64Array-to-Int16Array-set                    56.7699+-1.0771           56.2013+-0.6626          might be 1.0101x faster
   fold-double-to-int                                12.1760+-0.1663           12.1534+-0.1360        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.4807+-0.8839     ?     11.1325+-1.0295        ? might be 1.0622x slower
   fold-get-by-id-to-multi-get-by-offset             10.6729+-1.5534           10.0416+-0.5594          might be 1.0629x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.2352+-0.5870            9.1383+-0.7223          might be 1.0106x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2409+-1.0132            9.0216+-0.5751          might be 1.0243x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.1681+-1.2521     ?      9.9054+-1.4483        ? might be 1.0804x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.8474+-1.7473           10.8092+-0.9561        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.1004+-0.2344     ?      9.3192+-0.5691        ? might be 1.0240x slower
   fold-put-by-id-to-multi-put-by-offset             11.0763+-0.9677     ?     12.6783+-2.5683        ? might be 1.1446x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.8389+-0.6064     ?     11.0068+-0.7783        ? might be 1.0155x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.4877+-0.7344     ?     10.9761+-0.7447        ? might be 1.0466x slower
   fold-put-structure                                 7.4094+-1.1789     ?      8.1991+-0.3357        ? might be 1.1066x slower
   for-of-iterate-array-entries                      10.7965+-0.1067           10.7600+-0.2025        
   for-of-iterate-array-keys                          3.4501+-0.0748     ?      3.5382+-0.4152        ? might be 1.0255x slower
   for-of-iterate-array-values                        3.6132+-0.4172            3.3318+-0.1059          might be 1.0845x faster
   fround                                            18.2111+-0.4730           18.1421+-1.1409        
   ftl-library-inlining-dataview                     56.4142+-0.2190           55.8224+-0.6345          might be 1.0106x faster
   ftl-library-inlining                              95.5581+-0.5499           95.2924+-0.4687        
   function-call                                     10.8105+-0.2711     ?     10.8851+-0.1592        ?
   function-dot-apply                                 2.1627+-0.1397            2.0641+-0.1477          might be 1.0478x faster
   function-test                                      2.7878+-0.2491            2.7455+-0.0944          might be 1.0154x faster
   function-with-eval                                91.5505+-0.3059     ?     93.4033+-1.9011        ? might be 1.0202x slower
   gcse-poly-get-less-obvious                        20.3363+-0.3851     ?     20.3853+-0.3501        ?
   gcse-poly-get                                     22.4937+-1.0273     ?     22.6642+-0.8397        ?
   gcse                                               3.5188+-0.1518            3.4017+-0.0348          might be 1.0344x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6298+-0.0891            2.6172+-0.0825        
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7826+-0.1820            4.7096+-0.0998          might be 1.0155x faster
   get-by-id-chain-from-try-block                     2.5400+-0.2495     ?      2.5651+-0.3229        ?
   get-by-id-check-structure-elimination              3.9961+-0.1522            3.9094+-0.0709          might be 1.0222x faster
   get-by-id-proto-or-self                           15.1374+-0.3066     ?     15.5473+-0.5754        ? might be 1.0271x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9500+-0.1272            2.8846+-0.0726          might be 1.0227x faster
   get-by-id-self-or-proto                           15.7680+-1.0238     ?     15.8248+-0.5483        ?
   get-by-val-out-of-bounds                           4.3104+-0.1146     ?      4.3688+-0.2105        ? might be 1.0136x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7129+-0.0379            2.7096+-0.1101        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      5.8228+-0.0281     ?      5.8603+-0.1184        ?
   get-by-val-with-string-chain-from-try-block   
                                                      2.4559+-0.1264            2.3769+-0.0045          might be 1.0332x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.2392+-0.0832            5.2046+-0.1634        
   get-by-val-with-string-proto-or-self              15.4528+-0.6247     ?     15.7096+-0.5122        ? might be 1.0166x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1660+-0.2759            3.1572+-0.1307        
   get-by-val-with-string-self-or-proto              15.9467+-0.6466           15.7133+-0.8377          might be 1.0149x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0986+-0.0303            3.0863+-0.0356        
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3212+-0.0864           12.2513+-0.0412        
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.4749+-0.1629     ?      2.5348+-0.2313        ? might be 1.0242x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.4203+-0.4333           11.2365+-0.1053          might be 1.0164x faster
   get-by-val-with-symbol-proto-or-self              15.5873+-0.7831           15.5483+-0.7293        
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0209+-0.4042            3.7020+-0.1585          might be 1.0861x faster
   get-by-val-with-symbol-self-or-proto              15.8728+-0.7238           15.8668+-1.0346        
   get_callee_monomorphic                             2.3732+-0.1104     ?      2.5224+-0.5199        ? might be 1.0629x slower
   get_callee_polymorphic                             3.4611+-0.3077            3.3736+-0.3556          might be 1.0259x faster
   getter-no-activation                               4.7616+-0.1553            4.7422+-0.2508        
   getter-prototype                                   7.8935+-0.1788     ?      7.9819+-0.2259        ? might be 1.0112x slower
   getter-richards                                  119.0602+-9.9869          114.7559+-8.3484          might be 1.0375x faster
   getter                                             5.3080+-0.4459     ?      5.3659+-0.4727        ? might be 1.0109x slower
   global-object-access-with-mutating-structure   
                                                      5.6175+-0.1955            5.5761+-0.1240        
   global-var-const-infer-fire-from-opt               0.8607+-0.0801     ?      0.8703+-0.0821        ? might be 1.0112x slower
   global-var-const-infer                             0.6394+-0.0318     ?      0.6530+-0.0203        ? might be 1.0214x slower
   hard-overflow-check-equal                         26.2897+-0.5881     ?     26.7191+-0.8121        ? might be 1.0163x slower
   hard-overflow-check                               26.6345+-1.0546     ?     26.6432+-0.2225        ?
   HashMap-put-get-iterate-keys                      25.7031+-1.9463     ?     26.5482+-1.8008        ? might be 1.0329x slower
   HashMap-put-get-iterate                           28.2694+-1.1328           27.5800+-0.6482          might be 1.0250x faster
   HashMap-string-put-get-iterate                    24.4550+-1.0591           23.7402+-0.6055          might be 1.0301x faster
   hoist-make-rope                                    9.1133+-0.7831     ?      9.2104+-0.9708        ? might be 1.0107x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.7140+-0.1865            3.5447+-0.0450          might be 1.0478x faster
   hoist-poly-check-structure                         3.1646+-0.0978     ?      3.1914+-0.1601        ?
   imul-double-only                                   7.8158+-0.1566            7.7408+-0.1084        
   imul-int-only                                      9.0356+-0.3665            8.7873+-0.8767          might be 1.0283x faster
   imul-mixed                                         6.8087+-0.7229     ?      6.9012+-0.2755        ? might be 1.0136x slower
   in-four-cases                                     17.0128+-0.4362     ?     17.1189+-0.5557        ?
   in-one-case-false                                  9.4655+-0.2469     ?     10.0965+-0.8116        ? might be 1.0667x slower
   in-one-case-true                                   9.9453+-0.8318            9.5506+-0.4274          might be 1.0413x faster
   in-two-cases                                      10.1339+-0.6603            9.5269+-0.1093          might be 1.0637x faster
   indexed-properties-in-objects                      2.7344+-0.0289     ?      2.7851+-0.1134        ? might be 1.0185x slower
   infer-closure-const-then-mov-no-inline             3.6414+-0.1464            3.5841+-0.0362          might be 1.0160x faster
   infer-closure-const-then-mov                      18.8162+-0.6625     ?     18.8378+-0.4839        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.8014+-0.2542           10.7742+-0.1370        
   infer-closure-const-then-put-to-scope             22.6386+-0.9609     ?     23.0738+-1.1797        ? might be 1.0192x slower
   infer-closure-const-then-reenter-no-inline   
                                                     44.9486+-0.7900     ?     45.2117+-0.5123        ?
   infer-closure-const-then-reenter                  22.6184+-0.5018     ?     23.8609+-0.9626        ? might be 1.0549x slower
   infer-constant-global-property                     3.3894+-0.0511            3.3758+-0.0732        
   infer-constant-property                            2.7150+-0.2658            2.6262+-0.0830          might be 1.0338x faster
   infer-one-time-closure-ten-vars                    7.9693+-0.5260            7.7623+-0.1160          might be 1.0267x faster
   infer-one-time-closure-two-vars                    7.6501+-0.5744            7.6404+-0.6334        
   infer-one-time-closure                             7.2405+-0.1119            7.1614+-0.3940          might be 1.0111x faster
   infer-one-time-deep-closure                       10.6788+-0.2469     ?     10.7645+-0.3737        ?
   inline-arguments-access                            3.6673+-0.2454            3.6465+-0.1146        
   inline-arguments-aliased-access                    3.6794+-0.0924     ?      3.8422+-0.3734        ? might be 1.0442x slower
   inline-arguments-local-escape                      3.7056+-0.3390            3.5457+-0.0605          might be 1.0451x faster
   inline-get-scoped-var                              4.5418+-0.1585            4.5095+-0.1070        
   inlined-put-by-id-transition                       9.7186+-1.6817            8.9215+-0.4415          might be 1.0893x faster
   inlined-put-by-val-with-string-transition   
                                                     42.6241+-1.1743           42.0691+-1.5529          might be 1.0132x faster
   inlined-put-by-val-with-symbol-transition   
                                                     43.3025+-2.2422           42.4315+-1.4180          might be 1.0205x faster
   int-or-other-abs-then-get-by-val                   4.4167+-0.0576     ?      4.5500+-0.1379        ? might be 1.0302x slower
   int-or-other-abs-zero-then-get-by-val             15.3950+-0.3113           15.3335+-0.2753        
   int-or-other-add-then-get-by-val                   4.0481+-0.1070     ?      4.0682+-0.1162        ?
   int-or-other-add                                   4.9826+-0.2172     ?      5.0635+-0.1760        ? might be 1.0162x slower
   int-or-other-div-then-get-by-val                   3.8110+-0.1744            3.7661+-0.0845          might be 1.0119x faster
   int-or-other-max-then-get-by-val                   3.8939+-0.0909     ?      4.0365+-0.2729        ? might be 1.0366x slower
   int-or-other-min-then-get-by-val                   3.7689+-0.0564            3.7610+-0.0532        
   int-or-other-mod-then-get-by-val                   3.5532+-0.1756            3.5467+-0.1878        
   int-or-other-mul-then-get-by-val                   3.6596+-0.0891            3.5919+-0.0789          might be 1.0189x faster
   int-or-other-neg-then-get-by-val                   3.9577+-0.0902     ?      3.9670+-0.0326        ?
   int-or-other-neg-zero-then-get-by-val             15.6159+-0.3045           15.4045+-0.3922          might be 1.0137x faster
   int-or-other-sub-then-get-by-val                   3.9610+-0.0415     ?      4.0350+-0.0530        ? might be 1.0187x slower
   int-or-other-sub                                   3.5075+-0.1072            3.4165+-0.1048          might be 1.0267x faster
   int-overflow-local                                 4.0496+-0.0315     ?      4.1213+-0.0915        ? might be 1.0177x slower
   Int16Array-alloc-long-lived                       43.2995+-0.8622           42.8477+-1.1305          might be 1.0105x faster
   Int16Array-bubble-sort-with-byteLength            17.1314+-0.4944           16.6690+-0.1648          might be 1.0277x faster
   Int16Array-bubble-sort                            16.5985+-0.3058     ?     16.9073+-0.9682        ? might be 1.0186x slower
   Int16Array-load-int-mul                            1.4413+-0.0634     ?      1.5373+-0.1972        ? might be 1.0666x slower
   Int16Array-to-Int32Array-set                      44.4871+-0.5405           43.1043+-0.9482          might be 1.0321x faster
   Int32Array-alloc-large                            11.9762+-0.7968           11.9623+-0.6352        
   Int32Array-alloc-long-lived                       48.5172+-1.3361           48.1144+-1.2252        
   Int32Array-alloc                                   2.8298+-0.2230     ?      2.8300+-0.1564        ?
   Int32Array-Int8Array-view-alloc                    5.8675+-0.1196     ?      5.9424+-0.2765        ? might be 1.0128x slower
   int52-spill                                        4.6311+-0.3230     ?      4.6459+-0.2634        ?
   Int8Array-alloc-long-lived                        38.1646+-1.0949     ?     38.3647+-1.1864        ?
   Int8Array-load-with-byteLength                     3.3700+-0.0562     ?      3.7047+-0.5697        ? might be 1.0993x slower
   Int8Array-load                                     3.4621+-0.1709            3.4060+-0.1011          might be 1.0165x faster
   integer-divide                                    10.3601+-0.1310           10.3494+-0.2497        
   integer-modulo                                     1.5836+-0.0377     ?      1.5914+-0.0411        ?
   is-boolean-fold-tricky                             3.8313+-0.2410     ?      3.8393+-0.2044        ?
   is-boolean-fold                                    2.7354+-0.2065            2.6140+-0.0324          might be 1.0464x faster
   is-function-fold-tricky-internal-function   
                                                      9.5305+-0.1155     ?      9.6943+-0.3340        ? might be 1.0172x slower
   is-function-fold-tricky                            4.2410+-0.4476            4.0590+-0.0645          might be 1.0448x faster
   is-function-fold                                   2.6386+-0.0755     ?      2.6755+-0.0855        ? might be 1.0140x slower
   is-number-fold-tricky                              3.9211+-0.0345     ?      3.9917+-0.1681        ? might be 1.0180x slower
   is-number-fold                                     2.5924+-0.0381     ?      2.6210+-0.0675        ? might be 1.0110x slower
   is-object-or-null-fold-functions                   2.7622+-0.1320            2.7206+-0.1188          might be 1.0153x faster
   is-object-or-null-fold-less-tricky                 3.9877+-0.0408     ?      4.0920+-0.1602        ? might be 1.0262x slower
   is-object-or-null-fold-tricky                      5.5365+-1.1037            4.7620+-0.1858          might be 1.1626x faster
   is-object-or-null-fold                             2.7199+-0.0986            2.6864+-0.0216          might be 1.0125x faster
   is-object-or-null-trickier-function                3.9971+-0.0499     ?      4.0245+-0.0481        ?
   is-object-or-null-trickier-internal-function   
                                                      9.8190+-0.1828     !     10.1550+-0.1470        ! definitely 1.0342x slower
   is-object-or-null-tricky-function                  4.0066+-0.0463     ?      4.2652+-0.4422        ? might be 1.0645x slower
   is-object-or-null-tricky-internal-function   
                                                      7.3351+-0.1328     !      7.6739+-0.0982        ! definitely 1.0462x slower
   is-string-fold-tricky                              3.9874+-0.0531     ?      3.9973+-0.1352        ?
   is-string-fold                                     2.6693+-0.1171            2.6491+-0.0238        
   is-undefined-fold-tricky                           3.3232+-0.0672     ?      3.3423+-0.0531        ?
   is-undefined-fold                                  2.6231+-0.0520     ?      2.6419+-0.0519        ?
   JSONP-negative-0                                   0.2604+-0.0330            0.2484+-0.0081          might be 1.0484x faster
   large-int-captured                                 4.2973+-0.3169            4.2202+-0.2129          might be 1.0183x faster
   large-int-neg                                     14.7954+-0.8013           13.9581+-0.1734          might be 1.0600x faster
   large-int                                         13.4844+-0.7982           13.0754+-0.3290          might be 1.0313x faster
   load-varargs-elimination                          20.6490+-0.6290           20.3594+-0.8424          might be 1.0142x faster
   logical-not-weird-types                            2.9992+-0.0327     ?      3.0846+-0.1091        ? might be 1.0285x slower
   logical-not                                        4.4164+-0.1109            4.3474+-0.1050          might be 1.0159x faster
   lots-of-fields                                     9.5087+-0.5004            9.4936+-0.5264        
   make-indexed-storage                               2.7808+-0.2482            2.7718+-0.2194        
   make-rope-cse                                      3.9319+-0.4784            3.5344+-0.0372          might be 1.1125x faster
   marsaglia-larger-ints                             32.9067+-1.5389           32.3362+-1.6979          might be 1.0176x faster
   marsaglia-osr-entry                               21.2575+-0.5225     ?     21.3472+-0.4127        ?
   math-with-out-of-bounds-array-values              21.5580+-0.3866     ?     21.6646+-1.2230        ?
   max-boolean                                        2.6102+-0.1065     ?      2.6421+-0.0489        ? might be 1.0122x slower
   method-on-number                                  15.4083+-0.4428     ?     15.5264+-0.4749        ?
   min-boolean                                        2.5866+-0.0313     ?      2.6546+-0.0955        ? might be 1.0263x slower
   minus-boolean-double                               3.1091+-0.0569     ?      3.1620+-0.1375        ? might be 1.0170x slower
   minus-boolean                                      2.3064+-0.0218     ?      2.3627+-0.0922        ? might be 1.0244x slower
   misc-strict-eq                                    28.2740+-0.8269     ?     29.5530+-1.9318        ? might be 1.0452x slower
   mod-boolean-double                                11.1554+-0.3663           11.1373+-0.1828        
   mod-boolean                                        8.3034+-0.1700     ?      8.4493+-0.3886        ? might be 1.0176x slower
   mul-boolean-double                                 3.6550+-0.1095            3.5960+-0.0607          might be 1.0164x faster
   mul-boolean                                        2.8509+-0.1725            2.8058+-0.0727          might be 1.0161x faster
   neg-boolean                                        3.0974+-0.0596            3.0641+-0.0341          might be 1.0108x faster
   negative-zero-divide                               0.3608+-0.0335            0.3603+-0.0762        
   negative-zero-modulo                               0.3303+-0.0161     ?      0.3787+-0.0794        ? might be 1.1465x slower
   negative-zero-negate                               0.3476+-0.0566            0.3187+-0.0024          might be 1.0904x faster
   nested-function-parsing                           44.3195+-0.5547     ?     44.3249+-0.6894        ?
   new-array-buffer-dead                             86.6065+-0.3025     ?     87.4377+-0.9717        ?
   new-array-buffer-push                              6.6640+-1.0166            6.1062+-0.1240          might be 1.0914x faster
   new-array-dead                                    15.1968+-1.0878           14.7859+-0.6634          might be 1.0278x faster
   new-array-push                                     3.4681+-0.1090            3.3714+-0.0456          might be 1.0287x faster
   no-inline-constructor                             30.9118+-0.7755     ?     30.9155+-0.7164        ?
   number-test                                        3.0039+-0.0382     ?      3.0677+-0.0561        ? might be 1.0213x slower
   object-closure-call                                4.8431+-0.0256     ?      4.8966+-0.1231        ? might be 1.0111x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.2254+-0.2372            4.0466+-0.1704          might be 1.0442x faster
   object-test                                        2.6862+-0.0459     ?      2.7699+-0.0484        ? might be 1.0311x slower
   obvious-sink-pathology-taken                      97.5746+-0.6149     ?     97.6515+-0.6388        ?
   obvious-sink-pathology                            92.8748+-1.1597     ?     92.9670+-1.2502        ?
   obviously-elidable-new-object                     28.5708+-0.6228     ?     28.8054+-0.7981        ?
   plus-boolean-arith                                 2.3924+-0.1264     ?      2.4629+-0.1670        ? might be 1.0294x slower
   plus-boolean-double                                3.1053+-0.0514            3.0969+-0.0473        
   plus-boolean                                       2.5821+-0.1540            2.5259+-0.0501          might be 1.0222x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.1890+-0.0427            3.1623+-0.0310        
   poly-chain-access-different-prototypes             3.2613+-0.0501     ?      3.2665+-0.0944        ?
   poly-chain-access-simpler                          3.2534+-0.1208     ?      3.6232+-0.8147        ? might be 1.1137x slower
   poly-chain-access                                  3.2681+-0.0795     ?      3.3290+-0.1545        ? might be 1.0186x slower
   poly-stricteq                                     48.8830+-0.1800     ?     48.9623+-0.4356        ?
   polymorphic-array-call                             1.3306+-0.0548            1.2556+-0.0601          might be 1.0597x faster
   polymorphic-get-by-id                              2.8398+-0.0416     ?      2.8664+-0.0854        ?
   polymorphic-put-by-id                             28.2633+-1.4489           28.1894+-1.7182        
   polymorphic-put-by-val-with-string                28.5860+-0.4248     ?     29.0419+-1.6790        ? might be 1.0160x slower
   polymorphic-put-by-val-with-symbol                29.0743+-0.5832           29.0348+-1.0786        
   polymorphic-structure                             14.0579+-3.0330           12.4952+-0.4418          might be 1.1251x faster
   polyvariant-monomorphic-get-by-id                  7.5096+-1.2529            6.3908+-0.8487          might be 1.1751x faster
   proto-getter-access                                8.3421+-0.2234     ?      8.3998+-0.3137        ?
   prototype-access-with-mutating-prototype           5.4835+-0.2098            5.4172+-0.2232          might be 1.0122x faster
   put-by-id-replace-and-transition                   7.6007+-0.4711     ?      7.7330+-0.7646        ? might be 1.0174x slower
   put-by-id-slightly-polymorphic                     2.6693+-0.0202     ?      2.7060+-0.0292        ? might be 1.0138x slower
   put-by-id                                         10.1565+-0.5094            9.8857+-0.4965          might be 1.0274x faster
   put-by-val-direct                                  0.3335+-0.0106     ?      0.3800+-0.0618        ? might be 1.1396x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.2738+-0.2928     ?      5.7930+-0.8042        ? might be 1.0985x slower
   put-by-val-machine-int                             2.5371+-0.1509            2.4472+-0.0720          might be 1.0367x faster
   put-by-val-with-string-replace-and-transition   
                                                     10.4202+-0.2969     ?     10.7699+-0.4777        ? might be 1.0336x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9110+-0.0316     ?      3.0379+-0.1894        ? might be 1.0436x slower
   put-by-val-with-string                            10.1071+-0.3918     ?     10.5052+-0.6443        ? might be 1.0394x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     11.8419+-0.4317           11.7856+-0.4352        
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2135+-0.1890     ?      3.3250+-0.2135        ? might be 1.0347x slower
   put-by-val-with-symbol                            10.2437+-0.4533     ?     10.9224+-0.8477        ? might be 1.0663x slower
   rare-osr-exit-on-local                            13.8951+-0.4876           13.3469+-0.0870          might be 1.0411x faster
   raytrace-with-empty-try-catch                      5.1696+-0.1871            5.0948+-0.0404          might be 1.0147x faster
   raytrace-with-try-catch                            9.9105+-0.1863     ?      9.9575+-0.2816        ?
   register-pressure-from-osr                        16.4480+-0.2775     ?     16.5224+-0.4097        ?
   repeat-multi-get-by-offset                        20.4210+-0.7246     ?     20.4836+-0.5127        ?
   richards-empty-try-catch                          74.6801+-0.7977           74.1591+-1.0262        
   richards-try-catch                               241.4964+-2.1454          240.9025+-1.9898        
   setter-prototype                                   7.8885+-0.3935     ?      7.9046+-0.3373        ?
   setter                                             5.6474+-0.4507            5.5835+-0.6598          might be 1.0114x faster
   simple-activation-demo                            24.1150+-0.4533           24.0153+-0.4877        
   simple-getter-access                              10.7463+-0.4197     ?     10.8721+-0.3903        ? might be 1.0117x slower
   simple-poly-call-nested                            9.1348+-0.3713            8.5956+-0.6041          might be 1.0627x faster
   simple-poly-call                                   1.2584+-0.0267     ?      1.3909+-0.1834        ? might be 1.1053x slower
   sin-boolean                                       20.2623+-2.0284           18.7060+-1.6909          might be 1.0832x faster
   singleton-scope                                   55.4791+-0.5753     ?     56.1047+-0.7566        ? might be 1.0113x slower
   sink-function                                     10.0931+-0.5567     ?     10.4807+-1.2054        ? might be 1.0384x slower
   sink-huge-activation                              16.9272+-0.9447           16.8241+-0.9365        
   sinkable-new-object-dag                           53.3750+-0.5963     ?     55.5417+-2.7107        ? might be 1.0406x slower
   sinkable-new-object-taken                         44.1523+-0.8778           43.8390+-1.0670        
   sinkable-new-object                               29.5261+-0.3168     ?     29.6653+-0.6363        ?
   slow-array-profile-convergence                     2.5245+-0.1113            2.5113+-0.0671        
   slow-convergence                                   2.3451+-0.0537            2.3012+-0.0371          might be 1.0191x faster
   slow-ternaries                                    17.9653+-1.0141           17.4788+-0.4184          might be 1.0278x faster
   sorting-benchmark                                 16.9148+-0.7482     ?     17.0519+-0.8636        ?
   sparse-conditional                                 1.1746+-0.0539     ?      1.1852+-0.1140        ?
   splice-to-remove                                  12.2147+-0.4477     ?     12.3866+-0.4591        ? might be 1.0141x slower
   string-char-code-at                               12.9472+-0.1404     ?     13.1440+-0.2408        ? might be 1.0152x slower
   string-concat-object                               2.2061+-0.1055            2.1649+-0.0612          might be 1.0190x faster
   string-concat-pair-object                          2.1234+-0.1601            2.1231+-0.0818        
   string-concat-pair-simple                          9.3406+-0.4451     ?      9.7102+-0.9358        ? might be 1.0396x slower
   string-concat-simple                               9.7193+-0.4496     ?     10.5088+-2.1247        ? might be 1.0812x slower
   string-cons-repeat                                 6.3597+-0.1519     ?      6.4084+-0.1793        ?
   string-cons-tower                                  6.6364+-0.1780            6.5843+-0.3248        
   string-equality                                   15.0114+-0.3327           14.9855+-0.3474        
   string-get-by-val-big-char                         6.5044+-0.0943            6.4815+-0.0621        
   string-get-by-val-out-of-bounds-insane             3.2540+-0.3156            3.0799+-0.1214          might be 1.0565x faster
   string-get-by-val-out-of-bounds                    4.1152+-0.3561            3.9595+-0.2400          might be 1.0393x faster
   string-get-by-val                                  2.8127+-0.0427            2.7889+-0.0166        
   string-hash                                        1.9093+-0.1614            1.8412+-0.0526          might be 1.0370x faster
   string-long-ident-equality                        13.5992+-0.9678           13.2061+-0.2427          might be 1.0298x faster
   string-out-of-bounds                              10.2600+-0.6198           10.2426+-0.5000        
   string-repeat-arith                               27.1294+-1.9850           26.4701+-0.5211          might be 1.0249x faster
   string-sub                                        53.9452+-0.5260     ?     54.1053+-0.5833        ?
   string-test                                        2.8825+-0.0913     ?      2.8994+-0.1128        ?
   string-var-equality                               26.5474+-0.6164     ?     27.1690+-1.5696        ? might be 1.0234x slower
   structure-hoist-over-transitions                   2.3041+-0.0899     ?      2.3405+-0.1026        ? might be 1.0158x slower
   substring-concat-weird                            35.9076+-0.7507     ?     36.0751+-1.8344        ?
   substring-concat                                  39.2244+-0.9722     ?     39.3648+-0.9156        ?
   substring                                         44.4754+-0.6751     ?     44.7293+-1.0340        ?
   switch-char-constant                               2.6519+-0.0535     ?      2.7227+-0.0715        ? might be 1.0267x slower
   switch-char                                        5.9419+-0.9988     ?      6.2082+-0.9391        ? might be 1.0448x slower
   switch-constant                                    8.3178+-1.0719     ?      8.3855+-0.8487        ?
   switch-string-basic-big-var                       14.5553+-0.4162           14.2636+-0.1317          might be 1.0204x faster
   switch-string-basic-big                           15.0913+-0.3046     ?     15.1725+-0.1661        ?
   switch-string-basic-var                           13.4137+-0.2847     ?     13.5043+-0.4941        ?
   switch-string-basic                               12.5241+-0.5112           12.5144+-0.3866        
   switch-string-big-length-tower-var                18.2237+-0.8138           18.1006+-0.4993        
   switch-string-length-tower-var                    13.2668+-0.3905           13.2432+-0.3911        
   switch-string-length-tower                        11.2128+-0.1285     ?     11.3698+-0.0545        ? might be 1.0140x slower
   switch-string-short                               11.3896+-0.2214           11.2258+-0.1083          might be 1.0146x faster
   switch                                            11.0766+-0.8017     ?     11.1951+-0.8196        ? might be 1.0107x slower
   tear-off-arguments-simple                          3.1184+-0.1647     ?      3.4198+-0.7459        ? might be 1.0967x slower
   tear-off-arguments                                 4.2604+-0.4418            3.9475+-0.0788          might be 1.0793x faster
   temporal-structure                                12.2130+-0.7872           11.6562+-0.1047          might be 1.0478x faster
   to-int32-boolean                                  12.8454+-0.6960           12.5456+-0.2090          might be 1.0239x faster
   try-catch-get-by-val-cloned-arguments              9.6792+-0.4189            9.5939+-0.2517        
   try-catch-get-by-val-direct-arguments              2.2733+-0.2505            2.2324+-0.2693          might be 1.0183x faster
   try-catch-get-by-val-scoped-arguments              4.9942+-0.2145            4.6955+-0.1419          might be 1.0636x faster
   typed-array-get-set-by-val-profiling              27.4358+-0.5585           26.8394+-0.4618          might be 1.0222x faster
   undefined-property-access                        216.0598+-0.6995     ?    216.4635+-1.4428        ?
   undefined-test                                     2.9856+-0.0898     ?      3.0613+-0.0809        ? might be 1.0254x slower
   unprofiled-licm                                    9.6752+-0.3929            9.3211+-0.4896          might be 1.0380x faster
   v8-raytrace-with-empty-try-catch                  49.2170+-0.4580     ?     49.5795+-1.9464        ?
   v8-raytrace-with-try-catch                        61.7539+-0.5760           61.5331+-0.7321        
   varargs-call                                      12.7864+-0.1292     ?     13.0188+-0.2522        ? might be 1.0182x slower
   varargs-construct-inline                          21.8156+-0.8146           21.5449+-0.6859          might be 1.0126x faster
   varargs-construct                                 20.5729+-0.6290     ?     21.1206+-0.7438        ? might be 1.0266x slower
   varargs-inline                                     8.6338+-0.1354     ?      8.6540+-0.2113        ?
   varargs-strict-mode                                9.6808+-0.3116            9.6558+-0.3358        
   varargs                                            9.4506+-0.1032            9.4299+-0.0304        
   weird-inlining-const-prop                          2.1017+-0.0881     ?      2.1657+-0.1970        ? might be 1.0305x slower

   &lt;geometric&gt;                                        7.9726+-0.0181            7.9709+-0.0132          might be 1.0002x faster

                                                        TipOfTree             ParallelHelperPool                                
AsmBench:
   bigfib.cpp                                       442.1815+-6.3538     ?    453.0791+-13.7661       ? might be 1.0246x slower
   cray.c                                           392.3013+-3.3147          392.1994+-4.0855        
   dry.c                                            417.9313+-7.8421          415.9226+-7.4424        
   FloatMM.c                                        681.3876+-3.5137     ?    681.4820+-2.3939        ?
   gcc-loops.cpp                                   3408.7941+-16.8878    ?   3415.2036+-33.6737       ?
   n-body.c                                         819.6172+-0.6425     ?    862.8707+-105.3475      ? might be 1.0528x slower
   Quicksort.c                                      404.9588+-4.2404          403.1143+-4.7886        
   stepanov_container.cpp                          3476.1975+-33.0324        3468.5560+-26.9007       
   Towers.c                                         233.8833+-2.2038          232.3964+-1.1485        

   &lt;geometric&gt;                                      709.2614+-2.3591     ?    713.4667+-7.4889        ? might be 1.0059x slower

                                                        TipOfTree             ParallelHelperPool                                
CompressionBench:
   huffman                                           59.1054+-1.4146     ?     61.6995+-6.2506        ? might be 1.0439x slower
   arithmetic-simple                                272.2116+-1.4485     ^    269.0524+-0.4276        ^ definitely 1.0117x faster
   arithmetic-precise                               241.2559+-1.2868     ?    241.3825+-0.7072        ?
   arithmetic-complex-precise                       243.7722+-2.3799          242.4104+-1.9398        
   arithmetic-precise-order-0                       278.2844+-1.9047          278.0792+-1.0005        
   arithmetic-precise-order-1                       297.6564+-2.1971     ?    299.7858+-5.4466        ?
   arithmetic-precise-order-2                       341.1390+-3.0461     ?    342.3434+-2.3227        ?
   arithmetic-simple-order-1                        317.5185+-2.1918          317.3589+-1.2325        
   arithmetic-simple-order-2                        369.9989+-5.6354     ?    370.6637+-5.8619        ?
   lz-string                                        310.2207+-5.0437          306.0996+-1.4824          might be 1.0135x faster

   &lt;geometric&gt;                                      250.5231+-0.8076     ?    251.0277+-2.0638        ? might be 1.0020x slower

                                                        TipOfTree             ParallelHelperPool                                
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.5484+-0.1158     ?     49.6636+-0.1532        ? might be 1.0023x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128633</commentid>
    <comment_count>7</comment_count>
      <attachid>261907</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-24 18:00:20 -0700</bug_when>
    <thetext>Created attachment 261907
getter better

It passes tests. It has build things for VS/CMake. It performs well.

Now I just need to check that it works with two VMs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128635</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-24 18:03:04 -0700</bug_when>
    <thetext>Attachment 261907 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapHelperPool.cpp:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/CodeCache.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:550:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:635:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:68:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 23 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>1128641</commentid>
    <comment_count>9</comment_count>
      <attachid>261910</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-24 18:50:06 -0700</bug_when>
    <thetext>Created attachment 261910
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128642</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-24 18:53:02 -0700</bug_when>
    <thetext>Attachment 261910 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:495:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:496:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:497:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:498:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:499:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:500:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/HeapHelperPool.cpp:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:181:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/CodeCache.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:550:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:635:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:68:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 in 24 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>1128644</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-24 18:59:26 -0700</bug_when>
    <thetext>Are there any tests to unskip with this? I think that some worker tests may have been skipped since GC started to use many threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128731</commentid>
    <comment_count>12</comment_count>
      <attachid>261910</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-25 11:11:32 -0700</bug_when>
    <thetext>Comment on attachment 261910
the patch

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:604
&gt; +    m_helperClient.finish();

Shouldn&apos;t we doSomeHelping at some point? It seems like the main thread will not participate in marking unless we do some helping.

&gt; Source/WTF/ChangeLog:39
&gt; +        join after the other threads have already started. it&apos;s not advisable to make algorithmic

It&apos;s

&gt; Source/WTF/wtf/ParallelHelperPool.cpp:56
&gt; +void ParallelHelperClient::setTask(RefPtr&lt;ParallelHelperTask&gt; task)

I don&apos;t think the setter naming idiom works here. The post condition for a setter is that the value you set should now be visible in the member variable. But this function will clear the value you set before returning.

Let&apos;s call this runTask.

&gt; Source/WTF/wtf/ParallelHelperPool.cpp:83
&gt; +void ParallelHelperClient::runTaskInParallel(RefPtr&lt;ParallelHelperTask&gt; task)

Let&apos;s call this runTaskSynchronously. We don&apos;t need parallel in the function name since it&apos;s in the class name.

&gt; Source/WTF/wtf/ParallelHelperPool.cpp:180
&gt; +            &quot;Parallel Helper Thread&quot;,

Let&apos;s namespace this since it will show up in process-global output. WTF? WebKit?

&gt; Source/WTF/wtf/ParallelHelperPool.h:61
&gt; +// run this task on potentially many threads. The pool may not run the task on any threads, of all

of =&gt; if

&gt; Source/WTF/wtf/ParallelHelperPool.h:169
&gt; +class ParallelHelperClient {

One class per file please.

&gt; Source/WTF/wtf/ParallelHelperPool.h:170
&gt; +    WTF_MAKE_NONCOPYABLE(ParallelHelperClient); WTF_MAKE_FAST_ALLOCATED;

Two lines please.

&gt; Source/WTF/wtf/ParallelHelperPool.h:181
&gt; +    void setTask(RefPtr&lt;ParallelHelperTask&gt;);
&gt; +
&gt; +    template&lt;typename Functor&gt;
&gt; +    void setFunction(const Functor&amp; functor)
&gt; +    {
&gt; +        setTask(createParallelHelperTask(functor));
&gt; +    }

I think you can eliminate this task vs function distinction and the ParallelHelperTask and ParallelHelperTaskFunctor abstraction by using std::function.

&gt; Source/WTF/wtf/ParallelHelperPool.h:218
&gt; +class ParallelHelperPool : public ThreadSafeRefCounted&lt;ParallelHelperPool&gt; {

One class per file please.

&quot;Helper&quot; is a bit vague, as is &quot;Helper client&quot;.

Maybe we can call these &quot;ParallelTaskRunner (the pool) and ParallelTask (the &apos;client&apos;)&quot;. (Those names are currently sort of taken by the functor classes, but see my suggestion to remove those classes, or we could just rename them to ParallelTaskRunnable and ParallelTaskFunctor.)

&gt; Source/WTF/wtf/ParallelHelperPool.h:224
&gt; +    void addThreads(unsigned numThreads);
&gt; +    void ensureThreads(unsigned numThreads);

Nobody seems to call these :(.

&gt; Source/WTF/wtf/WeakRandom.h:100
&gt; +        uint64_t cutoff = (static_cast&lt;uint64_t&gt;(UINT_MAX) + 1) / limit * limit;
&gt; +        for (;;) {
&gt; +            uint64_t value = getUint32();
&gt; +            if (value &gt;= cutoff)
&gt; +                continue;
&gt; +            return value % limit;
&gt; +        }

I don&apos;t get this. What values are we trying to defend against? Should % always be safe as long as we&apos;re dealing with uint32?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128736</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-25 11:49:54 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 261910 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261910&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:604
&gt; &gt; +    m_helperClient.finish();
&gt; 
&gt; Shouldn&apos;t we doSomeHelping at some point? It seems like the main thread will
&gt; not participate in marking unless we do some helping.

No, that would be wrong.  Parallel marking uses a different marking algorithm on the helper threads than on the main thread.  doSomeHelping() would run marking-in-helper instead of marking-on-main-thread.

Note that this is not a change in behavior from what we do on trunk.  Parallel GC has always used different code for the marking helpers.

&gt; 
&gt; &gt; Source/WTF/ChangeLog:39
&gt; &gt; +        join after the other threads have already started. it&apos;s not advisable to make algorithmic
&gt; 
&gt; It&apos;s
&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:56
&gt; &gt; +void ParallelHelperClient::setTask(RefPtr&lt;ParallelHelperTask&gt; task)
&gt; 
&gt; I don&apos;t think the setter naming idiom works here. The post condition for a
&gt; setter is that the value you set should now be visible in the member
&gt; variable. But this function will clear the value you set before returning.

No, it won&apos;t.  setTask() doesn&apos;t clear the task.

&gt; 
&gt; Let&apos;s call this runTask.

That would be wrong, because setTask() does not run the task.

I believe that setTask() is the correct name, since it just sets m_task and notifies the helper threads.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:83
&gt; &gt; +void ParallelHelperClient::runTaskInParallel(RefPtr&lt;ParallelHelperTask&gt; task)
&gt; 
&gt; Let&apos;s call this runTaskSynchronously. We don&apos;t need parallel in the function
&gt; name since it&apos;s in the class name.

I really don&apos;t like calling it runTaskSynchronously.  &quot;Synchronously&quot; implies that there is some synchronization being performed, and could easily confuse people into thinking that the task will only run in one thread at a time.  In fact, the task will experience parallelism - the same task instance will most likely be run from more than one thread.  I don&apos;t mind that &quot;Parallel&quot; is both in the method name and the class name, since it&apos;s a useful reminder.

Perhaps a better name is &quot;runTask()&quot;, if you really think that the redundant use of &quot;Parallel&quot; should be avoided.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:180
&gt; &gt; +            &quot;Parallel Helper Thread&quot;,
&gt; 
&gt; Let&apos;s namespace this since it will show up in process-global output. WTF?
&gt; WebKit?

Good point, I&apos;ll use &quot;WTF Parallel Helper Thread&quot;.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:61
&gt; &gt; +// run this task on potentially many threads. The pool may not run the task on any threads, of all
&gt; 
&gt; of =&gt; if
&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:169
&gt; &gt; +class ParallelHelperClient {
&gt; 
&gt; One class per file please.

I&apos;m not sure if that&apos;s a good idea.  This header is included from everything that includes Heap.h, which is basically everything in the whole project.  I&apos;ve heard that build times are somewhat related to the number of headers that need to be included, and I&apos;ve had requests in the past to coalesce headers that are included everywhere for the sake of WebCore build performance.

That&apos;s one of the reasons why I used one header file.  I also think that because of the tight coupling between these classes, one file simplifies things a bit.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:170
&gt; &gt; +    WTF_MAKE_NONCOPYABLE(ParallelHelperClient); WTF_MAKE_FAST_ALLOCATED;
&gt; 
&gt; Two lines please.
&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:181
&gt; &gt; +    void setTask(RefPtr&lt;ParallelHelperTask&gt;);
&gt; &gt; +
&gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; +    void setFunction(const Functor&amp; functor)
&gt; &gt; +    {
&gt; &gt; +        setTask(createParallelHelperTask(functor));
&gt; &gt; +    }
&gt; 
&gt; I think you can eliminate this task vs function distinction and the
&gt; ParallelHelperTask and ParallelHelperTaskFunctor abstraction by using
&gt; std::function.

I don&apos;t think that&apos;s a good idea, unless you are proposing wrapping std::function inside a ref-counted object, which is exactly what ParallelHelperTaskFunctor does.

Notice that a key part of the helper thread algorithm is: get a reference to the current task while holding the lock, then release the lock, then run the task.  If we were using std::function, the &quot;getting a reference&quot; would require doing a copy of the std::function&apos;s payload.  I don&apos;t like that, since it means that the helper thread worklist algorithm&apos;s performance would be related to the number of variables that you closed over.

Also, copying std::function&apos;s that have more than ~3 captured variables requires system malloc.  That would mean that we&apos;d be calling system malloc while holding the single lock that protects the helper pool.  That seems like it will cause scalability problems in the future.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:218
&gt; &gt; +class ParallelHelperPool : public ThreadSafeRefCounted&lt;ParallelHelperPool&gt; {
&gt; 
&gt; One class per file please.
&gt; 
&gt; &quot;Helper&quot; is a bit vague, as is &quot;Helper client&quot;.
&gt; 
&gt; Maybe we can call these &quot;ParallelTaskRunner (the pool) and ParallelTask (the
&gt; &apos;client&apos;)&quot;. (Those names are currently sort of taken by the functor classes,
&gt; but see my suggestion to remove those classes, or we could just rename them
&gt; to ParallelTaskRunnable and ParallelTaskFunctor.)

I&apos;m fine with maybe changing the names of things, but I&apos;d like to preserve the performance guarantees by using a reference-counted functor rather than std::function.

&gt; 
&gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:224
&gt; &gt; +    void addThreads(unsigned numThreads);
&gt; &gt; +    void ensureThreads(unsigned numThreads);
&gt; 
&gt; Nobody seems to call these :(.

See heap/HeapHelperPool.cpp.  You&apos;re right that it only calls one of them.  I can remove the one that it doesn&apos;t call.

&gt; 
&gt; &gt; Source/WTF/wtf/WeakRandom.h:100
&gt; &gt; +        uint64_t cutoff = (static_cast&lt;uint64_t&gt;(UINT_MAX) + 1) / limit * limit;
&gt; &gt; +        for (;;) {
&gt; &gt; +            uint64_t value = getUint32();
&gt; &gt; +            if (value &gt;= cutoff)
&gt; &gt; +                continue;
&gt; &gt; +            return value % limit;
&gt; &gt; +        }
&gt; 
&gt; I don&apos;t get this. What values are we trying to defend against? Should %
&gt; always be safe as long as we&apos;re dealing with uint32?

The % is &quot;safe&quot; but it would lead to bias.  For example, if you just did random.getUint32() % 3, then you&apos;d be more likely to get 0 than 2.  One easy way to defend against this is to ignore return values from getUint32() that are above the cutoff above which the modulo experiences a bias.  That&apos;s what I&apos;m doing here.  It doesn&apos;t matter *too* much but I figured that if I&apos;m putting WeakRandom into WTF and adding a getUint32(limit) API, I might as well do it the right way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128739</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-25 12:08:20 -0700</bug_when>
    <thetext>Geoff and I talked in person.  I&apos;ll move ParallelHelperTask into its own header, called Task.  I&apos;ll make some of the other fixes.

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Comment on attachment 261910 [details]
&gt; &gt; the patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=261910&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/heap/Heap.cpp:604
&gt; &gt; &gt; +    m_helperClient.finish();
&gt; &gt; 
&gt; &gt; Shouldn&apos;t we doSomeHelping at some point? It seems like the main thread will
&gt; &gt; not participate in marking unless we do some helping.
&gt; 
&gt; No, that would be wrong.  Parallel marking uses a different marking
&gt; algorithm on the helper threads than on the main thread.  doSomeHelping()
&gt; would run marking-in-helper instead of marking-on-main-thread.
&gt; 
&gt; Note that this is not a change in behavior from what we do on trunk. 
&gt; Parallel GC has always used different code for the marking helpers.

We&apos;ll keep this the same.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/ChangeLog:39
&gt; &gt; &gt; +        join after the other threads have already started. it&apos;s not advisable to make algorithmic
&gt; &gt; 
&gt; &gt; It&apos;s

I&apos;ll fix this.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:56
&gt; &gt; &gt; +void ParallelHelperClient::setTask(RefPtr&lt;ParallelHelperTask&gt; task)
&gt; &gt; 
&gt; &gt; I don&apos;t think the setter naming idiom works here. The post condition for a
&gt; &gt; setter is that the value you set should now be visible in the member
&gt; &gt; variable. But this function will clear the value you set before returning.
&gt; 
&gt; No, it won&apos;t.  setTask() doesn&apos;t clear the task.
&gt; 
&gt; &gt; 
&gt; &gt; Let&apos;s call this runTask.
&gt; 
&gt; That would be wrong, because setTask() does not run the task.
&gt; 
&gt; I believe that setTask() is the correct name, since it just sets m_task and
&gt; notifies the helper threads.
&gt; 

We&apos;ll keep this the same.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:83
&gt; &gt; &gt; +void ParallelHelperClient::runTaskInParallel(RefPtr&lt;ParallelHelperTask&gt; task)
&gt; &gt; 
&gt; &gt; Let&apos;s call this runTaskSynchronously. We don&apos;t need parallel in the function
&gt; &gt; name since it&apos;s in the class name.
&gt; 
&gt; I really don&apos;t like calling it runTaskSynchronously.  &quot;Synchronously&quot;
&gt; implies that there is some synchronization being performed, and could easily
&gt; confuse people into thinking that the task will only run in one thread at a
&gt; time.  In fact, the task will experience parallelism - the same task
&gt; instance will most likely be run from more than one thread.  I don&apos;t mind
&gt; that &quot;Parallel&quot; is both in the method name and the class name, since it&apos;s a
&gt; useful reminder.
&gt; 
&gt; Perhaps a better name is &quot;runTask()&quot;, if you really think that the redundant
&gt; use of &quot;Parallel&quot; should be avoided.
&gt; 

We&apos;ll keep this the same.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.cpp:180
&gt; &gt; &gt; +            &quot;Parallel Helper Thread&quot;,
&gt; &gt; 
&gt; &gt; Let&apos;s namespace this since it will show up in process-global output. WTF?
&gt; &gt; WebKit?
&gt; 
&gt; Good point, I&apos;ll use &quot;WTF Parallel Helper Thread&quot;.
&gt; 

I&apos;ll fix this.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:61
&gt; &gt; &gt; +// run this task on potentially many threads. The pool may not run the task on any threads, of all
&gt; &gt; 
&gt; &gt; of =&gt; if

I&apos;ll fix this.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:169
&gt; &gt; &gt; +class ParallelHelperClient {
&gt; &gt; 
&gt; &gt; One class per file please.
&gt; 
&gt; I&apos;m not sure if that&apos;s a good idea.  This header is included from everything
&gt; that includes Heap.h, which is basically everything in the whole project. 
&gt; I&apos;ve heard that build times are somewhat related to the number of headers
&gt; that need to be included, and I&apos;ve had requests in the past to coalesce
&gt; headers that are included everywhere for the sake of WebCore build
&gt; performance.
&gt; 
&gt; That&apos;s one of the reasons why I used one header file.  I also think that
&gt; because of the tight coupling between these classes, one file simplifies
&gt; things a bit.

I&apos;ll move task into its own header.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:170
&gt; &gt; &gt; +    WTF_MAKE_NONCOPYABLE(ParallelHelperClient); WTF_MAKE_FAST_ALLOCATED;
&gt; &gt; 
&gt; &gt; Two lines please.

I&apos;ll fix this.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:181
&gt; &gt; &gt; +    void setTask(RefPtr&lt;ParallelHelperTask&gt;);
&gt; &gt; &gt; +
&gt; &gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; &gt; +    void setFunction(const Functor&amp; functor)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        setTask(createParallelHelperTask(functor));
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; I think you can eliminate this task vs function distinction and the
&gt; &gt; ParallelHelperTask and ParallelHelperTaskFunctor abstraction by using
&gt; &gt; std::function.
&gt; 
&gt; I don&apos;t think that&apos;s a good idea, unless you are proposing wrapping
&gt; std::function inside a ref-counted object, which is exactly what
&gt; ParallelHelperTaskFunctor does.
&gt; 
&gt; Notice that a key part of the helper thread algorithm is: get a reference to
&gt; the current task while holding the lock, then release the lock, then run the
&gt; task.  If we were using std::function, the &quot;getting a reference&quot; would
&gt; require doing a copy of the std::function&apos;s payload.  I don&apos;t like that,
&gt; since it means that the helper thread worklist algorithm&apos;s performance would
&gt; be related to the number of variables that you closed over.
&gt; 
&gt; Also, copying std::function&apos;s that have more than ~3 captured variables
&gt; requires system malloc.  That would mean that we&apos;d be calling system malloc
&gt; while holding the single lock that protects the helper pool.  That seems
&gt; like it will cause scalability problems in the future.

We&apos;ll keep this the same.

&gt; 
&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:218
&gt; &gt; &gt; +class ParallelHelperPool : public ThreadSafeRefCounted&lt;ParallelHelperPool&gt; {
&gt; &gt; 
&gt; &gt; One class per file please.
&gt; &gt; 
&gt; &gt; &quot;Helper&quot; is a bit vague, as is &quot;Helper client&quot;.
&gt; &gt; 
&gt; &gt; Maybe we can call these &quot;ParallelTaskRunner (the pool) and ParallelTask (the
&gt; &gt; &apos;client&apos;)&quot;. (Those names are currently sort of taken by the functor classes,
&gt; &gt; but see my suggestion to remove those classes, or we could just rename them
&gt; &gt; to ParallelTaskRunnable and ParallelTaskFunctor.)
&gt; 
&gt; I&apos;m fine with maybe changing the names of things, but I&apos;d like to preserve
&gt; the performance guarantees by using a reference-counted functor rather than
&gt; std::function.
&gt; 

We&apos;ll keep this the same.

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/ParallelHelperPool.h:224
&gt; &gt; &gt; +    void addThreads(unsigned numThreads);
&gt; &gt; &gt; +    void ensureThreads(unsigned numThreads);
&gt; &gt; 
&gt; &gt; Nobody seems to call these :(.
&gt; 
&gt; See heap/HeapHelperPool.cpp.  You&apos;re right that it only calls one of them. 
&gt; I can remove the one that it doesn&apos;t call.
&gt; 

I&apos;ll remove addThreads().

&gt; &gt; 
&gt; &gt; &gt; Source/WTF/wtf/WeakRandom.h:100
&gt; &gt; &gt; +        uint64_t cutoff = (static_cast&lt;uint64_t&gt;(UINT_MAX) + 1) / limit * limit;
&gt; &gt; &gt; +        for (;;) {
&gt; &gt; &gt; +            uint64_t value = getUint32();
&gt; &gt; &gt; +            if (value &gt;= cutoff)
&gt; &gt; &gt; +                continue;
&gt; &gt; &gt; +            return value % limit;
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; I don&apos;t get this. What values are we trying to defend against? Should %
&gt; &gt; always be safe as long as we&apos;re dealing with uint32?
&gt; 
&gt; The % is &quot;safe&quot; but it would lead to bias.  For example, if you just did
&gt; random.getUint32() % 3, then you&apos;d be more likely to get 0 than 2.  One easy
&gt; way to defend against this is to ignore return values from getUint32() that
&gt; are above the cutoff above which the modulo experiences a bias.  That&apos;s what
&gt; I&apos;m doing here.  It doesn&apos;t matter *too* much but I figured that if I&apos;m
&gt; putting WeakRandom into WTF and adding a getUint32(limit) API, I might as
&gt; well do it the right way.

We&apos;ll keep this the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128750</commentid>
    <comment_count>15</comment_count>
      <attachid>261934</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-25 13:08:56 -0700</bug_when>
    <thetext>Created attachment 261934
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128751</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-25 13:32:34 -0700</bug_when>
    <thetext>Attachment 261934 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/testapi.mm:495:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:496:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:497:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:498:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:499:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/API/tests/testapi.mm:500:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/heap/HeapHelperPool.cpp:30:  Bad include order. Mixing system and custom headers.  [build/include_order] [4]
ERROR: Source/WTF/wtf/ParallelHelperPool.cpp:173:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/CodeCache.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:550:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/Heap.cpp:635:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/VM.h:68:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 12 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>1128886</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 11:08:11 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128888</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-26 11:33:26 -0700</bug_when>
    <thetext>This broke Windows builds:
https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/91251/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128889</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 11:38:34 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; This broke Windows builds:
&gt; https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/
&gt; 91251/steps/compile-webkit/logs/stdio

Fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128890</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 11:41:59 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; This broke Windows builds:
&gt; &gt; https://build.webkit.org/builders/Apple%20Win%20Debug%20%28Build%29/builds/
&gt; &gt; 91251/steps/compile-webkit/logs/stdio
&gt; 
&gt; Fixing it.

Fixed in http://trac.webkit.org/changeset/190268</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128892</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-26 12:04:52 -0700</bug_when>
    <thetext>Now lots of layout tests are crashing in Debug builds:
https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r190267%20(15885)/results.html

e.g.
stderr:
ASSERTION FAILED: isMainThreadOrGCThread()
/Volumes/Data/slave/mavericks-debug/build/Source/WebCore/dom/ShadowRoot.h(134) : WebCore::ContainerNode *WebCore::Node::parentOrShadowHostNode() const
1   0x109b75830 WTFCrash
2   0x10e461995 WebCore::Node::parentOrShadowHostNode() const
3   0x10eff6e42 WebCore::root(WebCore::Node*)
4   0x10f1e8375 WebCore::root(WebCore::Node&amp;)
5   0x10f35c9f9 WebCore::JSNode::visitAdditionalChildren(JSC::SlotVisitor&amp;)
6   0x10f35af76 WebCore::JSNode::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;)
7   0x109a94688 JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*)
8   0x109a94558 JSC::SlotVisitor::drain()
9   0x109a94acc JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode)
10  0x109638e58 JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0::operator()() const
11  0x109638c5c WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0&gt;::run()
12  0x109bc3497 WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;)
13  0x109bc3c52 WTF::ParallelHelperPool::helperThreadBody()
14  0x109bc4ca8 WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0::operator()() const
15  0x109bc4c7c std::__1::__function::__func&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0, std::__1::allocator&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
16  0x10963b7da std::__1::function&lt;void ()&gt;::operator()() const
17  0x109be1c2e WTF::threadEntryPoint(void*)
18  0x109be3548 WTF::wtfThreadEntryPoint(void*)
19  0x7fff8b58e899 _pthread_body
20  0x7fff8b58e72a _pthread_struct_init
21  0x7fff8b592fc9 thread_start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128893</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 12:58:28 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Now lots of layout tests are crashing in Debug builds:
&gt; https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/
&gt; r190267%20(15885)/results.html
&gt; 
&gt; e.g.
&gt; stderr:
&gt; ASSERTION FAILED: isMainThreadOrGCThread()
&gt; /Volumes/Data/slave/mavericks-debug/build/Source/WebCore/dom/ShadowRoot.
&gt; h(134) : WebCore::ContainerNode *WebCore::Node::parentOrShadowHostNode()
&gt; const
&gt; 1   0x109b75830 WTFCrash
&gt; 2   0x10e461995 WebCore::Node::parentOrShadowHostNode() const
&gt; 3   0x10eff6e42 WebCore::root(WebCore::Node*)
&gt; 4   0x10f1e8375 WebCore::root(WebCore::Node&amp;)
&gt; 5   0x10f35c9f9 WebCore::JSNode::visitAdditionalChildren(JSC::SlotVisitor&amp;)
&gt; 6   0x10f35af76 WebCore::JSNode::visitChildren(JSC::JSCell*,
&gt; JSC::SlotVisitor&amp;)
&gt; 7   0x109a94688 JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*)
&gt; 8   0x109a94558 JSC::SlotVisitor::drain()
&gt; 9   0x109a94acc
&gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode)
&gt; 10  0x109638e58 JSC::Heap::markRoots(double, void*, void*, int (&amp;)
&gt; [37])::$_0::operator()() const
&gt; 11  0x109638c5c WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*,
&gt; void*, int (&amp;) [37])::$_0&gt;::run()
&gt; 12  0x109bc3497
&gt; WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;)
&gt; 13  0x109bc3c52 WTF::ParallelHelperPool::helperThreadBody()
&gt; 14  0x109bc4ca8
&gt; WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt;
&gt; const&amp;)::$_0::operator()() const
&gt; 15  0x109bc4c7c
&gt; std::__1::__function::__func&lt;WTF::ParallelHelperPool::
&gt; didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0,
&gt; std::__1::allocator&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::
&gt; Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
&gt; 16  0x10963b7da std::__1::function&lt;void ()&gt;::operator()() const
&gt; 17  0x109be1c2e WTF::threadEntryPoint(void*)
&gt; 18  0x109be3548 WTF::wtfThreadEntryPoint(void*)
&gt; 19  0x7fff8b58e899 _pthread_body
&gt; 20  0x7fff8b58e72a _pthread_struct_init
&gt; 21  0x7fff8b592fc9 thread_start

Looking...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128894</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 13:01:41 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Now lots of layout tests are crashing in Debug builds:
&gt; &gt; https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/
&gt; &gt; r190267%20(15885)/results.html
&gt; &gt; 
&gt; &gt; e.g.
&gt; &gt; stderr:
&gt; &gt; ASSERTION FAILED: isMainThreadOrGCThread()
&gt; &gt; /Volumes/Data/slave/mavericks-debug/build/Source/WebCore/dom/ShadowRoot.
&gt; &gt; h(134) : WebCore::ContainerNode *WebCore::Node::parentOrShadowHostNode()
&gt; &gt; const
&gt; &gt; 1   0x109b75830 WTFCrash
&gt; &gt; 2   0x10e461995 WebCore::Node::parentOrShadowHostNode() const
&gt; &gt; 3   0x10eff6e42 WebCore::root(WebCore::Node*)
&gt; &gt; 4   0x10f1e8375 WebCore::root(WebCore::Node&amp;)
&gt; &gt; 5   0x10f35c9f9 WebCore::JSNode::visitAdditionalChildren(JSC::SlotVisitor&amp;)
&gt; &gt; 6   0x10f35af76 WebCore::JSNode::visitChildren(JSC::JSCell*,
&gt; &gt; JSC::SlotVisitor&amp;)
&gt; &gt; 7   0x109a94688 JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*)
&gt; &gt; 8   0x109a94558 JSC::SlotVisitor::drain()
&gt; &gt; 9   0x109a94acc
&gt; &gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode)
&gt; &gt; 10  0x109638e58 JSC::Heap::markRoots(double, void*, void*, int (&amp;)
&gt; &gt; [37])::$_0::operator()() const
&gt; &gt; 11  0x109638c5c WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*,
&gt; &gt; void*, int (&amp;) [37])::$_0&gt;::run()
&gt; &gt; 12  0x109bc3497
&gt; &gt; WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;)
&gt; &gt; 13  0x109bc3c52 WTF::ParallelHelperPool::helperThreadBody()
&gt; &gt; 14  0x109bc4ca8
&gt; &gt; WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt;
&gt; &gt; const&amp;)::$_0::operator()() const
&gt; &gt; 15  0x109bc4c7c
&gt; &gt; std::__1::__function::__func&lt;WTF::ParallelHelperPool::
&gt; &gt; didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0,
&gt; &gt; std::__1::allocator&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::
&gt; &gt; Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
&gt; &gt; 16  0x10963b7da std::__1::function&lt;void ()&gt;::operator()() const
&gt; &gt; 17  0x109be1c2e WTF::threadEntryPoint(void*)
&gt; &gt; 18  0x109be3548 WTF::wtfThreadEntryPoint(void*)
&gt; &gt; 19  0x7fff8b58e899 _pthread_body
&gt; &gt; 20  0x7fff8b58e72a _pthread_struct_init
&gt; &gt; 21  0x7fff8b592fc9 thread_start
&gt; 
&gt; Looking...

Fix on the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128897</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 13:07:15 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Now lots of layout tests are crashing in Debug builds:
&gt; &gt; &gt; https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/
&gt; &gt; &gt; r190267%20(15885)/results.html
&gt; &gt; &gt; 
&gt; &gt; &gt; e.g.
&gt; &gt; &gt; stderr:
&gt; &gt; &gt; ASSERTION FAILED: isMainThreadOrGCThread()
&gt; &gt; &gt; /Volumes/Data/slave/mavericks-debug/build/Source/WebCore/dom/ShadowRoot.
&gt; &gt; &gt; h(134) : WebCore::ContainerNode *WebCore::Node::parentOrShadowHostNode()
&gt; &gt; &gt; const
&gt; &gt; &gt; 1   0x109b75830 WTFCrash
&gt; &gt; &gt; 2   0x10e461995 WebCore::Node::parentOrShadowHostNode() const
&gt; &gt; &gt; 3   0x10eff6e42 WebCore::root(WebCore::Node*)
&gt; &gt; &gt; 4   0x10f1e8375 WebCore::root(WebCore::Node&amp;)
&gt; &gt; &gt; 5   0x10f35c9f9 WebCore::JSNode::visitAdditionalChildren(JSC::SlotVisitor&amp;)
&gt; &gt; &gt; 6   0x10f35af76 WebCore::JSNode::visitChildren(JSC::JSCell*,
&gt; &gt; &gt; JSC::SlotVisitor&amp;)
&gt; &gt; &gt; 7   0x109a94688 JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*)
&gt; &gt; &gt; 8   0x109a94558 JSC::SlotVisitor::drain()
&gt; &gt; &gt; 9   0x109a94acc
&gt; &gt; &gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode)
&gt; &gt; &gt; 10  0x109638e58 JSC::Heap::markRoots(double, void*, void*, int (&amp;)
&gt; &gt; &gt; [37])::$_0::operator()() const
&gt; &gt; &gt; 11  0x109638c5c WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*,
&gt; &gt; &gt; void*, int (&amp;) [37])::$_0&gt;::run()
&gt; &gt; &gt; 12  0x109bc3497
&gt; &gt; &gt; WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;)
&gt; &gt; &gt; 13  0x109bc3c52 WTF::ParallelHelperPool::helperThreadBody()
&gt; &gt; &gt; 14  0x109bc4ca8
&gt; &gt; &gt; WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt;
&gt; &gt; &gt; const&amp;)::$_0::operator()() const
&gt; &gt; &gt; 15  0x109bc4c7c
&gt; &gt; &gt; std::__1::__function::__func&lt;WTF::ParallelHelperPool::
&gt; &gt; &gt; didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0,
&gt; &gt; &gt; std::__1::allocator&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::
&gt; &gt; &gt; Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
&gt; &gt; &gt; 16  0x10963b7da std::__1::function&lt;void ()&gt;::operator()() const
&gt; &gt; &gt; 17  0x109be1c2e WTF::threadEntryPoint(void*)
&gt; &gt; &gt; 18  0x109be3548 WTF::wtfThreadEntryPoint(void*)
&gt; &gt; &gt; 19  0x7fff8b58e899 _pthread_body
&gt; &gt; &gt; 20  0x7fff8b58e72a _pthread_struct_init
&gt; &gt; &gt; 21  0x7fff8b592fc9 thread_start
&gt; &gt; 
&gt; &gt; Looking...
&gt; 
&gt; Fix on the way.

Here is a fairly principled fix: https://bugs.webkit.org/show_bug.cgi?id=149582

It&apos;s got enough code that it should probably be reviewed.  If I don&apos;t see a review soon, I will land a simpler fix that just calls WTF::registerGCThread().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128900</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 13:14:06 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; &gt; Now lots of layout tests are crashing in Debug builds:
&gt; &gt; &gt; &gt; https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/
&gt; &gt; &gt; &gt; r190267%20(15885)/results.html
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; e.g.
&gt; &gt; &gt; &gt; stderr:
&gt; &gt; &gt; &gt; ASSERTION FAILED: isMainThreadOrGCThread()
&gt; &gt; &gt; &gt; /Volumes/Data/slave/mavericks-debug/build/Source/WebCore/dom/ShadowRoot.
&gt; &gt; &gt; &gt; h(134) : WebCore::ContainerNode *WebCore::Node::parentOrShadowHostNode()
&gt; &gt; &gt; &gt; const
&gt; &gt; &gt; &gt; 1   0x109b75830 WTFCrash
&gt; &gt; &gt; &gt; 2   0x10e461995 WebCore::Node::parentOrShadowHostNode() const
&gt; &gt; &gt; &gt; 3   0x10eff6e42 WebCore::root(WebCore::Node*)
&gt; &gt; &gt; &gt; 4   0x10f1e8375 WebCore::root(WebCore::Node&amp;)
&gt; &gt; &gt; &gt; 5   0x10f35c9f9 WebCore::JSNode::visitAdditionalChildren(JSC::SlotVisitor&amp;)
&gt; &gt; &gt; &gt; 6   0x10f35af76 WebCore::JSNode::visitChildren(JSC::JSCell*,
&gt; &gt; &gt; &gt; JSC::SlotVisitor&amp;)
&gt; &gt; &gt; &gt; 7   0x109a94688 JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*)
&gt; &gt; &gt; &gt; 8   0x109a94558 JSC::SlotVisitor::drain()
&gt; &gt; &gt; &gt; 9   0x109a94acc
&gt; &gt; &gt; &gt; JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode)
&gt; &gt; &gt; &gt; 10  0x109638e58 JSC::Heap::markRoots(double, void*, void*, int (&amp;)
&gt; &gt; &gt; &gt; [37])::$_0::operator()() const
&gt; &gt; &gt; &gt; 11  0x109638c5c WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*,
&gt; &gt; &gt; &gt; void*, int (&amp;) [37])::$_0&gt;::run()
&gt; &gt; &gt; &gt; 12  0x109bc3497
&gt; &gt; &gt; &gt; WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;)
&gt; &gt; &gt; &gt; 13  0x109bc3c52 WTF::ParallelHelperPool::helperThreadBody()
&gt; &gt; &gt; &gt; 14  0x109bc4ca8
&gt; &gt; &gt; &gt; WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt;
&gt; &gt; &gt; &gt; const&amp;)::$_0::operator()() const
&gt; &gt; &gt; &gt; 15  0x109bc4c7c
&gt; &gt; &gt; &gt; std::__1::__function::__func&lt;WTF::ParallelHelperPool::
&gt; &gt; &gt; &gt; didMakeWorkAvailable(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0,
&gt; &gt; &gt; &gt; std::__1::allocator&lt;WTF::ParallelHelperPool::didMakeWorkAvailable(WTF::
&gt; &gt; &gt; &gt; Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()()
&gt; &gt; &gt; &gt; 16  0x10963b7da std::__1::function&lt;void ()&gt;::operator()() const
&gt; &gt; &gt; &gt; 17  0x109be1c2e WTF::threadEntryPoint(void*)
&gt; &gt; &gt; &gt; 18  0x109be3548 WTF::wtfThreadEntryPoint(void*)
&gt; &gt; &gt; &gt; 19  0x7fff8b58e899 _pthread_body
&gt; &gt; &gt; &gt; 20  0x7fff8b58e72a _pthread_struct_init
&gt; &gt; &gt; &gt; 21  0x7fff8b592fc9 thread_start
&gt; &gt; &gt; 
&gt; &gt; &gt; Looking...
&gt; &gt; 
&gt; &gt; Fix on the way.
&gt; 
&gt; Here is a fairly principled fix:
&gt; https://bugs.webkit.org/show_bug.cgi?id=149582
&gt; 
&gt; It&apos;s got enough code that it should probably be reviewed.  If I don&apos;t see a
&gt; review soon, I will land a simpler fix that just calls
&gt; WTF::registerGCThread().

Landed the simpler fix in http://trac.webkit.org/changeset/190269</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261835</attachid>
            <date>2015-09-23 12:30:07 -0700</date>
            <delta_ts>2015-09-23 15:12:17 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67844</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTAxNzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzc1LDcgKzc3NSw2IEBACiAJCTE0MTQ0OENCMTNBMTc2
RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDQ4Q0ExM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJs
b2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQxNDQ4Q0QxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDQ4Q0MxM0ExNzgzNzAw
RjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0MTUwMTMzMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQyMEJFN0IxMEFBNkREQjAw
RjQ1NUQyIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQyMTM1OUIw
QTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNw
cCAqLzsgfTsKIAkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODU4MDI1NTU5
N0QwMUZGNjBGNyAvKiBEZWJ1Z2dlci5jcHAgKi87IH07CiAJCTE0MjgwODJEMTA3RUMwNTcwMDEz
RTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3BwICovOyB9
OwpAQCAtMTY2NCw4ICsxNjYzLDYgQEAKIAkJQzIyMzlEMTcxNjI2MkJERDAwNUFDNUZEIC8qIENv
cHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi87IH07CiAJ
CUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlE
MTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyMjM5RDFBMTYyNjJCREQwMDVB
QzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovOyB9
OwotCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0MjE1RjdE
QkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovOyB9OwogCQlDMjJCMzFCOTE0MDU3N0Q3
MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdD
b3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNDAzMDUzMTRCNDA0QzkwMDc5
RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi87IH07CkBAIC0yNjE1LDcgKzI2MTIsNiBAQAogCQkx
NDE0NDhDQTEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2VkQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55Qmxvb21GaWx0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdl
YWtTZXRJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtTZXRJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MjBCRTdBMTBBQTZEREIw
MEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYWtSYW5kb20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMTM1OUEwQTY3
N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDI3MTEz
ODBBNDYwQkJCMDA4MEVFRUEgLyogSlNCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDI5RDc3QjBF
RDIwRDczMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1
MzYsOCArMzUzMiw2IEBACiAJCUMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3B5VmlzaXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDEzMTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5
VmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjIzOUQxNDE2MjYyQkRE
MDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR0NUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8q
IENvcGllZFNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENv
cGllZFNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTAxNjFD
RDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEhlYXBTdGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQyMTcsMTUgKzQyMTEsNiBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUg
LyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
RkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCi0JCQkJRkU3
QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovLAotCQkJCUMyREE3Nzgy
MThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovLAotCQkJCUZFMzkxMzUxMUI3OTRB
QzkwMEVEQUY3MSAvKiBMaXZlT2JqZWN0RGF0YS5oICovLAotCQkJCUZFMzkxMzUyMUI3OTRBQzkw
MEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgKi8sCi0JCQkJRkUzOTEzNTMxQjc5NEFDOTAw
RURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1
OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAqLywKLQkJCQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQkyQUFDRTYzQjE4Q0E1QTAzMDBFRDAx
OTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMEZEOEEzMTExN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCiAJCQkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQw
IC8qIENvZGVCbG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBD
b25zZXJ2YXRpdmVSb290cy5jcHAgKi8sCkBAIC00MjQ0LDE1ICs0MjI5LDIxIEBACiAJCQkJMkE2
ODI5NUExODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQkyQTdB
NThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRB
RDY5QjAwNzVCMzU0IC8qIERlZmVyR0MuaCAqLywKKwkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVC
Q0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJMkE4MzYzODQxOEQ3RDBF
RTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJ
CQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywK
KwkJCQkyQUFDRTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8s
CiAJCQkJQkNCRTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAogCQkJ
CTBGMkI2NkE4MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovLAog
CQkJCTBGMkI2NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGlu
ZXMuaCAqLywKIAkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXQuaCAqLywKIAkJCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggKi8sCisJCQkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkND
IC8qIEdDTG9nZ2luZy5jcHAgKi8sCisJCQkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdD
TG9nZ2luZy5oICovLAogCQkJCTJBMzQzRjc0MThBMTc0OEIwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5LmggKi8sCiAJCQkJMkEzNDNGNzcxOEExNzQ5RDAwMzlCMDg1IC8qIEdDU2VnbWVudGVk
QXJyYXlJbmxpbmVzLmggKi8sCi0JCQkJQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhy
ZWFkLmNwcCAqLywKLQkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAq
LywKIAkJCQkxNDJFMzEyQjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlLmggKi8sCiAJCQkJQzI4
MzE4RkYxNkZFNEI3RDAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrLmggKi8sCiAJCQkJQzI4MzE5MDEx
NkZFNTMzRTAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrSW5saW5lcy5oICovLApAQCAtNDI2Myw2ICs0
MjU0LDcgQEAKIAkJCQkxNDZGQTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAq
LywKIAkJCQkxNEJBN0E5NTEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgKi8sCiAJCQkJMTRC
QTdBOTYxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuaCAqLywKKwkJCQlDMkRBNzc4MjE4RTI1OTk5
MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCAqLywKIAkJCQkyQUQ4OTMyOTE3RTM4NjhGMDA2Njgy
NzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8sCiAJCQkJMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1
Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLywKIAkJCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcg
LyogSGVhcFJvb3RWaXNpdG9yLmggKi8sCkBAIC00MjcwLDExICs0MjYyLDE2IEBACiAJCQkJQzI0
RDMxRTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8sCiAJCQkJQzJFNTI2
QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCiAJCQkJQzJFNTI2QkMxNTkw
RUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oICovLAorCQkJCUZFN0JBNjBEMUExQTdDRUMwMEYx
RjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovLAorCQkJCUZFN0JBNjBFMUExQTdDRUMwMEYxRjdC
NCAvKiBIZWFwVmVyaWZpZXIuaCAqLywKIAkJCQlDMjVGOEJDQjE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmNwcCAqLywKIAkJCQlDMjVGOEJDQzE1NzU0NEE5MDAyNDVCNzEg
LyogSW5jcmVtZW50YWxTd2VlcGVyLmggKi8sCiAJCQkJMEY3NjZEMjkxNUE4Q0MzNDAwOEYzNjNF
IC8qIEpJVFN0dWJSb3V0aW5lU2V0LmNwcCAqLywKIAkJCQkwRjc2NkQyQTE1QThDQzM0MDA4RjM2
M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCAqLywKIAkJCQkwRjQzMTczNjE0NkJBQzY1MDA3RTM4
OTAgLyogTGlzdGFibGVIYW5kbGVyLmggKi8sCisJCQkJRkUzOTEzNTExQjc5NEFDOTAwRURBRjcx
IC8qIExpdmVPYmplY3REYXRhLmggKi8sCisJCQkJRkUzOTEzNTIxQjc5NEFDOTAwRURBRjcxIC8q
IExpdmVPYmplY3RMaXN0LmNwcCAqLywKKwkJCQlGRTM5MTM1MzFCNzk0QUM5MDBFREFGNzEgLyog
TGl2ZU9iamVjdExpc3QuaCAqLywKIAkJCQkxNDJFMzEzMDEzNEZGMEE2MDBBRkFEQjUgLyogTG9j
YWwuaCAqLywKIAkJCQkxNDJFMzEzMTEzNEZGMEE2MDBBRkFEQjUgLyogTG9jYWxTY29wZS5oICov
LAogCQkJCTE0QjcyMzNGMTJEN0QwREEwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
ICovLApAQCAtNDI4OCw2ICs0Mjg1LDcgQEAKIAkJCQkxNEQyRjNEOTEzOUY0QkUyMDA0OTEwMzEg
LyogTWFya2VkU3BhY2UuaCAqLywKIAkJCQkxNDJENkYwRTEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmNwcCAqLywKIAkJCQkxNDJENkYwRjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNr
LmggKi8sCisJCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCAq
LywKIAkJCQkyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNj
b3BlLmggKi8sCiAJCQkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNw
cCAqLywKIAkJCQkxNEJBNzhGMDEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCAqLywK
QEAgLTQzMTIsMTIgKzQzMTAsNiBAQAogCQkJCTJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBX
cml0ZUJhcnJpZXJCdWZmZXIuaCAqLywKIAkJCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyog
V3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8sCiAJCQkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLywKLQkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVC
Q0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCi0JCQkJMkE4MzYzODQxOEQ3RDBF
RTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKLQkJCQkyQTgzNjM4NzE4
RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCi0JCQkJMkE4
MzYzODgxOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKLQkJ
CQkyQUFCQ0RFNjE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggKi8sCi0JCQkJMkFERkEy
NjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9nZ2luZy5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGhlYXA7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTA5MSw3ICs1MDgzLDYgQEAK
IAkJCQlBN0NBM0FFQTE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCAqLywKIAkJCQlB
N0NBM0FERjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
QTdDQTNBRTAxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCAqLywKLQkJCQkx
NDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCTcwOUZCODYz
MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwICovLAogCQkJCTcwOUZC
ODY0MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuaCAqLywKIAkJCQk3MDlG
Qjg2NTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgKi8sCkBAIC02Mzk4
LDcgKzYzODksNiBAQAogCQkJCTBGMkI2NkFEMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5n
UmVmQ291bnRlZElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFFMTdCNkI1NDUw
MEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhy
ZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JD
MDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdC
NkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY5MjgsNyArNjkxOCw2IEBACiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFG
IC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRUMxN0RB
NTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FF
NjE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMTQyMEJFN0IxMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1Nl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc3MTksNyArNzcwOCw2IEBACiAJCQkJMTQ3
RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNjRCMjcxMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRT
dHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlDMjIzOUQxQTE2MjYyQkREMDA1QUM1
RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUYxNENBN0RDQTAw
ODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwMzMyQzMx
OEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODU1MTA3RUMwRTcwMDEzRTdCMiAvKiBHZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lv
biAxOTAxNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR0NUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkNvcHlWaXNp
dG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdDVGhyZWFkOjpHQ1RocmVhZChIZWFwJiBoZWFw
LCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IHNsb3RWaXNpdG9yLCBzdGQ6OnVuaXF1ZV9w
dHI8Q29weVZpc2l0b3I+IGNvcHlWaXNpdG9yKQotICAgIDogbV90aHJlYWRJRCgwKQotICAgICwg
bV9oZWFwKGhlYXApCi0gICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6bW92ZShzbG90VmlzaXRvcikp
Ci0gICAgLCBtX2NvcHlWaXNpdG9yKFdURjo6bW92ZShjb3B5VmlzaXRvcikpCi17Ci19Ci0KLVRo
cmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVhZElEKCkKLXsKLSAgICBBU1NFUlQobV90aHJl
YWRJRCk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6OmluaXRp
YWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKQotewotICAgIEFTU0VSVCgh
bV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9IHRocmVhZElEOwotfQotCi1TbG90VmlzaXRv
ciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKLXsKLSAgICBBU1NFUlQobV9zbG90VmlzaXRvcik7
Ci0gICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0KCk7Ci19Ci0KLUNvcHlWaXNpdG9yKiBHQ1Ro
cmVhZDo6Y29weVZpc2l0b3IoKQotewotICAgIEFTU0VSVChtX2NvcHlWaXNpdG9yKTsKLSAgICBy
ZXR1cm4gbV9jb3B5VmlzaXRvci5nZXQoKTsKLX0KLQotR0NQaGFzZSBHQ1RocmVhZDo6d2FpdEZv
ck5leHRQaGFzZSgpCi17Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faGVhcC5t
X3BoYXNlTXV0ZXgpOwotICAgIG1faGVhcC5tX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUud2FpdChs
b2NrLCBbdGhpc10geyByZXR1cm4gIW1faGVhcC5tX2djVGhyZWFkc1Nob3VsZFdhaXQ7IH0pOwot
Ci0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMtLTsKLSAgICBpZiAoIW1faGVh
cC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQotICAgICAgICBtX2hlYXAubV9hY3Rpdml0eUNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotCi0gICAgbV9oZWFwLm1fcGhhc2VDb25kaXRp
b25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX2hlYXAubV9jdXJyZW50UGhh
c2UgIT0gTm9QaGFzZTsgfSk7Ci0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMr
KzsKLSAgICByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNlOwotfQotCi12b2lkIEdDVGhyZWFk
OjpnY1RocmVhZE1haW4oKQotewotICAgIEdDUGhhc2UgY3VycmVudFBoYXNlOwotICAgIFdURjo6
cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIC8vIFdhaXQgZm9yIHRoZSBtYWluIHRocmVhZCB0byBm
aW5pc2ggY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyB1cy4gVGhlIG1haW4gdGhyZWFkIGdyYWJz
IHRoaXMgbG9jayBiZWZvcmUgCi0gICAgLy8gY3JlYXRpbmcgdGhpcyB0aHJlYWQuIFdlIGFyZW4n
dCBndWFyYW50ZWVkIHRvIGhhdmUgYSB2YWxpZCB0aHJlYWRJRCB1bnRpbCB0aGUgbWFpbiB0aHJl
YWQgcmVsZWFzZXMgdGhpcyBsb2NrLgotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExv
Y2s+IGxvY2sobV9oZWFwLm1fcGhhc2VNdXRleCk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgUGFy
YWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgd2hpbGUg
KChjdXJyZW50UGhhc2UgPSB3YWl0Rm9yTmV4dFBoYXNlKCkpICE9IEV4aXQpIHsKLSAgICAgICAg
ICAgIC8vIE5vdGU6IEVhY2ggcGhhc2UgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvd24gdGVybWlu
YXRpb24gY29uZGl0aW9ucy4gVGhlIGNvbW1lbnRzIGJlbG93IGRlc2NyaWJlIAotICAgICAgICAg
ICAgLy8gaG93IGVhY2ggcGhhc2UgcmVhY2hlcyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgIHN3
aXRjaCAoY3VycmVudFBoYXNlKSB7Ci0gICAgICAgICAgICBjYXNlIE1hcms6Ci0gICAgICAgICAg
ICAgICAgbV9zbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURy
YWluKTsKLSAgICAgICAgICAgICAgICAvLyBHQ1RocmVhZHMgb25seSByZXR1cm4gZnJvbSBkcmFp
bkZyb21TaGFyZWQoKSBpZiB0aGUgbWFpbiB0aHJlYWQgc2V0cyB0aGUgbV9wYXJhbGxlbE1hcmtl
cnNTaG91bGRFeGl0IAotICAgICAgICAgICAgICAgIC8vIGZsYWcgaW4gdGhlIEdDVGhyZWFkU2hh
cmVkRGF0YS4gVGhlIG9ubHkgd2F5IHRoZSBtYWluIHRocmVhZCBzZXRzIHRoYXQgZmxhZyBpcyBp
ZiBpdCByZWFsaXplcyAKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFsbCBvZiB0aGUgdmFyaW91
cyBzdWJwaGFzZXMgaW4gSGVhcDo6bWFya1Jvb3RzKCkgaGF2ZSBiZWVuIGZ1bGx5IGZpbmlzaGVk
IGFuZCB0aGVyZSBpcyAKLSAgICAgICAgICAgICAgICAvLyBubyBtb3JlIG1hcmtpbmcgd29yayB0
byBkbyBhbmQgYWxsIG9mIHRoZSBHQ1RocmVhZHMgYXJlIGlkbGUsIG1lYW5pbmcgbm8gbW9yZSB3
b3JrIGNhbiBiZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIENvcHk6Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIHN0
YXJ0Q29weWluZygpIGJlY2F1c2UgaXQncyBjYWxsZWQgZm9yIHVzIG9uIHRoZSBtYWluIHRocmVh
ZCB0byBhdm9pZCBhIAotICAgICAgICAgICAgICAgIC8vIHJhY2UgY29uZGl0aW9uLgotICAgICAg
ICAgICAgICAgIG1fY29weVZpc2l0b3ItPmNvcHlGcm9tU2hhcmVkKCk7Ci0gICAgICAgICAgICAg
ICAgLy8gV2Uga25vdyB3ZSdyZSBkb25lIGNvcHlpbmcgd2hlbiB3ZSByZXR1cm4gZnJvbSBjb3B5
RnJvbVNoYXJlZCgpIGJlY2F1c2Ugd2Ugd291bGQgCi0gICAgICAgICAgICAgICAgLy8gb25seSBk
byBzbyBpZiB0aGVyZSB3ZXJlIG5vIG1vcmUgY2h1bmtzIG9mIGNvcHlpbmcgd29yayBsZWZ0IHRv
IGRvLiBXaGVuIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIG1vcmUgY29weWluZyB3
b3JrIHRvIGRvLCB0aGUgbWFpbiB0aHJlYWQgd2lsbCB3YWl0IGluIENvcGllZFNwYWNlOjpkb25l
Q29weWluZygpIHVudGlsIAotICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIHRo
YXQgdGhlIEdDVGhyZWFkcyBib3Jyb3dlZCBoYXZlIGJlZW4gcmV0dXJuZWQuIGRvbmVDb3B5aW5n
KCkgCi0gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvdXIgYm9ycm93ZWQgQ29waWVkQmxvY2ss
IGFsbG93aW5nIHRoZSBjb3B5aW5nIHBoYXNlIHRvIGZpbmlzaC4KLSAgICAgICAgICAgICAgICBt
X2NvcHlWaXNpdG9yLT5kb25lQ29weWluZygpOwotCi0gICAgICAgICAgICAgICAgV1RGOjpyZWxl
YXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTm9QaGFzZToKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBFeGl0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGRhdGEp
Ci17Ci0gICAgR0NUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFkKj4oZGF0YSk7
Ci0gICAgdGhyZWFkLT5nY1RocmVhZE1haW4oKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9uIDE5MDE3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR0NUaHJlYWRfaAotI2RlZmlu
ZSBHQ1RocmVhZF9oCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb3B5VmlzaXRvcjsKLWNsYXNz
IEhlYXA7Ci1jbGFzcyBTbG90VmlzaXRvcjsKLQotZW51bSBHQ1BoYXNlIHsKLSAgICBOb1BoYXNl
LAotICAgIE1hcmssCi0gICAgQ29weSwKLSAgICBFeGl0Ci19OwotCi1jbGFzcyBHQ1RocmVhZCB7
Ci1wdWJsaWM6Ci0gICAgR0NUaHJlYWQoSGVhcCYsIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRv
cj4sIHN0ZDo6dW5pcXVlX3B0cjxDb3B5VmlzaXRvcj4pOwotCi0gICAgU2xvdFZpc2l0b3IqIHNs
b3RWaXNpdG9yKCk7Ci0gICAgQ29weVZpc2l0b3IqIGNvcHlWaXNpdG9yKCk7Ci0gICAgVGhyZWFk
SWRlbnRpZmllciB0aHJlYWRJRCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVRocmVhZElEKFRocmVh
ZElkZW50aWZpZXIpOwotCi0gICAgc3RhdGljIHZvaWQgZ2NUaHJlYWRTdGFydEZ1bmModm9pZCop
OwotCi1wcml2YXRlOgotICAgIHZvaWQgZ2NUaHJlYWRNYWluKCk7Ci0gICAgR0NQaGFzZSB3YWl0
Rm9yTmV4dFBoYXNlKCk7Ci0KLSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAg
SGVhcCYgbV9oZWFwOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9zbG90Vmlz
aXRvcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29weVZpc2l0b3I+IG1fY29weVZpc2l0b3I7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwMTc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDAzLTIwMDksIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcEhl
bHBlclBvb2wuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJI
ZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMzM2LDcg
KzMzNyw2IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1f
ZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlz
KQogICAgICwgbV9zbG90VmlzaXRvcigqdGhpcykKLSAgICAsIG1fY29weVZpc2l0b3IoKnRoaXMp
CiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQog
ICAgICwgbV93cml0ZUJhcnJpZXJCdWZmZXIoMjU2KQpAQCAtMzU2LDIyICszNTYsOCBAQCBIZWFw
OjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwgbV9k
ZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKKyAgICAsIG1faGVscGVyQ2xp
ZW50KGhlYXBIZWxwZXJQb29sKCkpCiB7Ci0gICAgewotICAgICAgICAvLyBHcmFiIHRoZSBsb2Nr
IHNvIHRoZSBuZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3Jl
IHRoZXkgc3RhcnQgcnVubmluZy4KLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2Nr
KG1fcGhhc2VNdXRleCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBPcHRpb25z
OjpudW1iZXJPZkdDTWFya2VycygpOyArK2kpIHsKLSAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3Rp
dmVHQ1RocmVhZHMrKzsKLSAgICAgICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NU
aHJlYWQoKnRoaXMsIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSwgc3RkOjpt
YWtlX3VuaXF1ZTxDb3B5VmlzaXRvcj4oKnRoaXMpKTsKLSAgICAgICAgICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5j
LCBuZXdUaHJlYWQsICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpOwotICAgICAgICAgICAgbmV3
VGhyZWFkLT5pbml0aWFsaXplVGhyZWFkSUQodGhyZWFkSUQpOwotICAgICAgICAgICAgbV9nY1Ro
cmVhZHMuYXBwZW5kKG5ld1RocmVhZCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8v
IFdhaXQgZm9yIGFsbCB0aGUgR0NUaHJlYWRzIHRvIGdldCB0byB0aGUgcmlnaHQgcGxhY2UuCi0g
ICAgICAgIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJl
dHVybiAhbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkczsgfSk7Ci0gICAgfQotICAgIAogICAgIG1f
c3RvcmFnZVNwYWNlLmluaXQoKTsKICAgICBpZiAoT3B0aW9uczo6dmVyaWZ5SGVhcCgpKQogICAg
ICAgICBtX3ZlcmlmaWVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwVmVyaWZpZXI+KHRoaXMsIE9w
dGlvbnM6Om51bWJlck9mR0NDeWNsZXNUb1JlY29yZEZvclZlcmlmaWNhdGlvbigpKTsKQEAgLTM4
MSwyMSArMzY3LDYgQEAgSGVhcDo6fkhlYXAoKQogewogICAgIGZvciAoV2Vha0Jsb2NrKiBibG9j
ayA6IG1fbG9naWNhbGx5RW1wdHlXZWFrQmxvY2tzKQogICAgICAgICBXZWFrQmxvY2s6OmRlc3Ry
b3koYmxvY2spOwotCi0gICAgLy8gRGVzdHJveSBvdXIgbWFya2luZyB0aHJlYWRzLgotICAgIHsK
LSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IG1hcmtpbmdMb2NrKG1fbWFya2luZ011dGV4
KTsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IHBoYXNlTG9jayhtX3BoYXNlTXV0ZXgp
OwotICAgICAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTm9QaGFzZSk7Ci0gICAgICAgIG1f
cGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRydWU7Ci0gICAgICAgIG1fZ2NUaHJlYWRzU2hv
dWxkV2FpdCA9IGZhbHNlOwotICAgICAgICBtX2N1cnJlbnRQaGFzZSA9IEV4aXQ7Ci0gICAgICAg
IG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHdh
aXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fZ2NUaHJlYWRzW2ldLT50aHJlYWRJRCgpKTsKLSAgICAg
ICAgZGVsZXRlIG1fZ2NUaHJlYWRzW2ldOwotICAgIH0KIH0KIAogYm9vbCBIZWFwOjppc1BhZ2Vk
T3V0KGRvdWJsZSBkZWFkbGluZSkKQEAgLTU3MCwxMiArNTQxLDM0IEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwKIAogICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jl
c3MgPT0gRnVsbENvbGxlY3Rpb24pCiAgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKLSAg
ICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbWFya2luZ011dGV4KTsK
LSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7Ci0gICAgICAgIHN0
YXJ0TmV4dFBoYXNlKE1hcmspOwotICAgIH0KKworICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX3Zt
LT5oYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnMoKTsKKworICAgIG1faGVscGVyQ2xpZW50
LnNldEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0
b3IqIHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlm
IChtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMp
OworICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURjo6bW92
ZShuZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy50YWtlTGFz
dCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzbG90VmlzaXRvci0+ZGlkU3RhcnRN
YXJraW5nKCk7CisgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RW
aXNpdG9yOjpTbGF2ZURyYWluKTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAg
ICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0YXJ0
TWFya2luZygpOworICAgIAogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IobV9z
bG90VmlzaXRvcik7CiAKICAgICB7CkBAIC02MDMsOCArNTk2LDcgQEAgdm9pZCBIZWFwOjptYXJr
Um9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLAogICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3Vs
ZEV4aXQgPSB0cnVlOwogICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlB
bGwoKTsKICAgICB9Ci0gICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1hcmspOwotICAgIGVu
ZEN1cnJlbnRQaGFzZSgpOworICAgIG1faGVscGVyQ2xpZW50LmZpbmlzaCgpOwogICAgIHVwZGF0
ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgcmVzZXRWaXNpdG9ycygpOwogfQpAQCAt
NjMzLDI0ICs2MjUsMTcgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2luZ1N0b3JlcygpCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBtX2NvcHlJbmRleCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIFdlIGRvIHRoaXMgaGVyZSBzbyB0aGF0IHdlIGF2b2lkIGEgcmFjZSBjb25k
aXRpb24gd2hlcmUgdGhlIG1haW4gdGhyZWFkIGNhbiAKLSAgICAgICAgLy8gYmxvdyB0aHJvdWdo
IGFsbCBvZiB0aGUgY29weWluZyB3b3JrIGJlZm9yZSB0aGUgR0NUaHJlYWRzIGZ1bGx5IHdha2Ug
dXAuIAotICAgICAgICAvLyBUaGUgR0NUaHJlYWRzIHRoZW4gcmVxdWVzdCBhIGJsb2NrIGZyb20g
dGhlIENvcGllZFNwYWNlIHdoZW4gdGhlIGNvcHlpbmcgcGhhc2UgCi0gICAgICAgIC8vIGhhcyBj
b21wbGV0ZWQsIHdoaWNoIGlzbid0IGFsbG93ZWQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBtX2djVGhyZWFkc1tp
XS0+Y29weVZpc2l0b3IoKS0+c3RhcnRDb3B5aW5nKCk7Ci0gICAgICAgIAotICAgICAgICBzdGFy
dE5leHRQaGFzZShDb3B5KTsKLSAgICAgICAgCi0gICAgICAgIG1fY29weVZpc2l0b3Iuc3RhcnRD
b3B5aW5nKCk7Ci0gICAgICAgIG1fY29weVZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKLSAgICAg
ICAgbV9jb3B5VmlzaXRvci5kb25lQ29weWluZygpOwotICAgICAgICAvLyBXZSBuZWVkIHRvIHdh
aXQgZm9yIGV2ZXJ5Ym9keSB0byBmaW5pc2ggYW5kIHJldHVybiB0aGVpciBDb3BpZWRCbG9ja3Mg
Ci0gICAgICAgIC8vIGJlZm9yZSBzaWduYWxpbmcgdGhhdCB0aGUgcGhhc2UgaXMgY29tcGxldGUu
CisKKyAgICAgICAgbV9oZWxwZXJDbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAg
ICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5VmlzaXRv
cigqdGhpcyk7CisgICAgICAgICAgICAgICAgY29weVZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7Cisg
ICAgICAgICAgICAgICAgY29weVZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKKyAgICAgICAgICAg
ICAgICBjb3B5VmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICAgICAgICAgIFdURjo6cmVs
ZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5Rm9yVGhpc1RocmVhZCgpOworICAgICAgICAgICAgfSk7
CisKICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKLSAgICAgICAgQVNTRVJU
KG1fY3VycmVudFBoYXNlID09IENvcHkpOwotICAgICAgICBlbmRDdXJyZW50UGhhc2UoKTsKICAg
ICB9IGVsc2UKICAgICAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKIH0KQEAgLTg3
OCw4ICs4NjMsOCBAQCB2b2lkIEhlYXA6OnJlc2V0VmlzaXRvcnMoKQogewogICAgIG1fc2xvdFZp
c2l0b3IucmVzZXQoKTsKIAotICAgIGZvciAoR0NUaHJlYWQqIHRocmVhZCA6IG1fZ2NUaHJlYWRz
KQotICAgICAgICB0aHJlYWQtPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7CisgICAgZm9yIChhdXRv
JiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBwYXJh
bGxlbFZpc2l0b3ItPnJlc2V0KCk7CiAKICAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNF
bXB0eSgpKTsKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwpAQCAt
MTU0MCw0NSArMTUyNSwyNSBAQCBib29sIEhlYXA6OnN3ZWVwTmV4dExvZ2ljYWxseUVtcHR5V2Vh
a0JsCiBzaXplX3QgSGVhcDo6dGhyZWFkVmlzaXRDb3VudCgpCiB7ICAgICAgIAogICAgIHVuc2ln
bmVkIGxvbmcgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1Ro
cmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xv
dFZpc2l0b3IoKS0+dmlzaXRDb3VudCgpOworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9y
IDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlz
aXRvci0+dmlzaXRDb3VudCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHNpemVfdCBIZWFw
Ojp0aHJlYWRCeXRlc1Zpc2l0ZWQoKQogeyAgICAgICAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNWaXNp
dGVkKCk7CisgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzKQorICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQo
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXNDb3Bp
ZWQoKQogeyAgICAgICAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBt
X2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNDb3BpZWQoKTsKKyAgICBmb3IgKGF1
dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJl
c3VsdCArPSBwYXJhbGxlbFZpc2l0b3ItPmJ5dGVzQ29waWVkKCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBIZWFwOjpzdGFydE5leHRQaGFzZShHQ1BoYXNlIHBoYXNlKQotewotICAg
IHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgQVNTRVJUKCFt
X2djVGhyZWFkc1Nob3VsZFdhaXQpOwotICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1Bo
YXNlKTsKLSAgICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSB0cnVlOwotICAgIG1fY3VycmVudFBo
YXNlID0gcGhhc2U7Ci0gICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwot
fQotCi12b2lkIEhlYXA6OmVuZEN1cnJlbnRQaGFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZ2NUaHJl
YWRzU2hvdWxkV2FpdCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VN
dXRleCk7Ci0gICAgbV9jdXJyZW50UGhhc2UgPSBOb1BoYXNlOwotICAgIG1fZ2NUaHJlYWRzU2hv
dWxkV2FpdCA9IGZhbHNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwo
KTsKLSAgICBtX2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyBy
ZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDE3NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIldyaXRlQmFycmllclN1cHBvcnQuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM4
NCw3ICszODUsMTQgQEAgcHJpdmF0ZToKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJl
YWRzOwogICAgIAogICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAgQ29weVZpc2l0
b3IgbV9jb3B5VmlzaXRvcjsKKworICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNl
ZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8K
KyAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVt
IGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCisgICAgLy8gb25lIEdDIHRv
IHRoZSBuZXh0LiBHQyBtYXJraW5nIHRocmVhZHMgY2xhaW0gdGhlc2UgYXQgdGhlIHN0YXJ0IG9m
IG1hcmtpbmcsIGFuZCByZXR1cm4KKyAgICAvLyB0aGVtIGF0IHRoZSBlbmQuCisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4+IG1fcGFyYWxsZWxTbG90VmlzaXRvcnM7Cisg
ICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsK
KyAgICBMb2NrIG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2s7CiAKICAgICBIYW5kbGVTZXQgbV9o
YW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKQEAgLTQyMyw4ICs0MzEs
NiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zIHsgZmFsc2UgfTsKIAot
ICAgIFZlY3RvcjxHQ1RocmVhZCo+IG1fZ2NUaHJlYWRzOwotCiAgICAgTG9jayBtX21hcmtpbmdN
dXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgTWFy
a1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CkBAIC00MzksMTUgKzQ0NSwxMCBAQCBwcml2
YXRlOgogICAgIHNpemVfdCBtX2NvcHlJbmRleCB7IDAgfTsKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCi0gICAgTG9jayBtX3BoYXNlTXV0ZXg7
Ci0gICAgQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZTsKLSAgICBDb25kaXRpb24g
bV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlOwotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3Rp
dmVHQ1RocmVhZHMgeyAwIH07Ci0gICAgYm9vbCBtX2djVGhyZWFkc1Nob3VsZFdhaXQgeyBmYWxz
ZSB9OwotICAgIEdDUGhhc2UgbV9jdXJyZW50UGhhc2UgeyBOb1BoYXNlIH07Ci0KICAgICBMaXN0
YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVmZXJlbmNl
SGFydmVzdGVyczsKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXplcj46
Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKKworICAgIFBhcmFsbGVsSGVscGVyQ2xp
ZW50IG1faGVscGVyQ2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBIZWxw
ZXJQb29sLmgiCisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitQ
YXJhbGxlbEhlbHBlclBvb2wmIGhlYXBIZWxwZXJQb29sKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgaW5pdGlhbGl6ZUhlbHBlclBvb2xPbmNlRmxhZzsKKyAgICBzdGF0aWMgUGFyYWxs
ZWxIZWxwZXJQb29sKiBoZWxwZXJQb29sOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBp
bml0aWFsaXplSGVscGVyUG9vbE9uY2VGbGFnLAorICAgICAgICBbXSB7CisgICAgICAgICAgICBo
ZWxwZXJQb29sID0gbmV3IFBhcmFsbGVsSGVscGVyUG9vbCgpOworICAgICAgICAgICAgaGVscGVy
UG9vbC0+ZW5zdXJlVGhyZWFkcyhPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpKTsKKyAgICAg
ICAgfSk7CisgICAgcmV0dXJuICpoZWxwZXJQb29sOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcEhlbHBlclBvb2xfaAorI2RlZmlu
ZSBIZWFwSGVscGVyUG9vbF9oCisKKyNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitQYXJhbGxlbEhlbHBlclBvb2wmIGhlYXBIZWxwZXJQb29s
KCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcEhlbHBlclBvb2xfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZp
c2lvbiAxOTAxNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDEwICs2Nyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZygpCiAgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09
IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
OyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgogCi0gICAgbV9oZWFwLm1fc2hvdWxkSGFz
aENvbnMgPSBtX2hlYXAubV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CiAg
ICAgbV9zaG91bGRIYXNoQ29ucyA9IG1faGVhcC5tX3Nob3VsZEhhc2hDb25zOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2hlYXAubV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1faGVhcC5tX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+bV9zaG91bGRIYXNoQ29u
cyA9IG1faGVhcC5tX3Nob3VsZEhhc2hDb25zOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNl
dCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCShy
ZXZpc2lvbiAxOTAxNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFu
ZG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJYW4g
Qy4gQnVsbGFyZAotICogCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KLSAqIGZpbGVzICh0aGUgIlNvZnR3YXJl
IiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLSAqIHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAotICogY29weSwgbW9k
aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwK
LSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm
b2xsb3dpbmcKLSAqIGNvbmRpdGlvbnM6Ci0gKiAKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0gKiBpbmNsdWRlZCBpbiBh
bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqIAot
ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU
RUQgVE8gVEhFIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAotICogSE9MREVSUyBCRSBMSUFCTEUgRk9S
IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElOIEFO
IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00s
IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IK
LSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIFdlYWtS
YW5kb21faAotI2RlZmluZSBXZWFrUmFuZG9tX2gKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIFdl
YWtSYW5kb20gewotZnJpZW5kIGNsYXNzIEpTR2xvYmFsT2JqZWN0OyAvLyBGb3IgYWNjZXNzIHRv
IGluaXRpYWxpemVTZWVkKCkgZHVyaW5nIHJlcGxheS4KLXB1YmxpYzoKLSAgICBXZWFrUmFuZG9t
KHVuc2lnbmVkIHNlZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXplU2VlZChzZWVkKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0aGUgc2VlZCBwcm92aWRlZCB0aGF0IHlvdSd2ZSBu
ZXZlciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWludDMyKCkuCi0gICAgdW5zaWduZWQgc2VlZFVuc2Fm
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQotCi0gICAgZG91YmxlIGdldCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWR2YW5jZSgpIC8gKFVJTlRfTUFYICsgMS4wKTsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBnZXRVaW50MzIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgYWR2YW5jZSgpCi0gICAgewotICAgICAg
ICBtX2hpZ2ggPSAobV9oaWdoIDw8IDE2KSArIChtX2hpZ2ggPj4gMTYpOwotICAgICAgICBtX2hp
Z2ggKz0gbV9sb3c7Ci0gICAgICAgIG1fbG93ICs9IG1faGlnaDsKLSAgICAgICAgcmV0dXJuIG1f
aGlnaDsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRpYWxpemVTZWVkKHVuc2lnbmVkIHNlZWQpCi0g
ICAgewotICAgICAgICBtX2xvdyA9IHNlZWQgXiAweDQ5NjE2RTQyOwotICAgICAgICBtX2hpZ2gg
PSBzZWVkOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1fbG93OwotICAgIHVuc2lnbmVkIG1faGln
aDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gV2Vha1JhbmRvbV9oCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
MDE3NykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8q
IE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3
QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAv
KiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FF
M0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJ
CTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMg
LyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBG
ODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9p
bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKQEAgLTQ4LDYgKzQ5
LDggQEAKIAkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlBMUI3QUFBMDMw
MDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi87IH07CiAJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThF
QiAvKiBXb3JkTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi87IH07CiAJCTBG
RUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oICovOyB9OworCQkwRkZGMTlEQzFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxs
ZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3Bw
ICovOyB9OworCQkwRkZGMTlERDFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29s
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGMTlE
QjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi87IH07CiAJCTE0MDIy
RjQxMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyog
bGliYm1hbGxvYy5hICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNG
NjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2
NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC0zMTIsNiArMzE1LDcgQEAK
IAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAw
QjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hN
ZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNTAxNjMxQkIyNThDODAw
RjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2NDFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0zMzYsNiArMzQwLDggQEAKIAkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8q
IFdvcmRMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmRM
b2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNDQ3OUIxQjdBQUEwMzAw
OTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdv
cmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRjE5REExQkIz
MzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxw
ZXJQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSGVscGVy
UG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0MDE4RjVDM0ZDMDA3
RkYwRUIgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8q
IFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNp
emUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOCw2ICs4MjQsOCBAQAogCQkJ
CUE4QTQ3MkUzMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwICovLAogCQkJCUE4QTQ3
MkU0MTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suaCAqLywKIAkJCQlBOEE0NzJFNTE1MUE4
MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCisJCQkJMEZGRjE5REExQkIzMzRF
QjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEZGRjE5REIxQkIz
MzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovLAogCQkJCUE4QTQ3MkU2MTUx
QTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVC
MDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLywKIAkJCQkwRjgyNEE2NDFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8sCkBAIC04OTIsNiArOTAwLDcgQEAK
IAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJCQkJ
QThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTk3NENGQzhEMTZB
NEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCisJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBB
MkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyog
V29yZExvY2suY3BwICovLAogCQkJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9j
ay5oICovLAogCQkJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICov
LApAQCAtMTA2Myw2ICsxMDcyLDcgQEAKIAkJCQlBOEE0NzM4NTE1MUE4MjVCMDA0MTIzRkYgLyog
QVNDSUlDVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzQxNTFBODI1QjAwNDEyM0ZG
IC8qIEFTQ0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzg3MTUxQTgyNUIw
MDQxMjNGRiAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjM1MDE2NDFCQjI1
OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczODgx
NTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDM2
MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTdD
REQ3RkY4MTg2RDI5MUUwMDc0MzNDRCAvKiBJdGVyYXRvckFkYXB0b3JzLmggaW4gSGVhZGVycyAq
LywKQEAgLTEwNzUsNiArMTA4NSw3IEBACiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8q
IGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVCMDA0MTIz
RkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGQTE4NkQyQTU0MDA3NDMz
Q0QgLyogSXRlcmF0b3JSYW5nZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGRjE5REQxQkIzMzRF
QjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0NTIxNTFBODI1QjAwNDEyM0ZGIC8qIEJpbmFyeVNlbWFwaG9yZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDczOEExNTFBODI1QjAwNDEyM0ZGIC8qIEJpdG1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDczOEMxNTFBODI1QjAwNDEyM0ZGIC8qIEJpdFZlY3Rvci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xMzkzLDYgKzE0MDQsNyBAQAogCQkJCTJDREVEMEYzMTgxMTVDODUwMDREQkE3MCAv
KiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVEMEVGMTgxMTVDMzgwMDREQkE3
MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTMxNkVBQUY2RDAw
MjRFMTQ2IC8qIFJ1bkxvb3BUaW1lckNGLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRkYxOURD
MUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MjExNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTRBMEFEMzkxQTk2MjQ1NTAwNTM2REY2IC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJh
bGxlbEhlbHBlclBvb2wuaCIKKworbmFtZXNwYWNlIFdURiB7CisKK1BhcmFsbGVsSGVscGVyQ2xp
ZW50OjpQYXJhbGxlbEhlbHBlckNsaWVudChSZWY8UGFyYWxsZWxIZWxwZXJQb29sPiBwb29sKQor
ICAgIDogbV9wb29sKHBvb2wpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xv
Y2spOworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Bvb2wtPm1faXNEeWluZyk7CisgICAgbV9jbGll
bnRzLmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhl
bHBlckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwor
ICAgIGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wt
Pm1fY2xpZW50czsgKytpKSB7CisgICAgICAgIGlmIChtX3Bvb2wtPm1fY2xpZW50c1tpXSA9PSB0
aGlzKSB7CisgICAgICAgICAgICBtX3Bvb2wtPm1fY2xpZW50c1tpXSA9IG1fcG9vbC0+bV9jbGll
bnRzLmxhc3QoKTsKKyAgICAgICAgICAgIG1fcG9vbC0+bV9jbGllbnRzLnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFBhcmFsbGVs
SGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7Cisg
ICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIFJFTEVBU0VfQVNTRVJU
KCFtX3Rhc2spOworICAgIG1fdGFzayA9IHRhc2s7CisgICAgbV9wb29sLT5kaWRNYWtlV29ya0F2
YWlsYWJsZShsb2NrZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2go
KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBmaW5pc2go
bG9ja2VyKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZygp
Cit7CisgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gdGFzazsKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICAgICAgdGFzayA9IGNsYWlt
VGFzayhsb2NrZXIpOworICAgICAgICBpZiAoIXRhc2spCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgcnVuVGFzayh0YXNrKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVu
dDo6cnVuVGFza0luUGFyYWxsZWwoUmVmPFBhcmFsbGVsSGVscGVyVGFzaz4gdGFzaykKK3sKKyAg
ICBzZXRUYXNrKHRhc2spOworICAgIGRvU29tZUhlbHBpbmcoKTsKKyAgICBmaW5pc2goKTsKK30K
Kwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKQor
eworICAgIG1fdGFzayA9IG51bGxwdHI7CisgICAgd2hpbGUgKG1fbnVtQWN0aXZlKQorICAgICAg
ICBtX3Bvb2wtPm1fd29ya0NvbXBsZXRlQ29uZGl0aW9uLndhaXQoKTsKK30KKworUmVmUHRyPFBh
cmFsbGVsSGVscGVyVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25zdCBM
b2NrSG9sZGVyJikKK3sKKyAgICBpZiAoIW1fdGFzaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgbV9udW1BY3RpdmUrKzsKKyAgICByZXR1cm4gbV90YXNrOworfQorCit2b2lk
IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+
IHRhc2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOworICAgIFJFTEVBU0Vf
QVNTRVJUKHRhc2spOworICAgIAorICAgIHRhc2stPnJ1bigpOworCisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fbnVtQWN0aXZlKTsKKyAgICAgICAgbV90YXNrID0gbnVsbHB0cjsKKyAgICAgICAgbV9udW1B
Y3RpdmUtLTsKKyAgICAgICAgaWYgKCFtX251bUFjdGl2ZSkKKyAgICAgICAgICAgIG1fcG9vbC0+
bV93b3JrQ29tcGxldGVDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQorfQorCitQYXJhbGxl
bEhlbHBlclBvb2w6OlBhcmFsbGVsSGVscGVyUG9vbCgpCit7Cit9CisKK1BhcmFsbGVsSGVscGVy
UG9vbDo6flBhcmFsbGVsSGVscGVyUG9vbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jbGll
bnRzLmlzRW1wdHkoKSk7CisgICAgCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworICAgICAgICBtX2lzRHlpbmcgPSB0cnVlOworICAgICAgICBtX3dvcmtBdmFpbGFi
bGVDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgZm9yIChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElkZW50aWZpZXIgOiBtX3RocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRD
b21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9v
bDo6YWRkVGhyZWFkcyh1bnNpZ25lZCBudW1UaHJlYWRzKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgbV9udW1UaHJlYWRzICs9IG51bVRocmVhZHM7CisgICAgaWYgKGdl
dENsaWVudFdpdGhUYXNrKGxvY2tlcikpCisgICAgICAgIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGxv
Y2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVUaHJlYWRzKHVuc2ln
bmVkIG51bVRocmVhZHMpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBp
ZiAobnVtVGhyZWFkcyA8IG1fbnVtVGhyZWFkcykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbnVt
VGhyZWFkcyA9IG51bVRocmVhZHM7CisgICAgaWYgKGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikp
CisgICAgICAgIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxs
ZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKCkKK3sKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVu
dCogY2xpZW50OworICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2s7CisgICAgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBjbGllbnQgPSBnZXRD
bGllbnRXaXRoVGFzayhsb2NrZXIpOworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgdGFzayA9IGNsaWVudC0+Y2xhaW1UYXNrKGxvY2tlcik7CisgICAg
fQorCisgICAgY2xpZW50LT5ydW5UYXNrKHRhc2spOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVy
UG9vbDo6ZGlkTWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgd2hp
bGUgKG1fbnVtVGhyZWFkcyA+IG1fdGhyZWFkcy5zaXplKCkpIHsKKyAgICAgICAgVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgIlBh
cmFsbGVsIEhlbHBlciBUaHJlYWQiLAorICAgICAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAg
ICAgICAgICBoZWxwZXJUaHJlYWRCb2R5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV90
aHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICB9CisgICAgbV9wb29sLT5tX3dv
cmtBdmFpbGFibGVDb25kaXRpb24ubm90aWZ5QWxsKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxw
ZXJQb29sOjpoZWxwZXJUaHJlYWRCb2R5KCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFBh
cmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBl
clRhc2s+IHRhc2s7CisKKyAgICAgICAgeworICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICAgICAgICAgIGNsaWVudCA9IHdhaXRGb3JDbGllbnRXaXRoVGFzayhsb2Nr
ZXIpOworICAgICAgICAgICAgaWYgKCFjbGllbnQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX2lzRHlpbmcpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdGFzayA9IGNsaWVudC0+Y2xhaW1UYXNrKGxvY2tlcik7CisgICAg
ICAgIH0KKworICAgICAgICBjbGllbnQtPnJ1blRhc2sodGFzayk7CisgICAgfQorfQorCitib29s
IFBhcmFsbGVsSGVscGVyUG9vbDo6aGFzQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYg
bG9ja2VyKQoreworICAgIHJldHVybiAhIWdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7Cit9CisK
K1BhcmFsbGVsSGVscGVyQ2xpZW50KiBQYXJhbGxlbEhlbHBlclBvb2w6OmdldENsaWVudFdpdGhU
YXNrKGNvbnN0IExvY2tIb2xkZXImKQoreworICAgIC8vIFdlIGxvYWQtYmFsYW5jZSBieSBiZWlu
ZyByYW5kb20uCisgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IG1fcmFuZG9tLmdldFVpbnQzMiht
X2NsaWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gc3RhcnRJbmRleDsg
aW5kZXggPCBtX2NsaWVudHMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgIFBhcmFsbGVsSGVs
cGVyQ2xpZW50KiBjbGllbnQgPSBtX2NsaWVudHNbaW5kZXhdOworICAgICAgICBpZiAoY2xpZW50
LT5tX3Rhc2spCisgICAgICAgICAgICByZXR1cm4gY2xpZW50OworICAgIH0KKyAgICBmb3IgKHVu
c2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyArK2luZGV4KSB7CisgICAgICAg
IFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQgPSBtX2NsaWVudHNbaW5kZXhdOworICAgICAg
ICBpZiAoY2xpZW50cy0+bV90YXNrKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudDsKKyAgICB9
CisKKyAgICByZXR1cm4gbnVsbHB0OworfQorCitQYXJhbGxlbEhlbHBlckNsaWVudCogUGFyYWxs
ZWxIZWxwZXJQb29sOjp3YWl0Rm9yQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYgbG9j
a2VyKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgLy8gSXQgbWlnaHQgYmUgcXVpdHRpbicg
dGltZS4KKyAgICAgICAgaWYgKG1faXNEeWluZykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIGlmIChQYXJhbGxlbEhlbHBlckNsaWVudCogcmVzdWx0ID0gZ2V0Q2xpZW50
V2l0aFRhc2sobG9ja2VyKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAg
Ly8gV2FpdCB1bnRpbCB3b3JrIGJlY29tZXMgYXZhaWxhYmxlLgorICAgICAgICBtX3dvcmtBdmFp
bGFibGVDb25kaXRpb24ud2FpdCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBQYXJhbGxlbEhlbHBlclBvb2xfaAorI2RlZmluZSBQYXJhbGxlbEhlbHBlclBvb2xf
aAorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBBIFBhcmFsbGVsSGVscGVyUG9vbCBpcyBhIHNoYXJlZCBwb29sIG9mIHRocmVhZHMgdGhh
dCBjYW4gYmUgYXNrZWQgdG8gaGVscCB3aXRoIHNvbWUgZmluaXRlLXRpbWUKKy8vIHBhcmFsbGVs
IGFjdGl2aXR5LiBJdCdzIGRlc2lnbmVkIHRvIHdvcmsgd2VsbCB3aGVuIHRoZXJlIGFyZSBtdWx0
aXBsZSBjb25jdXJyZW50IHRhc2tzIHRoYXQgbWF5CisvLyBhbGwgd2FudCBwYXJhbGxlbCBoZWxw
LiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgZWFjaCB0YXNrIHRvIHN0YXJ0IGl0cyBvd24g
dGhyZWFkIHBvb2wuIEl0J3MKKy8vIGFsc28gZGVzaWduZWQgdG8gd29yayB3ZWxsIGZvciB0YXNr
cyB0aGF0IGRvIHRoZWlyIG93biBsb2FkIGJhbGFuY2luZyBhbmQgZG8gbm90IHdpc2ggdG8KKy8v
IHBhcnRpY2lwYXRlIGluIG1pY3JvdGFzay1zdHlsZSBsb2FkIGJhbGFuY2luZy4KKy8vCisvLyBB
IHBvb2wgY2FuIGhhdmUgbWFueSBjbGllbnRzLCBhbmQgZWFjaCBjbGllbnQgbWF5IGhhdmUgemVy
byBvciBvbmUgdGFza3MuIFRoZSBwb29sIHdpbGwgaGF2ZSB1cAorLy8gdG8gc29tZSBudW1iZXIg
b2YgdGhyZWFkcywgY29uZmlndXJhYmxlIHdpdGggUGFyYWxsZWxIZWxwZXJQb29sOjphZGRUaHJl
YWRzKCk7IHVzdWFsbHkgeW91IGJvdW5kCisvLyB0aGlzIGJ5IHRoZSBudW1iZXIgb2YgQ1BVcy4g
V2hlbmV2ZXIgYSB0aHJlYWQgaXMgaWRsZSBhbmQgaXQgbm90aWNlcyB0aGF0IHNvbWUgY2xpZW50
IGhhcyBhCisvLyB0YXNrLCBpdCB3aWxsIHJ1biB0aGUgdGFzay4gQSB0YXNrIG1heSBiZSBydW4g
b24gYW55d2hlcmUgYmV0d2VlbiB6ZXJvIGFuZCBOIHRocmVhZHMsIHdoZXJlIE4gaXMKKy8vIHRo
ZSBudW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUgcG9vbC4gVGFza3MgcnVuIHRvIGNvbXBsZXRpb24u
IEl0J3MgZXhwZWN0ZWQgdGhhdCBhIHRhc2sgd2lsbCBoYXZlCisvLyBpdHMgb3duIGN1c3RvbSBp
ZGVhcyBhYm91dCBob3cgdG8gcGFydGljaXBhdGUgaW4gc29tZSBwYXJhbGxlbCBhY3Rpdml0eSdz
IGxvYWQgYmFsYW5jaW5nLCBhbmQgaXQKKy8vIHdpbGwgcmV0dXJuIHdoZW4gdGhlIHBhcmFsbGVs
IGFjdGl2aXR5IGlzIGRvbmUuIEZvciBleGFtcGxlLCBhIHBhcmFsbGVsIG1hcmtpbmcgdGFzayB3
aWxsIHJldHVybgorLy8gd2hlbiB0aGUgbWFyayBwaGFzZSBpcyBkb25lLgorLy8KKy8vIFRocmVh
ZHMgbWF5IGhhdmUgYSBjaG9pY2UgYmV0d2VlbiBtYW55IHRhc2tzLCBzaW5jZSB0aGVyZSBtYXkg
YmUgbWFueSBjbGllbnRzIGFuZCBlYWNoIGNsaWVudAorLy8gbWF5IGhhdmUgYSB0YXNrLiBGb3Ig
dGhlIG1hcmtpbmcgZXhhbXBsZSwgdGhhdCBtYXkgaGFwcGVuIGlmIHRoZXJlIGFyZSBtdWx0aXBs
ZSBWTSBpbnN0YW5jZXMgYW5kCisvLyBlYWNoIGluc3RhbmNlIGRlY2lkZXMgdG8gc3RhcnQgcGFy
YWxsZWwgbWFya2luZyBhdCB0aGUgc2FtZSB0aW1lLiBJbiB0aGF0IGNhc2UsIHRocmVhZHMgY2hv
b3NlCisvLyBhIHRhc2sgYXQgcmFuZG9tLiBTbyBsb25nIGFzIGFueSBjbGllbnQgaGFzIGEgdGFz
aywgYWxsIHRocmVhZHMgaW4gdGhlIHBvb2wgd2lsbCBjb250aW51ZQorLy8gcnVubmluZyB0aGUg
YXZhaWxhYmxlIHRhc2tzLiBUaHJlYWRzIGdvIGlkbGUgd2hlbiBubyBjbGllbnQgaGFzIHRhc2tz
IHRvIHJ1bi4KKworLy8gQSB0YXNrIGVuY2Fwc3VsYXRlcyBvbmUgdGhyZWFkJ3Mgd29ydGggb2Yg
YWN0aXZpdHkgaW4gc29tZSBwYXJhbGxlbCBhbGdvcml0aG0uIFRoZSBwb29sIHdpbGwKKy8vIHJ1
biB0aGlzIHRhc2sgb24gcG90ZW50aWFsbHkgbWFueSB0aHJlYWRzLiBUaGUgcG9vbCBtYXkgbm90
IHJ1biB0aGUgdGFzayBvbiBhbnkgdGhyZWFkcywgb2YgYWxsCisvLyB0aHJlYWRzIGFyZSBidXN5
IHJ1bm5pbmcgb3RoZXIgdGFza3MuIFRhc2tzIG1heSBqb2luIGluIGF0IGFueSB0aW1lLgorLy8K
Ky8vIFRhc2tzIHNob3VsZCBjb21wbGV0ZSBpbiBmaW5pdGUgdGltZS4gUGFyYWxsZWxIZWxwZXJQ
b29sIGFuZCBmcmllbmRzIGFyZSBtZWFudCB0byBiZSB1c2VkIGZvcgorLy8gcGFyYWxsZWwgYWxn
b3JpdGhtcyB0aGF0IHJ1biB0byBjb21wbGV0aW9uLiBBIGdvb2QgZXhhbXBsZSBpcyBzb21ldGhp
bmcgbGlrZSBwYXJhbGxlbCBtYXJraW5nLAorLy8gd2hpY2ggY2FuIGJlIGxvbmctcnVubmluZyBi
dXQgYWx3YXlzIHRlcm1pbmF0ZXMuCitjbGFzcyBQYXJhbGxlbEhlbHBlclRhc2sgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGFyYWxsZWxIZWxwZXJUYXNrPiB7CitwdWJsaWM6CisgICAg
UGFyYWxsZWxIZWxwZXJUYXNrKCkgeyB9CisgICAgdmlydHVhbCB+UGFyYWxsZWxIZWxwZXJUYXNr
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFBhcmFsbGVsSGVscGVyVGFza0Z1bmN0b3IgOiBwdWJsaWMg
UGFyYWxsZWxIZWxwZXJUYXNrIHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbEhlbHBlclRhc2tGdW5j
dG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKGZ1bmN0b3Ip
CisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHJ1bigpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2Z1bmN0b3IoKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsK
K307CisKKy8vIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKKy8vCisvLyBSZWY8UGFyYWxsZWxI
ZWxwZXJUYXNrPiB0YXNrID0gY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKAorLy8gICAgIFs9XSAo
KSB7CisvLyAgICAgICAgIGRvIHRoaW5nczsKKy8vICAgICB9KTsKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CitSZWY8UGFyYWxsZWxIZWxwZXJUYXNrPiBjcmVhdGVQYXJhbGxlbEhlbHBlclRh
c2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
YXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yKGZ1bmN0b3IpKTsKK30KKworY2xhc3MgUGFyYWxsZWxI
ZWxwZXJQb29sOworCisvLyBBIGNsaWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIHBhcmFsbGVs
IGFsZ29yaXRobS4gQSBwYXJhbGxlbCBhbGdvcml0aG0gd2lsbCBoYXZlIGEgdGFzayB0aGF0Cisv
LyBjYW4gYmUgcnVuIGNvbmN1cnJlbnRseS4gV2hlbmV2ZXIgYSBjbGllbnQgaGFzIGEgdGFzayBz
ZXQgKHlvdSBoYXZlIGNhbGxlZCBzZXRUYXNrKCkgb3IKKy8vIHNldEZ1bmN0aW9uKCkpLCB0aHJl
YWRzIGluIHRoZSBwb29sIG1heSBydW4gdGhhdCB0YXNrLiBJZiBhIHRhc2sgcmV0dXJucyBvbiBh
bnkgdGhyZWFkLCB0aGUKKy8vIGNsaWVudCB3aWxsIGFzc3VtZSB0aGF0IHRoZSB0YXNrIGlzIGRv
bmUgYW5kIHdpbGwgY2xlYXIgdGhlIHRhc2suIElmIHRoZSB0YXNrIGlzIGNsZWFyZWQgKHRoZQor
Ly8gdGFzayBydW5zIHRvIGNvbXBsZXRpb24gb24gYW55IHRocmVhZCBvciB5b3UgY2FsbCBmaW5p
c2goKSksIGFueSB0aHJlYWRzIGluIHRoZSBwb29sIGFscmVhZHkKKy8vIHJ1bm5pbmcgdGhlIGxh
c3Qgc2V0IHRhc2socykgd2lsbCBjb250aW51ZSB0byBydW4gdGhlbS4gWW91IGNhbiB3YWl0IGZv
ciBhbGwgb2YgdGhlbSB0byBmaW5pc2gKKy8vIGJ5IGNhbGxpbmcgd2FpdFVudGlsSWRsZSgpLiBU
aGVyZSBhcmUgdHdvIGtub3duLWdvb2QgcGF0dGVybnMgZm9yIHVzaW5nIGEgY2xpZW50OgorLy8K
Ky8vIDEpIFRhc2tzIGludHJpbnNpY2FsbHkga25vdyB3aGVuIHRoZSBhbGdvcml0aG0gcmVhY2hl
cyB0ZXJtaW5hdGlvbiwgYW5kIHNpbXBseSByZXR1cm5zIHdoZW4gdGhpcworLy8gICAgaGFwcGVu
cy4gVGhlIG1haW4gdGhyZWFkIHJ1bnMgdGhlIHRhc2sgYnkgZG9pbmc6CisvLworLy8gICAgY2xp
ZW50LT5zZXRGdW5jdGlvbigKKy8vICAgICAgICBbPV0gKCkgeworLy8gICAgICAgICAgICBkbyB0
aGluZ3M7CisvLyAgICAgICAgfSk7CisvLyAgICBjbGllbnQtPmRvU29tZUhlbHBpbmcoKTsKKy8v
ICAgIGNsaWVudC0+ZmluaXNoKCk7CisvLworLy8gICAgQ2FsbGluZyBkb1NvbWVIZWxwaW5nKCkg
ZW5zdXJlcyB0aGF0IHRoZSBhbGdvcml0aG0gcnVucyBvbiBhdCBsZWFzdCBvbmUgdGhyZWFkICh0
aGlzIG9uZSkuCisvLyAgICBUYXNrcyB3aWxsIGtub3cgd2hlbiB0byBjb21wbGV0ZSwgYW5kIHdp
bGwgcmV0dXJuIHdoZW4gdGhleSBhcmUgZG9uZS4gVGhpcyB3aWxsIGNsZWFyIHRoZQorLy8gICAg
dGFzayB0byBlbnN1cmUgdGhhdCBubyBuZXcgdGhyZWFkcyB3aWxsIHJ1biB0aGUgdGFzay4gVGhl
biwgZmluaXNoKCkgY2xlYXJzIHRoZSBjdXJyZW50IHRhc2sKKy8vICAgIGFuZCB3YWl0cyBmb3Ig
YW55IHBhcmFsbGVsIHRhc2tzIHRvIGZpbmlzaCBhZnRlciB0aGUgbWFpbiB0aHJlYWQgaGFzIGZp
bmlzaGVkLiBJdCdzIHBvc3NpYmxlCisvLyAgICBmb3IgdGhyZWFkcyB0byBzdGlsbCBiZSBydW5u
aW5nIHRoZSBsYXN0IHNldCB0YXNrIChpLmUuIHRoZSBvbmUgc2V0IGJ5IHNldEZ1bmN0aW9uKCkp
IGV2ZW4KKy8vICAgIGFmdGVyIHRoZSB0YXNrIGhhcyBiZWVuIGNsZWFyZWQuIFdhaXRpbmcgZm9y
IGlkbGUgZW5zdXJlcyB0aGF0IG5vIG9sZCB0YXNrcyBhcmUgcnVubmluZworLy8gICAgYW55bW9y
ZS4KKy8vCisvLyAgICBZb3UgY2FuIGRvIHRoaXMgbW9yZSBlYXNpbHkgYnkgdXNpbmcgdGhlIHJ1
bkZ1bmN0aW9uSW5QYXJhbGxlbCgpIGhlbHBlcjoKKy8vCisvLyAgICBjbGllbnRzLT5ydW5GdW5j
dGlvbkluUGFyYWxsZWwoCisvLyAgICAgICAgWz1dICgpIHsKKy8vICAgICAgICAgICAgZG8gdGhp
bmdzOworLy8gICAgICAgIH0pOworLy8KKy8vIDIpIFRhc2tzIGtlZXAgZG9pbmcgdGhpbmdzIHVu
dGlsIHRoZXkgYXJlIHRvbGQgdG8gcXVpdCB1c2luZyBzb21lIGN1c3RvbSBub3RpZmljYXRpb24g
bWVjaGFuaXNtLgorLy8gICAgVGhlIG1haW4gdGhyZWFkIHJ1bnMgdGhlIHRhc2sgYnkgZG9pbmc6
CisvLworLy8gICAgYm9vbCBrZWVwR29pbmcgPSB0cnVlOworLy8gICAgY2xpZW50LT5zZXRGdW5j
dGlvbigKKy8vICAgICAgICBbPV0gKCkgeworLy8gICAgICAgICAgICB3aGlsZSAoa2VlcEdvaW5n
KSB7CisvLyAgICAgICAgICAgICAgICBkbyB0aGluZ3M7CisvLyAgICAgICAgICAgIH0KKy8vICAg
ICAgICB9KTsKKy8vCisvLyAgICBXaGVuIHdvcmsgcnVucyBvdXQsIHRoZSBtYWluIHRocmVhZCB3
aWxsIGluZm9ybSB0YXNrcyB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgd29yaywgYW5kIHRoZW4KKy8v
ICAgIHdhaXQgdW50aWwgbm8gbW9yZSB0YXNrcyBhcmUgcnVubmluZzoKKy8vCisvLyAgICBrZWVw
R29pbmcgPSBmYWxzZTsKKy8vICAgIGNsaWVudC0+ZmluaXNoKCk7CisvLworLy8gICAgVGhpcyB3
b3JrcyBiZXN0IHdoZW4gdGhlIG1haW4gdGhyZWFkIGRvZXNuJ3QgYWN0dWFsbHkgd2FudCB0byBy
dW4gdGhlIHRhc2sgdGhhdCBpdCBzZXQgaW4gdGhlCisvLyAgICBjbGllbnQuIFRoaXMgaGFwcGVu
cyBmb3IgZXhhbXBsZSBpbiBwYXJhbGxlbCBtYXJraW5nLiBUaGUgbWFpbiB0aHJlYWQgdXNlcyBh
IHNvbWV3aGF0CisvLyAgICBkaWZmZXJlbnQgbWFya2luZyBhbGdvcml0aG0gdGhhbiB0aGUgaGVs
cGVycy4gVGhlIG1haW4gdGhyZWFkIG1heSBwcm92aWRlIHdvcmsgdGhhdCB0aGUKKy8vICAgIGhl
bHBlcnMgc3RlYWwuIFRoZSBtYWluIHRocmVhZCBrbm93cyB3aGVuIHRlcm1pbmF0aW9uIGlzIHJl
YWNoZWQsIGFuZCBzaW1wbHkgdGVsbHMgdGhlCisvLyAgICBoZWxwZXJzIHRvIHN0b3AgdXBvbiB0
ZXJtaW5hdGlvbi4KK2NsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQYXJhbGxlbEhlbHBlckNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KFJlZjxQYXJhbGxlbEhlbHBlclBv
b2w+KTsKKyAgICB+UGFyYWxsZWxIZWxwZXJDbGllbnQoKTsKKworICAgIHZvaWQgc2V0VGFzayhS
ZWY8UGFyYWxsZWxIZWxwZXJUYXNrPik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgc2V0RnVuY3Rpb24oY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIHNldFRhc2soY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKGZ1bmN0b3IpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHZvaWQgZG9Tb21lSGVscGluZygpOwor
CisgICAgLy8gRXF1aXZhbGVudCB0bzoKKyAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7Cisg
ICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsK
KyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZjxQYXJhbGxlbEhlbHBlclRhc2s+KTsKKwor
ICAgIC8vIEVxdWl2YWxlbnQgdG86CisgICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9y
KTsKKyAgICAvLyBjbGllbnQtPmRvU29tZUhlbHBpbmcoKTsKKyAgICAvLyBjbGllbnQtPmZpbmlz
aCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBydW5GdW5jdGlv
bkluUGFyYWxsZWwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJ1blRh
c2tJblBhcmFsbGVsKGNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzayhmdW5jdG9yKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEhlbHBlclBvb2w7CisKKyAgICB2
b2lkIGZpbmlzaChjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVy
VGFzaz4gY2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHJ1blRhc2soUmVm
UHRyPFBhcmFsbGVsSGVscGVyVGFzaz4pOworICAgIAorICAgIFJlZjxQYXJhbGxlbEhlbHBlclBv
b2w+IG1fcG9vbDsKKyAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiBtX3Rhc2s7CisgICAg
dW5zaWduZWQgbV9udW1BY3RpdmUgeyAwIH07Cit9OworCitjbGFzcyBQYXJhbGxlbEhlbHBlclBv
b2wgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGFyYWxsZWxIZWxwZXJQb29sPiB7Citw
dWJsaWM6CisgICAgUGFyYWxsZWxIZWxwZXJQb29sKCk7CisgICAgflBhcmFsbGVsSGVscGVyUG9v
bCgpOworCisgICAgdm9pZCBhZGRUaHJlYWRzKHVuc2lnbmVkIG51bVRocmVhZHMpOworICAgIHZv
aWQgZW5zdXJlVGhyZWFkcyh1bnNpZ25lZCBudW1UaHJlYWRzKTsKKyAgICAKKyAgICB2b2lkIGRv
U29tZUhlbHBpbmcoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxIZWxw
ZXJDbGllbnQ7CisKKyAgICB2b2lkIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGNvbnN0IExvY2tIb2xk
ZXImKTsKKyAgICB2b2lkIGhlbHBlclRocmVhZEJvZHkoKTsKKworICAgIGJvb2wgaGFzQ2xpZW50
V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBn
ZXRDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUGFyYWxsZWxIZWxwZXJD
bGllbnQqIHdhaXRGb3JDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgCisg
ICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbjsK
KyAgICBDb25kaXRpb24gbV93b3JrQ29tcGxldGVDb25kaXRpb247CisKKyAgICBXZWFrUmFuZG9t
IG1fcmFuZG9tOworICAgIAorICAgIFZlY3RvcjxQYXJhbGxlbEhlbHBlckNsaWVudCo+IG1fY2xp
ZW50czsKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV90aHJlYWRzOworICAgIHVuc2ln
bmVkIG1fbnVtVGhyZWFkcyB7IDAgfTsKKyAgICBib29sIG1faXNEeWluZyB7IGZhbHNlIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpjcmVhdGVQYXJhbGxlbEhlbHBl
clRhc2s7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OwordXNpbmcgV1RGOjpQYXJh
bGxlbEhlbHBlclBvb2w7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyVGFzazsKK3VzaW5nIFdU
Rjo6UGFyYWxsZWxIZWxwZXJUYXNrRnVuY3RvcjsKKworI2VuZGlmIC8vIFBhcmFsbGVsSGVscGVy
UG9vbF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgJKHJldmlzaW9uIDE5MDE1MSkJKGZyb20gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oOjE5MDE1MSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKgorICogQ29weXJp
Z2h0IChjKSAyMDA5IElhbiBDLiBCdWxsYXJkCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiBvYnRhaW5pbmcgYSBj
b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICogZmls
ZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorICog
cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1
c2UsCisgKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl
bnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p
dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s
IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUK
KyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhl
IFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU
SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVE
SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklM
SVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdF
TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgKiBIT0xE
RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwK
KyAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg
QVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICov
CisKKyNpZm5kZWYgV2Vha1JhbmRvbV9oCisjZGVmaW5lIFdlYWtSYW5kb21faAorCisjaW5jbHVk
ZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgV2Vha1JhbmRvbSB7CitmcmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7
IC8vIEZvciBhY2Nlc3MgdG8gaW5pdGlhbGl6ZVNlZWQoKSBkdXJpbmcgcmVwbGF5LgorcHVibGlj
OgorICAgIFdlYWtSYW5kb20odW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIGluaXRpYWxp
emVTZWVkKHNlZWQpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBzZWVkIHByb3Zp
ZGVkIHRoYXQgeW91J3ZlIG5ldmVyIGNhbGxlZCBnZXQoKSBvciBnZXRVaW50MzIoKS4KKyAgICB1
bnNpZ25lZCBzZWVkVW5zYWZlKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisKKyAgICBkb3Vi
bGUgZ2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZHZhbmNlKCkgLyAoVUlOVF9NQVggKyAx
LjApOworICAgIH0KKworICAgIHVuc2lnbmVkIGdldFVpbnQzMigpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWR2YW5jZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBhZHZhbmNl
KCkKKyAgICB7CisgICAgICAgIG1faGlnaCA9IChtX2hpZ2ggPDwgMTYpICsgKG1faGlnaCA+PiAx
Nik7CisgICAgICAgIG1faGlnaCArPSBtX2xvdzsKKyAgICAgICAgbV9sb3cgKz0gbV9oaWdoOwor
ICAgICAgICByZXR1cm4gbV9oaWdoOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQo
dW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7
CisgICAgICAgIG1faGlnaCA9IHNlZWQ7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9sb3c7Cisg
ICAgdW5zaWduZWQgbV9oaWdoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBXZWFrUmFuZG9tX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgJKHdvcmtpbmcgY29weSkKKysrIFNv
dXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTggKzUxLDI5
IEBACiAjZGVmaW5lIFdlYWtSYW5kb21faAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAot
bmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgV2Vha1JhbmRvbSB7Ci1m
cmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7IC8vIEZvciBhY2Nlc3MgdG8gaW5pdGlhbGl6ZVNl
ZWQoKSBkdXJpbmcgcmVwbGF5LgogcHVibGljOgorICAgIFdlYWtSYW5kb20oKQorICAgIHsKKyAg
ICAgICAgaW5pdGlhbGl6ZVNlZWQocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSk7CisgICAgfQorICAgIAogICAgIFdlYWtSYW5kb20o
dW5zaWduZWQgc2VlZCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemVTZWVkKHNlZWQpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVTZWVkKHVuc2lnbmVkIHNlZWQpCisgICAgewor
ICAgICAgICBtX2xvdyA9IHNlZWQgXiAweDQ5NjE2RTQyOworICAgICAgICBtX2hpZ2ggPSBzZWVk
OworICAgIH0KKwogICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUg
bmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdldFVpbnQzMigpLgogICAgIHVuc2lnbmVkIHNlZWRVbnNh
ZmUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2g7IH0KIApAQCAtNzYsNiArODcsMTkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGdldFVp
bnQzMih1bnNpZ25lZCBsaW1pdCkKKyAgICB7CisgICAgICAgIGlmIChsaW1pdCA8PSAxKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHVpbnQ2NF90IGN1dG9mZiA9IChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oVUlOVF9NQVgpICsgMSkgLyBsaW1pdCAqIGxpbWl0OworICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGdldFVpbnQzMigpOworICAgICAg
ICAgICAgaWYgKHZhbHVlID49IGN1dG9mZikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZSAlIGxpbWl0OworICAgICAgICB9CisgICAgfQorCiBwcml2
YXRlOgogICAgIHVuc2lnbmVkIGFkdmFuY2UoKQogICAgIHsKQEAgLTg1LDE2ICsxMDksMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1faGlnaDsKICAgICB9CiAKLSAgICB2b2lkIGluaXRp
YWxpemVTZWVkKHVuc2lnbmVkIHNlZWQpCi0gICAgewotICAgICAgICBtX2xvdyA9IHNlZWQgXiAw
eDQ5NjE2RTQyOwotICAgICAgICBtX2hpZ2ggPSBzZWVkOwotICAgIH0KLQogICAgIHVuc2lnbmVk
IG1fbG93OwogICAgIHVuc2lnbmVkIG1faGlnaDsKIH07CiAKLX0gLy8gbmFtZXNwYWNlIEpTQwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2Vha1JhbmRvbTsKIAogI2VuZGlmIC8v
IFdlYWtSYW5kb21faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261843</attachid>
            <date>2015-09-23 15:12:17 -0700</date>
            <delta_ts>2015-09-24 15:04:05 -0700</delta_ts>
            <desc>sort of passing some tests, I guess</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTAxODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw4IEBACiAJCTBGMzAwQjc4MThBQjA1
MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9y
aWdpbi5oICovOyB9OwogCQkwRjMwMEI3QjE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEYzMDBCN0MxOEFCMUIxNDAwQTZENzJFIC8qIERG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdl
ckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLzsgfTsKKwkJMEYzMkJEMTAxQkIzNEYxOTAwOTNBNTdG
IC8qIEhlYXBIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5j
cHAgKi87IH07CisJCTBGMzJCRDExMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMkJEMEYx
QkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggKi87IH07CiAJCTBGMzRCMTQ5MTZE
NDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ3MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VL
aW5kLmNwcCAqLzsgfTsKIAkJMEYzNEIxNEExNkQ0MjAxMzAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzRCMTQ4
MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi87IH07CiAJCTBGMzhCMDExMTdDRjA3
ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50
RW50cnlwb2ludC5jcHAgKi87IH07CkBAIC03NzUsNyArNzc3LDYgQEAKIAkJMTQxNDQ4Q0IxM0Ex
NzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NDhDQTEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2Vk
QmxvY2tTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDE0NDhDRDEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE0NDhDQzEzQTE3ODM3
MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxNTAxMzMxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtT
ZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDE1MDEzMjE1NEJCMTNGMDA1RDhDOTggLyogV2Vha1NldElubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDIwQkU3QjEwQUE2RERC
MDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQyMEJFN0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDIxMzU5
QjBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjEzNTlBMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2Uu
Y3BwICovOyB9OwogCQkxNDI4MDgyMzEwN0VDMDJDMDAxM0U3QjIgLyogRGVidWdnZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjY5MkE4NTgwMjU1
NTk3RDAxRkY2MEY3IC8qIERlYnVnZ2VyLmNwcCAqLzsgfTsKIAkJMTQyODA4MkQxMDdFQzA1NzAw
MTNFN0IyIC8qIENhbGxEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQTYyREZFMEUyODI2MjMwMDA0RjMwRCAvKiBDYWxsRGF0YS5jcHAgKi87
IH07CkBAIC0xNjY1LDggKzE2NjYsNiBAQAogCQlDMjIzOUQxNzE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLzsgfTsK
IAkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMzE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlDMjIzOUQxOTE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIz
OUQxNDE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQzIyMzlEMUExNjI2MkJERDAw
NUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi87
IH07Ci0JCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTYxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQzIyNTQ5NDMxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjU0OTQyMTVG
N0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi87IH07CiAJCUMyMkIzMUI5MTQwNTc3
RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGlu
Z0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlDMjQwMzA1NTE0QjQwNEU2MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzI0MDMwNTMxNEI0MDRDOTAw
NzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCAqLzsgfTsKQEAgLTIxMTksNiArMjExOCw4IEBACiAJ
CTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVPcmlnaW4uaDsgcGF0aCA9IGRmZy9ERkdOb2Rl
T3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjc5MThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3QTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50
ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjMy
QkQwRTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjMyQkQwRjFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBv
b2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEhlbHBlclBvb2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
VXNlS2luZC5jcHA7IHBhdGggPSBkZmcvREZHVXNlS2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMzRCMTQ4MTZENDIwMEUwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1VzZUtpbmQuaDsgcGF0aCA9IGRmZy9E
RkdVc2VLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDBGMTdDRjA3
N0YwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTExJ
bnRFbnRyeXBvaW50LmNwcDsgcGF0aCA9IGxsaW50L0xMSW50RW50cnlwb2ludC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjE2LDcgKzI2MTcsNiBAQAogCQkxNDE0NDhDQTEz
QTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFya2VkQmxvY2tTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQxNDQ4Q0MxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55Qmxvb21GaWx0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtTZXRJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAv
KiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5k
b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMTM1OUEwQTY3N0Y0RjAwQTgx
OTVFIC8qIEpTQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0Jhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDI3MTEzODBBNDYwQkJC
MDA4MEVFRUEgLyogSlNCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDI5RDc3QjBFRDIwRDczMDBC
ODk2MTkgLyogSW50ZXJwcmV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50ZXJwcmV0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MzcsOCArMzUz
Nyw2IEBACiAJCUMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3B5VmlzaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5
VmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5VmlzaXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjIzOUQxNDE2MjYyQkREMDA1QUM1RkQg
LyogQ29weVZpc2l0b3JJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcHlWaXNpdG9ySW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjIz
OUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR0NUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR0NUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNsb3RWaXNpdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0MDMwNTMxNEI0MDRDOTAwNzlFQjY0IC8qIENvcGllZFNw
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcGllZFNwYWNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0RDMxRTAxNjFDRDY5NTAwMkFB
NERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhlYXBTdGF0aXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQyMTgsMTUgKzQyMTYsNiBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJRkU3QkE2MEQx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgKi8sCi0JCQkJRkU3QkE2MEUxQTFB
N0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oICovLAotCQkJCUMyREE3NzgyMThFMjU5OTkw
MDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oICovLAotCQkJCUZFMzkxMzUxMUI3OTRBQzkwMEVEQUY3
MSAvKiBMaXZlT2JqZWN0RGF0YS5oICovLAotCQkJCUZFMzkxMzUyMUI3OTRBQzkwMEVEQUY3MSAv
KiBMaXZlT2JqZWN0TGlzdC5jcHAgKi8sCi0JCQkJRkUzOTEzNTMxQjc5NEFDOTAwRURBRjcxIC8q
IExpdmVPYmplY3RMaXN0LmggKi8sCi0JCQkJQUREQjFGNjIxOEQ3N0RCNzAwOUI1OEE4IC8qIE9w
YXF1ZVJvb3RTZXQuaCAqLywKLQkJCQkyQUFDRTYzQTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQkyQUFDRTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NB
Y3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENv
ZGVCbG9ja1NldC5jcHAgKi8sCiAJCQkJMEZEOEEzMTIxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVC
bG9ja1NldC5oICovLAogCQkJCTE0NkIxNERCMTJFQjVCMTIwMDFCRUMxQiAvKiBDb25zZXJ2YXRp
dmVSb290cy5jcHAgKi8sCkBAIC00MjQ1LDE1ICs0MjM0LDIxIEBACiAJCQkJMkE2ODI5NUExODc1
RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQkyQTdBNThFRTE4MDhB
NEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8sCiAJCQkJMEYxMzZENEIxNzRBRDY5QjAwNzVC
MzU0IC8qIERlZmVyR0MuaCAqLywKKwkJCQkyQTgzNjM4MzE4RDdEMEVFMDAwMEVCQ0MgLyogRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJMkE4MzYzODQxOEQ3RDBFRTAwMDBFQkND
IC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkyQTgzNjM4NzE4RDdEMEZFMDAw
MEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgKi8sCisJCQkJMkE4MzYzODgxOEQ3
RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCAqLywKKwkJCQkyQUFDRTYz
QTE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKKwkJCQkyQUFD
RTYzQjE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggKi8sCiAJCQkJQkNC
RTJDQUQxNEU5ODVBQTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oICovLAogCQkJCTBGMkI2NkE4
MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZC5oICovLAogCQkJCTBGMkI2
NkE5MTdCNkI1M0QwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZElubGluZXMuaCAqLywK
IAkJCQkwRjJCNjZBQTE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCAqLywKIAkJCQkwRjJCNjZBQjE3QjZCNTNEMDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50
ZWRTZXRJbmxpbmVzLmggKi8sCisJCQkJMkFERkEyNjIxOEVGMzU0MDAwNEY5RkNDIC8qIEdDTG9n
Z2luZy5jcHAgKi8sCisJCQkJMkFBQkNERTYxOEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5o
ICovLAogCQkJCTJBMzQzRjc0MThBMTc0OEIwMDM5QjA4NSAvKiBHQ1NlZ21lbnRlZEFycmF5Lmgg
Ki8sCiAJCQkJMkEzNDNGNzcxOEExNzQ5RDAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXlJbmxp
bmVzLmggKi8sCi0JCQkJQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAq
LywKLQkJCQlDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLywKIAkJCQkx
NDJFMzEyQjEzNEZGMEE2MDBBRkFEQjUgLyogSGFuZGxlLmggKi8sCiAJCQkJQzI4MzE4RkYxNkZF
NEI3RDAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrLmggKi8sCiAJCQkJQzI4MzE5MDExNkZFNTMzRTAw
MTU3QkZEIC8qIEhhbmRsZUJsb2NrSW5saW5lcy5oICovLApAQCAtNDI2NCw2ICs0MjU5LDkgQEAK
IAkJCQkxNDZGQTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAqLywKIAkJCQkx
NEJBN0E5NTEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5jcHAgKi8sCiAJCQkJMTRCQTdBOTYxM0FB
REZGODAwNUI3QzJDIC8qIEhlYXAuaCAqLywKKwkJCQkwRjMyQkQwRTFCQjM0RjE5MDA5M0E1N0Yg
LyogSGVhcEhlbHBlclBvb2wuY3BwICovLAorCQkJCTBGMzJCRDBGMUJCMzRGMTkwMDkzQTU3RiAv
KiBIZWFwSGVscGVyUG9vbC5oICovLAorCQkJCUMyREE3NzgyMThFMjU5OTkwMDY2RkNCNiAvKiBI
ZWFwSW5saW5lcy5oICovLAogCQkJCTJBRDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRl
cmF0aW9uU2NvcGUuaCAqLywKIAkJCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9w
ZXJhdGlvbi5oICovLAogCQkJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZp
c2l0b3IuaCAqLywKQEAgLTQyNzEsMTEgKzQyNjksMTYgQEAKIAkJCQlDMjREMzFFMTE2MUNENjk1
MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJCQlDMkU1MjZCQjE1OTBFRjAwMDA1
NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKIAkJCQlDMkU1MjZCQzE1OTBFRjAwMDA1NEU0OEQg
LyogSGVhcFRpbWVyLmggKi8sCisJCQkJRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBW
ZXJpZmllci5jcHAgKi8sCisJCQkJRkU3QkE2MEUxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJp
Zmllci5oICovLAogCQkJCUMyNUY4QkNCMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3
ZWVwZXIuY3BwICovLAogCQkJCUMyNUY4QkNDMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuaCAqLywKIAkJCQkwRjc2NkQyOTE1QThDQzM0MDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuY3BwICovLAogCQkJCTBGNzY2RDJBMTVBOENDMzQwMDhGMzYzRSAvKiBKSVRTdHVi
Um91dGluZVNldC5oICovLAogCQkJCTBGNDMxNzM2MTQ2QkFDNjUwMDdFMzg5MCAvKiBMaXN0YWJs
ZUhhbmRsZXIuaCAqLywKKwkJCQlGRTM5MTM1MTFCNzk0QUM5MDBFREFGNzEgLyogTGl2ZU9iamVj
dERhdGEuaCAqLywKKwkJCQlGRTM5MTM1MjFCNzk0QUM5MDBFREFGNzEgLyogTGl2ZU9iamVjdExp
c3QuY3BwICovLAorCQkJCUZFMzkxMzUzMUI3OTRBQzkwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlz
dC5oICovLAogCQkJCTE0MkUzMTMwMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbC5oICovLAogCQkJ
CTE0MkUzMTMxMTM0RkYwQTYwMEFGQURCNSAvKiBMb2NhbFNjb3BlLmggKi8sCiAJCQkJMTRCNzIz
M0YxMkQ3RDBEQTAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgKi8sCkBAIC00Mjg5
LDYgKzQyOTIsNyBAQAogCQkJCTE0RDJGM0Q5MTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFj
ZS5oICovLAogCQkJCTE0MkQ2RjBFMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwICov
LAogCQkJCTE0MkQ2RjBGMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCAqLywKKwkJCQlB
RERCMUY2MjE4RDc3REI3MDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oICovLAogCQkJCTJBQUQ5
NjQ5MTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCAqLywKIAkJ
CQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovLAogCQkJCTE0
QkE3OEYwMTNBQUI4OEYwMDVCN0MyQyAvKiBTbG90VmlzaXRvci5oICovLApAQCAtNDMxMywxMiAr
NDMxNyw2IEBACiAJCQkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1
ZmZlci5oICovLAogCQkJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCAqLywKIAkJCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5oICovLAotCQkJCTJBODM2MzgzMThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NB
Y3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQkyQTgzNjM4NDE4RDdEMEVFMDAwMEVCQ0MgLyog
RWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oICovLAotCQkJCTJBODM2Mzg3MThEN0QwRkUwMDAwRUJD
QyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCAqLywKLQkJCQkyQTgzNjM4ODE4RDdEMEZF
MDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oICovLAotCQkJCTJBQUJDREU2MThF
RjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCAqLywKLQkJCQkyQURGQTI2MjE4RUYzNTQwMDA0
RjlGQ0MgLyogR0NMb2dnaW5nLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaGVhcDsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01MDkyLDcgKzUwOTAsNiBAQAogCQkJCUE3Q0EzQUVB
MTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAogCQkJCUE3Q0EzQURGMTdEQTQx
QUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlBN0NBM0FFMDE3REE0
MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovLAotCQkJCTE0MjBCRTdBMTBBQTZE
REIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAwMzlE
MDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJNzA5RkI4NjQxQUUzMzVDNjAw
MzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oICovLAogCQkJCTcwOUZCODY1MUFFMzM1QzYw
MDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCAqLywKQEAgLTYyMDUsNiArNjIwMiw3IEBA
CiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBI
ZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIw
MDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlE
QzgxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTY0MDAs
NyArNjM5OCw2IEBACiAJCQkJMEYyQjY2QUQxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdS
ZWZDb3VudGVkSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2QUUxN0I2QjU0NTAw
QTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKLQkJCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJl
YWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5l
cmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFDMTkyMkEzQkMw
MDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTExN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjkzMCw3ICs2OTI3LDYgQEAKIAkJCQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYg
LyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFQzE3REE1
MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU2
MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxNDIwQkU3QjEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkExMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDE1MDEzMzE1NEJCMTNGMDA1RDhDOTggLyogV2Vha1Nl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzcyMSw3ICs3NzE3LDYgQEAKIAkJCQkxNDdG
MzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2NEIyNzExQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUMyMjM5RDFBMTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RjE0Q0E3RENBMDA4
NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjAzMzJDMzE4
QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyODA4NTUxMDdFQzBFNzAwMTNFN0IyIC8qIEdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTgwNjIsNiArODA1Nyw3IEBACiAJCQkJMEZGNDI3NDAxNThFQkU4QjAwNENCOUZGIC8q
IHVkaXM4Nl9kZWNvZGUuYyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQzMTU4RUJFOTEwMDRD
QjlGRiAvKiB1ZGlzODZfaW5wdXQuYyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzREMTU4RUJG
RTYwMDRDQjlGRiAvKiB1ZGlzODZfaXRhYl9ob2xkZXIuYyBpbiBTb3VyY2VzICovLAorCQkJCTBG
MzJCRDEwMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY0Mjc0NTE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X3N5bi1hdHQuYyBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjQyNzQ2MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWlu
dGVsLmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X3N5bi5jIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkwMTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlICJD
b2RlTG9jYXRpb24uaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNs
dWRlICJPcHRpb25zLmgiCi0jaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9D
cnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVS
KQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuY3BwCShyZXZpc2lv
biAxOTAxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR0NUaHJlYWQuaCIKLQotI2luY2x1ZGUgIkNvcHlWaXNp
dG9yLmgiCi0jaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUdDVGhyZWFkOjpHQ1RocmVhZChIZWFwJiBoZWFw
LCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IHNsb3RWaXNpdG9yKQotICAgIDogbV90aHJl
YWRJRCgwKQotICAgICwgbV9oZWFwKGhlYXApCi0gICAgLCBtX3Nsb3RWaXNpdG9yKFdURjo6bW92
ZShzbG90VmlzaXRvcikpCi17Ci19Ci0KLVRocmVhZElkZW50aWZpZXIgR0NUaHJlYWQ6OnRocmVh
ZElEKCkKLXsKLSAgICBBU1NFUlQobV90aHJlYWRJRCk7Ci0gICAgcmV0dXJuIG1fdGhyZWFkSUQ7
Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6OmluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElEKQotewotICAgIEFTU0VSVCghbV90aHJlYWRJRCk7Ci0gICAgbV90aHJlYWRJRCA9
IHRocmVhZElEOwotfQotCi1TbG90VmlzaXRvciogR0NUaHJlYWQ6OnNsb3RWaXNpdG9yKCkKLXsK
LSAgICBBU1NFUlQobV9zbG90VmlzaXRvcik7Ci0gICAgcmV0dXJuIG1fc2xvdFZpc2l0b3IuZ2V0
KCk7Ci19Ci0KLUdDUGhhc2UgR0NUaHJlYWQ6OndhaXRGb3JOZXh0UGhhc2UoKQotewotICAgIHN0
ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2hlYXAubV9waGFzZU11dGV4KTsKLSAgICBtX2hl
YXAubV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFt
X2hlYXAubV9nY1RocmVhZHNTaG91bGRXYWl0OyB9KTsKLQotICAgIG1faGVhcC5tX251bWJlck9m
QWN0aXZlR0NUaHJlYWRzLS07Ci0gICAgaWYgKCFtX2hlYXAubV9udW1iZXJPZkFjdGl2ZUdDVGhy
ZWFkcykKLSAgICAgICAgbV9oZWFwLm1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlP
bmUoKTsKLQotICAgIG1faGVhcC5tX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBb
dGhpc10geyByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNlICE9IE5vUGhhc2U7IH0pOwotICAg
IG1faGVhcC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKys7Ci0gICAgcmV0dXJuIG1faGVhcC5t
X2N1cnJlbnRQaGFzZTsKLX0KLQotdm9pZCBHQ1RocmVhZDo6Z2NUaHJlYWRNYWluKCkKLXsKLSAg
ICBHQ1BoYXNlIGN1cnJlbnRQaGFzZTsKLSAgICBXVEY6OnJlZ2lzdGVyR0NUaHJlYWQoKTsKLSAg
ICAvLyBXYWl0IGZvciB0aGUgbWFpbiB0aHJlYWQgdG8gZmluaXNoIGNyZWF0aW5nIGFuZCBpbml0
aWFsaXppbmcgdXMuIFRoZSBtYWluIHRocmVhZCBncmFicyB0aGlzIGxvY2sgYmVmb3JlIAotICAg
IC8vIGNyZWF0aW5nIHRoaXMgdGhyZWFkLiBXZSBhcmVuJ3QgZ3VhcmFudGVlZCB0byBoYXZlIGEg
dmFsaWQgdGhyZWFkSUQgdW50aWwgdGhlIG1haW4gdGhyZWFkIHJlbGVhc2VzIHRoaXMgbG9jay4K
LSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1faGVhcC5tX3BoYXNl
TXV0ZXgpOwotICAgIH0KLSAgICB7Ci0gICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgZW5hYmxl
cigqbV9zbG90VmlzaXRvcik7Ci0gICAgICAgIHdoaWxlICgoY3VycmVudFBoYXNlID0gd2FpdEZv
ck5leHRQaGFzZSgpKSAhPSBFeGl0KSB7Ci0gICAgICAgICAgICAvLyBOb3RlOiBFYWNoIHBoYXNl
IGlzIHJlc3BvbnNpYmxlIGZvciBpdHMgb3duIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMuIFRoZSBj
b21tZW50cyBiZWxvdyBkZXNjcmliZSAKLSAgICAgICAgICAgIC8vIGhvdyBlYWNoIHBoYXNlIHJl
YWNoZXMgdGVybWluYXRpb24uCi0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRQaGFzZSkgewot
ICAgICAgICAgICAgY2FzZSBNYXJrOgotICAgICAgICAgICAgICAgIG1fc2xvdFZpc2l0b3ItPmRy
YWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7Ci0gICAgICAgICAgICAgICAg
Ly8gR0NUaHJlYWRzIG9ubHkgcmV0dXJuIGZyb20gZHJhaW5Gcm9tU2hhcmVkKCkgaWYgdGhlIG1h
aW4gdGhyZWFkIHNldHMgdGhlIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCAKLSAgICAgICAg
ICAgICAgICAvLyBmbGFnIGluIHRoZSBHQ1RocmVhZFNoYXJlZERhdGEuIFRoZSBvbmx5IHdheSB0
aGUgbWFpbiB0aHJlYWQgc2V0cyB0aGF0IGZsYWcgaXMgaWYgaXQgcmVhbGl6ZXMgCi0gICAgICAg
ICAgICAgICAgLy8gdGhhdCBhbGwgb2YgdGhlIHZhcmlvdXMgc3VicGhhc2VzIGluIEhlYXA6Om1h
cmtSb290cygpIGhhdmUgYmVlbiBmdWxseSBmaW5pc2hlZCBhbmQgdGhlcmUgaXMgCi0gICAgICAg
ICAgICAgICAgLy8gbm8gbW9yZSBtYXJraW5nIHdvcmsgdG8gZG8gYW5kIGFsbCBvZiB0aGUgR0NU
aHJlYWRzIGFyZSBpZGxlLCBtZWFuaW5nIG5vIG1vcmUgd29yayBjYW4gYmUgZ2VuZXJhdGVkLgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDb3B5OiB7Ci0gICAgICAg
ICAgICAgICAgQ29weVZpc2l0b3IgY29weVZpc2l0b3IobV9oZWFwKTsKLSAgICAgICAgICAgICAg
ICBjb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKLSAgICAgICAgICAgICAgICBjb3B5VmlzaXRv
ci5jb3B5RnJvbVNoYXJlZCgpOwotICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgd2UncmUgZG9u
ZSBjb3B5aW5nIHdoZW4gd2UgcmV0dXJuIGZyb20gY29weUZyb21TaGFyZWQoKSBiZWNhdXNlIHdl
IHdvdWxkIAotICAgICAgICAgICAgICAgIC8vIG9ubHkgZG8gc28gaWYgdGhlcmUgd2VyZSBubyBt
b3JlIGNodW5rcyBvZiBjb3B5aW5nIHdvcmsgbGVmdCB0byBkby4gV2hlbiB0aGVyZSBpcyBubyAK
LSAgICAgICAgICAgICAgICAvLyBtb3JlIGNvcHlpbmcgd29yayB0byBkbywgdGhlIG1haW4gdGhy
ZWFkIHdpbGwgd2FpdCBpbiBDb3BpZWRTcGFjZTo6ZG9uZUNvcHlpbmcoKSB1bnRpbCAKLSAgICAg
ICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGJsb2NrcyB0aGF0IHRoZSBHQ1RocmVhZHMgYm9ycm93
ZWQgaGF2ZSBiZWVuIHJldHVybmVkLiBkb25lQ29weWluZygpIAotICAgICAgICAgICAgICAgIC8v
IHJldHVybnMgb3VyIGJvcnJvd2VkIENvcGllZEJsb2NrLCBhbGxvd2luZyB0aGUgY29weWluZyBw
aGFzZSB0byBmaW5pc2guCi0gICAgICAgICAgICAgICAgY29weVZpc2l0b3IuZG9uZUNvcHlpbmco
KTsKLQotICAgICAgICAgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5Rm9y
VGhpc1RocmVhZCgpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBjYXNlIE5vUGhhc2U6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RXhpdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEdDVGhyZWFkOjpnY1RocmVhZFN0YXJ0RnVuYyh2b2lkKiBkYXRhKQotewotICAgIEdD
VGhyZWFkKiB0aHJlYWQgPSBzdGF0aWNfY2FzdDxHQ1RocmVhZCo+KGRhdGEpOwotICAgIHRocmVh
ZC0+Z2NUaHJlYWRNYWluKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCShyZXZpc2lvbiAxOTAxODUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdDVGhyZWFkX2gKLSNkZWZpbmUgR0NUaHJlYWRf
aAotCi0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgSGVhcDsKLWNsYXNzIFNsb3RWaXNpdG9yOwotCi1l
bnVtIEdDUGhhc2UgewotICAgIE5vUGhhc2UsCi0gICAgTWFyaywKLSAgICBDb3B5LAotICAgIEV4
aXQKLX07Ci0KLWNsYXNzIEdDVGhyZWFkIHsKLXB1YmxpYzoKLSAgICBHQ1RocmVhZChIZWFwJiwg
c3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPik7Ci0KLSAgICBTbG90VmlzaXRvciogc2xvdFZp
c2l0b3IoKTsKLSAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElEKCk7Ci0gICAgdm9pZCBpbml0
aWFsaXplVGhyZWFkSUQoVGhyZWFkSWRlbnRpZmllcik7Ci0KLSAgICBzdGF0aWMgdm9pZCBnY1Ro
cmVhZFN0YXJ0RnVuYyh2b2lkKik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBnY1RocmVhZE1haW4o
KTsKLSAgICBHQ1BoYXNlIHdhaXRGb3JOZXh0UGhhc2UoKTsKLQotICAgIFRocmVhZElkZW50aWZp
ZXIgbV90aHJlYWRJRDsKLSAgICBIZWFwJiBtX2hlYXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3RWaXNpdG9yPiBtX3Nsb3RWaXNpdG9yOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE5MDE4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5LCAyMDExLCAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykg
MjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUg
IkdDQWN0aXZpdHlDYWxsYmFjay5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0
SW5saW5lcy5oIgorI2luY2x1ZGUgIkhlYXBIZWxwZXJQb29sLmgiCiAjaW5jbHVkZSAiSGVhcEl0
ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
SGVhcFN0YXRpc3RpY3MuaCIKQEAgLTMzNiw3ICszMzcsNiBAQCBIZWFwOjpIZWFwKFZNKiB2bSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgLCBtX2RlcHJlY2F0ZWRFeHRyYU1lbW9yeVNpemUoMCkK
ICAgICAsIG1fbWFjaGluZVRocmVhZHModGhpcykKICAgICAsIG1fc2xvdFZpc2l0b3IoKnRoaXMp
Ci0gICAgLCBtX2NvcHlWaXNpdG9yKCp0aGlzKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAg
LCBtX2lzU2FmZVRvQ29sbGVjdChmYWxzZSkKICAgICAsIG1fd3JpdGVCYXJyaWVyQnVmZmVyKDI1
NikKQEAgLTM1NiwyMiArMzU2LDggQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBU
eXBlKQogI2lmIFVTRShDRikKICAgICAsIG1fZGVsYXllZFJlbGVhc2VSZWN1cnNpb25Db3VudCgw
KQogI2VuZGlmCisgICAgLCBtX2hlbHBlckNsaWVudChoZWFwSGVscGVyUG9vbCgpKQogewotICAg
IHsKLSAgICAgICAgLy8gR3JhYiB0aGUgbG9jayBzbyB0aGUgbmV3IEdDIHRocmVhZHMgY2FuIGJl
IHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IHN0YXJ0IHJ1bm5pbmcuCi0gICAgICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKTsgKytpKSB7
Ci0gICAgICAgICAgICBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKys7Ci0gICAgICAgICAgICBH
Q1RocmVhZCogbmV3VGhyZWFkID0gbmV3IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVl
PFNsb3RWaXNpdG9yPigqdGhpcykpOwotICAgICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJRCA9IGNyZWF0ZVRocmVhZChHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMsIG5ld1RocmVh
ZCwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIik7Ci0gICAgICAgICAgICBuZXdUaHJlYWQtPmlu
aXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJRCk7Ci0gICAgICAgICAgICBtX2djVGhyZWFkcy5hcHBl
bmQobmV3VGhyZWFkKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2FpdCBmb3Ig
YWxsIHRoZSBHQ1RocmVhZHMgdG8gZ2V0IHRvIHRoZSByaWdodCBwbGFjZS4KLSAgICAgICAgbV9h
Y3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251
bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9KTsKLSAgICB9Ci0gICAgCiAgICAgbV9zdG9yYWdlU3Bh
Y2UuaW5pdCgpOwogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkpCiAgICAgICAgIG1fdmVy
aWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhpcywgT3B0aW9uczo6bnVt
YmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwpAQCAtMzgxLDIxICszNjcs
NiBAQCBIZWFwOjp+SGVhcCgpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9sb2dp
Y2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveShibG9jayk7
Ci0KLSAgICAvLyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCi0gICAgewotICAgICAgICBz
dGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFya2luZ0xvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgICAg
IEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKLSAgICAgICAgbV9wYXJhbGxlbE1h
cmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0g
ZmFsc2U7Ci0gICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKLSAgICAgICAgbV9waGFzZUNv
bmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgd2FpdEZvclRocmVh
ZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOwotICAgICAgICBkZWxldGUg
bV9nY1RocmVhZHNbaV07Ci0gICAgfQogfQogCiBib29sIEhlYXA6OmlzUGFnZWRPdXQoZG91Ymxl
IGRlYWRsaW5lKQpAQCAtNTcwLDEyICs1NDEsMzQgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91
YmxlIGdjU3RhcnRUaW1lLAogCiAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxs
Q29sbGVjdGlvbikKICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBt
X3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKLSAgICAgICAgc3RhcnROZXh0UGhh
c2UoTWFyayk7Ci0gICAgfQorCisgICAgbV9zaG91bGRIYXNoQ29ucyA9IG1fdm0tPmhhdmVFbm91
Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpOworCisgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rp
b24oCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAgICBTbG90VmlzaXRvciogc2xvdFZp
c2l0b3I7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAgaWYgKG1fYXZhaWxh
YmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbmV3VmlzaXRvciA9CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3RWaXNpdG9yID0gbmV3VmlzaXRvci5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9wYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoV1RGOjptb3ZlKG5ld1Zpc2l0
b3IpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZp
c2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsK
KyAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNs
YXZlRHJhaW4pOworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAgbV9hdmFp
bGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKwogICAgIG1fc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5nKCk7
CisgICAgCiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNpdG9y
KTsKIAogICAgIHsKQEAgLTYwMyw4ICs1OTYsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3Vi
bGUgZ2NTdGFydFRpbWUsCiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IHRy
dWU7CiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwogICAg
IH0KLSAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTWFyayk7Ci0gICAgZW5kQ3VycmVudFBo
YXNlKCk7CisgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgdXBkYXRlT2JqZWN0Q291
bnRzKGdjU3RhcnRUaW1lKTsKICAgICByZXNldFZpc2l0b3JzKCk7CiB9CkBAIC02MzMsMTUgKzYy
NSwxNyBAQCB2b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG1fY29weUluZGV4ID0gMDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
c3RhcnROZXh0UGhhc2UoQ29weSk7Ci0gICAgICAgIAotICAgICAgICBtX2NvcHlWaXNpdG9yLnN0
YXJ0Q29weWluZygpOwotICAgICAgICBtX2NvcHlWaXNpdG9yLmNvcHlGcm9tU2hhcmVkKCk7Ci0g
ICAgICAgIG1fY29weVZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKIAotICAgICAgICBBU1NFUlQobV9j
dXJyZW50UGhhc2UgPT0gQ29weSk7Ci0gICAgICAgIGVuZEN1cnJlbnRQaGFzZSgpOworICAgICAg
ICBtX2hlbHBlckNsaWVudC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBbdGhp
c10gKCkgeworICAgICAgICAgICAgICAgIENvcHlWaXNpdG9yIGNvcHlWaXNpdG9yKCp0aGlzKTsK
KyAgICAgICAgICAgICAgICBjb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKKyAgICAgICAgICAg
ICAgICBjb3B5VmlzaXRvci5jb3B5RnJvbVNoYXJlZCgpOworICAgICAgICAgICAgICAgIGNvcHlW
aXNpdG9yLmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgV1RGOjpyZWxlYXNlRmFzdE1h
bGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICBtX3N0b3JhZ2VTcGFjZS5kb25lQ29weWluZygpOwogICAgIH0KICAgICAKICAgICBtX3N0b3Jh
Z2VTcGFjZS5kb25lQ29weWluZygpOwpAQCAtODcwLDggKzg2NCw4IEBAIHZvaWQgSGVhcDo6cmVz
ZXRWaXNpdG9ycygpCiB7CiAgICAgbV9zbG90VmlzaXRvci5yZXNldCgpOwogCi0gICAgZm9yIChH
Q1RocmVhZCogdGhyZWFkIDogbV9nY1RocmVhZHMpCi0gICAgICAgIHRocmVhZC0+c2xvdFZpc2l0
b3IoKS0+cmVzZXQoKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxs
ZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAogICAg
IEFTU0VSVChtX3NoYXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwogICAgIG1fd2Vha1JlZmVyZW5j
ZUhhcnZlc3RlcnMucmVtb3ZlQWxsKCk7CkBAIC0xNTMyLDQ1ICsxNTI2LDI1IEBAIGJvb2wgSGVh
cDo6c3dlZXBOZXh0TG9naWNhbGx5RW1wdHlXZWFrQmwKIHNpemVfdCBIZWFwOjp0aHJlYWRWaXNp
dENvdW50KCkKIHsgICAgICAgCiAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT52aXNpdENvdW50KCk7Cisg
ICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQor
ICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCgpCiB7ICAg
ICAgIAogICAgIHNpemVfdCByZXN1bHQgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRz
W2ldLT5zbG90VmlzaXRvcigpLT5ieXRlc1Zpc2l0ZWQoKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFs
bGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJlc3VsdCArPSBw
YXJhbGxlbFZpc2l0b3ItPmJ5dGVzVmlzaXRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IHNpemVfdCBIZWFwOjp0aHJlYWRCeXRlc0NvcGllZCgpCiB7ICAgICAgIAogICAgIHNpemVfdCBy
ZXN1bHQgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigp
LT5ieXRlc0NvcGllZCgpOworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlzaXRvci0+Ynl0
ZXNDb3BpZWQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEhlYXA6OnN0YXJ0TmV4
dFBoYXNlKEdDUGhhc2UgcGhhc2UpCi17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2so
bV9waGFzZU11dGV4KTsKLSAgICBBU1NFUlQoIW1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7Ci0gICAg
QVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOwotICAgIG1fZ2NUaHJlYWRzU2hvdWxk
V2FpdCA9IHRydWU7Ci0gICAgbV9jdXJyZW50UGhhc2UgPSBwaGFzZTsKLSAgICBtX3BoYXNlQ29u
ZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci19Ci0KLXZvaWQgSGVhcDo6ZW5kQ3VycmVudFBo
YXNlKCkKLXsKLSAgICBBU1NFUlQobV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBzdGQ6OnVu
aXF1ZV9sb2NrPExvY2s+IGxvY2sobV9waGFzZU11dGV4KTsKLSAgICBtX2N1cnJlbnRQaGFzZSA9
IE5vUGhhc2U7Ci0gICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAgbV9waGFz
ZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIG1fYWN0aXZpdHlDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9udW1iZXJPZkFjdGl2ZUdDVGhy
ZWFkczsgfSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAkocmV2aXNpb24gMTkwMTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiQ29k
ZUJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJHQ0luY29t
aW5nUmVmQ291bnRlZFNldC5oIgotI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSGFu
ZGxlU2V0LmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKICNpbmNsdWRlICJIZWFwT3BlcmF0
aW9uLmgiCkBAIC00Niw2ICs0NSw3IEBACiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3VwcG9ydC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtMzQ3LDggKzM0Nyw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IHRocmVhZER1cFN0
cmluZ3MoKTsKIAogICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3Qm
KTsKLSAgICB2b2lkIHN0YXJ0TmV4dFBoYXNlKEdDUGhhc2UpOwotICAgIHZvaWQgZW5kQ3VycmVu
dFBoYXNlKCk7CiAKICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNp
emVfdCBtX3JhbVNpemU7CkBAIC0zODMsNyArMzgxLDE0IEBAIHByaXZhdGU6CiAgICAgTWFjaGlu
ZVRocmVhZHMgbV9tYWNoaW5lVGhyZWFkczsKICAgICAKICAgICBTbG90VmlzaXRvciBtX3Nsb3RW
aXNpdG9yOwotICAgIENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CisKKyAgICAvLyBXZSBwb29s
IHRoZSBzbG90IHZpc2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdz
IHVzZWZ1bCB0byBiZSBhYmxlIHRvCisgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0
J3MgdXNlZnVsIHRvIGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkg
ZnJvbQorICAgIC8vIG9uZSBHQyB0byB0aGUgbmV4dC4gR0MgbWFya2luZyB0aHJlYWRzIGNsYWlt
IHRoZXNlIGF0IHRoZSBzdGFydCBvZiBtYXJraW5nLCBhbmQgcmV0dXJuCisgICAgLy8gdGhlbSBh
dCB0aGUgZW5kLgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+PiBtX3Bh
cmFsbGVsU2xvdFZpc2l0b3JzOworICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxl
UGFyYWxsZWxTbG90VmlzaXRvcnM7CisgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2Nr
OwogCiAgICAgSGFuZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFuZGxl
U3RhY2s7CkBAIC00MjIsOCArNDI3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zaG91bGRI
YXNoQ29ucyB7IGZhbHNlIH07CiAKLSAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFkczsK
LQogICAgIExvY2sgbV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRp
dGlvblZhcmlhYmxlOwogICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOwpAQCAt
NDM4LDE1ICs0NDEsMTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jb3B5SW5kZXggeyAwIH07
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIAot
ICAgIExvY2sgbV9waGFzZU11dGV4OwotICAgIENvbmRpdGlvbiBtX3BoYXNlQ29uZGl0aW9uVmFy
aWFibGU7Ci0gICAgQ29uZGl0aW9uIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZTsKLSAgICB1
bnNpZ25lZCBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzIHsgMCB9OwotICAgIGJvb2wgbV9nY1Ro
cmVhZHNTaG91bGRXYWl0IHsgZmFsc2UgfTsKLSAgICBHQ1BoYXNlIG1fY3VycmVudFBoYXNlIHsg
Tm9QaGFzZSB9OwotCiAgICAgTGlzdGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+
OjpMaXN0IG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnM7CiAgICAgTGlzdGFibGVIYW5kbGVyPFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CisK
KyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBv
b2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxw
ZXJQb29sLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBIZWxwZXJQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJIZWFwSGVscGVyUG9vbC5oIgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5j
bHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUmVmUHRyPFBhcmFsbGVsSGVs
cGVyUG9vbD4gaGVhcEhlbHBlclBvb2woKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBp
bml0aWFsaXplSGVscGVyUG9vbE9uY2VGbGFnOworICAgIHN0YXRpYyBQYXJhbGxlbEhlbHBlclBv
b2wqIGhlbHBlclBvb2w7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVI
ZWxwZXJQb29sT25jZUZsYWcsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIGhlbHBlclBvb2wg
PSBuZXcgUGFyYWxsZWxIZWxwZXJQb29sKCk7CisgICAgICAgICAgICBoZWxwZXJQb29sLT5lbnN1
cmVUaHJlYWRzKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkpOworICAgICAgICB9KTsKKyAg
ICByZXR1cm4gaGVscGVyUG9vbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEhlYXBIZWxwZXJQb29sX2gKKyNkZWZpbmUgSGVhcEhlbHBl
clBvb2xfaAorCisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gaGVhcEhlbHBlclBvb2woKTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBIZWFwSGVscGVyUG9vbF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9u
IDE5MDE4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJv
b3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNp
bmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC02Nywx
MCArNjYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogICAgIGlmICho
ZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAg
QVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5
IG5vdy4KIAotICAgIG1faGVhcC5tX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1fdm0tPmhhdmVF
bm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpOwogICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX2hl
YXAubV9zaG91bGRIYXNoQ29uczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFw
Lm1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2hlYXAubV9nY1RocmVhZHNbaV0t
PnNsb3RWaXNpdG9yKCktPm1fc2hvdWxkSGFzaENvbnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29u
czsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0JpbmFyeVN3aXRjaC5oCShyZXZpc2lvbiAxOTAxODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4K
IAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvZGVDYWNoZS5oCShyZXZpc2lvbiAxOTAxODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDExIEBACiAj
aW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlZh
cmlhYmxlRW52aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTkwMTg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQAog
I2luY2x1ZGUgIlR5cGVkQXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29y
ZC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAj
aW5jbHVkZSA8d3RmL0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5o
PgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgpAQCAtNjYsNiArNjUsNyBAQAogI2luY2x1ZGUg
PHd0Zi9TdGFja0JvdW5kcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFu
ZG9tLmg+CiAjaW5jbHVkZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TeW1ib2xSZWdpc3RyeS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkocmV2aXNpb24g
MTkwMTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSWFuIEMuIEJ1bGxh
cmQKLSAqIAotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us
IHRvIGFueSBwZXJzb24KLSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQg
YXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCi0gKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBk
ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0Ci0gKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp
dGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKLSAqIGNvcHksIG1vZGlmeSwgbWVy
Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3Bp
ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAq
IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n
Ci0gKiBjb25kaXRpb25zOgotICogCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotICogaW5jbHVkZWQgaW4gYWxsIGNvcGll
cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKiAKLSAqIFRIRSBT
T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKLSAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAotICogV0hFVEhFUiBJTiBBTiBBQ1RJT04g
T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0Yg
T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhF
UiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBXZWFrUmFuZG9tX2gK
LSNkZWZpbmUgV2Vha1JhbmRvbV9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBXZWFrUmFuZG9t
IHsKLWZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFs
aXplU2VlZCgpIGR1cmluZyByZXBsYXkuCi1wdWJsaWM6Ci0gICAgV2Vha1JhbmRvbSh1bnNpZ25l
ZCBzZWVkKQotICAgIHsKLSAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7Ci0gICAgfQotICAg
IAotICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2Fs
bGVkIGdldCgpIG9yIGdldFVpbnQzMigpLgotICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25z
dCB7IHJldHVybiBtX2hpZ2g7IH0KLQotICAgIGRvdWJsZSBnZXQoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkdmFuY2UoKSAvIChVSU5UX01BWCArIDEuMCk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgZ2V0VWludDMyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZHZhbmNlKCk7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIHVuc2lnbmVkIGFkdmFuY2UoKQotICAgIHsKLSAgICAgICAgbV9oaWdo
ID0gKG1faGlnaCA8PCAxNikgKyAobV9oaWdoID4+IDE2KTsKLSAgICAgICAgbV9oaWdoICs9IG1f
bG93OwotICAgICAgICBtX2xvdyArPSBtX2hpZ2g7Ci0gICAgICAgIHJldHVybiBtX2hpZ2g7Ci0g
ICAgfQotCi0gICAgdm9pZCBpbml0aWFsaXplU2VlZCh1bnNpZ25lZCBzZWVkKQotICAgIHsKLSAg
ICAgICAgbV9sb3cgPSBzZWVkIF4gMHg0OTYxNkU0MjsKLSAgICAgICAgbV9oaWdoID0gc2VlZDsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBtX2xvdzsKLSAgICB1bnNpZ25lZCBtX2hpZ2g7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFdlYWtSYW5kb21faApJbmRleDogU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTAxODUpCisr
KyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCw2ICsyNCw3IEBACiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIz
MTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEYyQjY2QTYxN0I2QjRGQjAw
QTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJy
YWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdBRTNGIC8qIEZs
aXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9OworCQkwRjM1MDE2
NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtS
YW5kb20uaCAqLzsgfTsKIAkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRB
NjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkwRjgyNEE2OTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdM
b3QuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODcxMDU5MTY2
NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CkBAIC00OCw2ICs0OSw4IEBACiAJ
CTBGRTQ0NzlDMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIg
LyogV29yZExvY2suY3BwICovOyB9OwogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29y
ZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVENjdCNjFC
MjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJT
ZXQuaCAqLzsgfTsKKwkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVy
UG9vbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZGMTlEQTFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLzsgfTsK
KwkJMEZGRjE5REQxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REIxQkIzMzRF
QjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovOyB9OwogCQkxNDAyMkY0MTE4RjVD
M0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxs
b2MuYSAqLzsgfTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1
RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBE
QjUxNEEgLyogUkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwpAQCAtMzEyLDYgKzMxNSw3IEBACiAJCTBGMkI2
NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEZWZlcnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0
OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAv
KiBXZWFrUmFuZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5k
b20uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUz
NDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY1
MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMzM2LDYgKzM0MCw4IEBACiAJCTBGRTQ0NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JkTG9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAv
KiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUg
LyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRy
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkYxOURBMUJCMzM0RUIwMDg4
NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUGFyYWxsZWxIZWxwZXJQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8q
IGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJibWFsbG9jLmE7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTE0M0Y2MTFEMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXpl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJBTVNpemUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSQU1TaXplLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MTgsNiArODI0LDggQEAKIAkJCQlBOEE0NzJF
MzE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZUJsb2NrLmNwcCAqLywKIAkJCQlBOEE0NzJFNDE1MUE4
MjVCMDA0MTIzRkYgLyogUGFnZUJsb2NrLmggKi8sCiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEy
M0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5oICovLAorCQkJCTBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5
MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovLAorCQkJCTBGRkYxOURCMUJCMzM0RUIwMDg4
NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuaCAqLywKIAkJCQlBOEE0NzJFNjE1MUE4MjVCMDA0
MTIzRkYgLyogUGFyYWxsZWxKb2JzLmggKi8sCiAJCQkJQThBNDcyRTkxNTFBODI1QjAwNDEyM0ZG
IC8qIFBhcmFsbGVsSm9ic0xpYmRpc3BhdGNoLmggKi8sCiAJCQkJMEY4MjRBNjQxQjc0NDNBMDAw
MkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovLApAQCAtODkyLDYgKzkwMCw3IEBACiAJCQkJQThB
NDczNzExNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3RvclRyYWl0cy5oICovLAogCQkJCUE4QTQ3Mzcy
MTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2
RDU0MDQgLyogV2Vha1B0ci5oICovLAorCQkJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBX
ZWFrUmFuZG9tLmggKi8sCiAJCQkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmNwcCAqLywKIAkJCQkwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLywK
IAkJCQlFNEEwQUQzNzFBOTYyNDU1MDA1MzZERjYgLyogV29ya1F1ZXVlLmNwcCAqLywKQEAgLTEw
NjMsNiArMTA3Miw3IEBACiAJCQkJQThBNDczODUxNTFBODI1QjAwNDEyM0ZGIC8qIEFTQ0lJQ1R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDM0MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJ
SUZhc3RQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4NzE1MUE4MjVCMDA0MTIzRkYg
LyogQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzNTAxNjQxQkIyNThENTAwRjBB
MkEzIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzg4MTUxQTgyNUIw
MDQxMjNGRiAvKiBBdG9taWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQzNjE1MUE4MjVC
MDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0REN0ZGODE4
NkQyOTFFMDA3NDMzQ0QgLyogSXRlcmF0b3JBZGFwdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC0x
MDc1LDYgKzEwODUsNyBAQAogCQkJCUE4QTQ3M0E5MTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0t
ZHRvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQUIxNTFBODI1QjAwNDEyM0ZGIC8qIGJp
Z251bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0NERDdGRkExODZEMkE1NDAwNzQzM0NEIC8qIEl0
ZXJhdG9yUmFuZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkYxOUREMUJCMzM0RUIwMDg4NkQ5
MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDUyMTUx
QTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3MzhBMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRtYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3MzhDMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
MTM5Myw2ICsxNDA0LDcgQEAKIAkJCQkyQ0RFRDBGMzE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBFRjE4MTE1QzM4MDA0REJBNzAgLyogUnVu
TG9vcENGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Njk0MTkzMTZFQUFGNkQwMDI0RTE0NiAv
KiBSdW5Mb29wVGltZXJDRi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkZGMTlEQzFCQjMzNEVC
MDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
QTQ3NDIxMTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
QTBBRDM5MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ2OTQxOTkxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFyYWxsZWxIZWxw
ZXJQb29sLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitQYXJhbGxlbEhlbHBlckNsaWVudDo6UGFy
YWxsZWxIZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gcG9vbCkKKyAgICA6
IG1fcG9vbChwb29sKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlpbmcpOworICAgIG1fcG9vbC0+bV9j
bGllbnRzLmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxl
bEhlbHBlckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2sp
OworICAgIGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bv
b2wtPm1fY2xpZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wb29sLT5tX2NsaWVu
dHNbaV0gPT0gdGhpcykgeworICAgICAgICAgICAgbV9wb29sLT5tX2NsaWVudHNbaV0gPSBtX3Bv
b2wtPm1fY2xpZW50cy5sYXN0KCk7CisgICAgICAgICAgICBtX3Bvb2wtPm1fY2xpZW50cy5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNr
PiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV90YXNrKTsKKyAgICBtX3Rhc2sgPSB0YXNrOworICAgIG1fcG9vbC0+
ZGlkTWFrZVdvcmtBdmFpbGFibGUobG9ja2VyKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNs
aWVudDo6ZmluaXNoKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7
CisgICAgZmluaXNoKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRv
U29tZUhlbHBpbmcoKQoreworICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2s7Cisg
ICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAg
IHRhc2sgPSBjbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgaWYgKCF0YXNrKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHJ1blRhc2sodGFzayk7Cit9CisKK3ZvaWQgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRh
c2s+IHRhc2spCit7CisgICAgc2V0VGFzayh0YXNrKTsKKyAgICBkb1NvbWVIZWxwaW5nKCk7Cisg
ICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25z
dCBMb2NrSG9sZGVyJikKK3sKKyAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIHdoaWxlIChtX251
bUFjdGl2ZSkKKyAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1f
cG9vbC0+bV9sb2NrKTsKK30KKworUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gUGFyYWxsZWxI
ZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBpZiAoIW1f
dGFzaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9udW1BY3RpdmUrKzsK
KyAgICByZXR1cm4gbV90YXNrOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5U
YXNrKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9udW1BY3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOworICAgIAorICAgIHRh
c2stPnJ1bigpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1f
bG9jayk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVtQWN0aXZlKTsKKyAgICAgICAgbV90
YXNrID0gbnVsbHB0cjsKKyAgICAgICAgbV9udW1BY3RpdmUtLTsKKyAgICAgICAgaWYgKCFtX251
bUFjdGl2ZSkKKyAgICAgICAgICAgIG1fcG9vbC0+bV93b3JrQ29tcGxldGVDb25kaXRpb24ubm90
aWZ5QWxsKCk7CisgICAgfQorfQorCitQYXJhbGxlbEhlbHBlclBvb2w6OlBhcmFsbGVsSGVscGVy
UG9vbCgpCit7Cit9CisKK1BhcmFsbGVsSGVscGVyUG9vbDo6flBhcmFsbGVsSGVscGVyUG9vbCgp
Cit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jbGllbnRzLmlzRW1wdHkoKSk7CisgICAgCisgICAg
eworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBtX2lzRHlpbmcg
PSB0cnVlOworICAgICAgICBtX3dvcmtBdmFpbGFibGVDb25kaXRpb24ubm90aWZ5QWxsKCk7Cisg
ICAgfQorCisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBtX3Ro
cmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIp
OworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6YWRkVGhyZWFkcyh1bnNpZ25lZCBudW1U
aHJlYWRzKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgbV9udW1UaHJl
YWRzICs9IG51bVRocmVhZHM7CisgICAgaWYgKGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikpCisg
ICAgICAgIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxI
ZWxwZXJQb29sOjplbnN1cmVUaHJlYWRzKHVuc2lnbmVkIG51bVRocmVhZHMpCit7CisgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAobnVtVGhyZWFkcyA8IG1fbnVtVGhyZWFk
cykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbnVtVGhyZWFkcyA9IG51bVRocmVhZHM7CisgICAg
aWYgKGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikpCisgICAgICAgIGRpZE1ha2VXb3JrQXZhaWxh
YmxlKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5n
KCkKK3sKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OworICAgIFJlZlB0cjxQYXJh
bGxlbEhlbHBlclRhc2s+IHRhc2s7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlciht
X2xvY2spOworICAgICAgICBjbGllbnQgPSBnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpOworICAg
ICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFzayA9IGNs
aWVudC0+Y2xhaW1UYXNrKGxvY2tlcik7CisgICAgfQorCisgICAgY2xpZW50LT5ydW5UYXNrKHRh
c2spOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZGlkTWFrZVdvcmtBdmFpbGFibGUo
Y29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgd2hpbGUgKG1fbnVtVGhyZWFkcyA+IG1fdGhyZWFk
cy5zaXplKCkpIHsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyID0g
Y3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgIlBhcmFsbGVsIEhlbHBlciBUaHJlYWQiLAorICAg
ICAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBoZWxwZXJUaHJlYWRCb2R5KCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV90aHJlYWRzLmFwcGVuZCh0aHJlYWRJZGVudGlm
aWVyKTsKKyAgICB9CisgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOwor
fQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6aGVscGVyVGhyZWFkQm9keSgpCit7CisgICAg
Zm9yICg7OykgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OworICAgICAg
ICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrOworCisgICAgICAgIHsKKyAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBjbGllbnQgPSB3YWl0
Rm9yQ2xpZW50V2l0aFRhc2sobG9ja2VyKTsKKyAgICAgICAgICAgIGlmICghY2xpZW50KSB7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pc0R5aW5nKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRhc2sgPSBjbGllbnQtPmNs
YWltVGFzayhsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50LT5ydW5UYXNrKHRh
c2spOworICAgIH0KK30KKworYm9vbCBQYXJhbGxlbEhlbHBlclBvb2w6Omhhc0NsaWVudFdpdGhU
YXNrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICByZXR1cm4gISFnZXRDbGllbnRX
aXRoVGFzayhsb2NrZXIpOworfQorCitQYXJhbGxlbEhlbHBlckNsaWVudCogUGFyYWxsZWxIZWxw
ZXJQb29sOjpnZXRDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICAvLyBX
ZSBsb2FkLWJhbGFuY2UgYnkgYmVpbmcgcmFuZG9tLgorICAgIHVuc2lnbmVkIHN0YXJ0SW5kZXgg
PSBtX3JhbmRvbS5nZXRVaW50MzIobV9jbGllbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IHN0YXJ0SW5kZXg7IGluZGV4IDwgbV9jbGllbnRzLnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50ID0gbV9jbGllbnRzW2luZGV4
XTsKKyAgICAgICAgaWYgKGNsaWVudC0+bV90YXNrKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVu
dDsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgc3RhcnRJbmRl
eDsgKytpbmRleCkgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50ID0gbV9j
bGllbnRzW2luZGV4XTsKKyAgICAgICAgaWYgKGNsaWVudC0+bV90YXNrKQorICAgICAgICAgICAg
cmV0dXJuIGNsaWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFyYWxs
ZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbDo6d2FpdEZvckNsaWVudFdpdGhUYXNr
KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8v
IEl0IG1pZ2h0IGJlIHF1aXR0aW4nIHRpbWUuCisgICAgICAgIGlmIChtX2lzRHlpbmcpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoUGFyYWxsZWxIZWxwZXJDbGll
bnQqIHJlc3VsdCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworCisgICAgICAgIC8vIFdhaXQgdW50aWwgd29yayBiZWNvbWVzIGF2YWlsYWJs
ZS4KKyAgICAgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLndhaXQobV9sb2NrKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBl
clBvb2wuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9v
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFyYWxsZWxIZWxwZXJQb29sX2gK
KyNkZWZpbmUgUGFyYWxsZWxIZWxwZXJQb29sX2gKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIFBhcmFsbGVsSGVscGVyUG9vbCBpcyBhIHNoYXJl
ZCBwb29sIG9mIHRocmVhZHMgdGhhdCBjYW4gYmUgYXNrZWQgdG8gaGVscCB3aXRoIHNvbWUgZmlu
aXRlLXRpbWUKKy8vIHBhcmFsbGVsIGFjdGl2aXR5LiBJdCdzIGRlc2lnbmVkIHRvIHdvcmsgd2Vs
bCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25jdXJyZW50IHRhc2tzIHRoYXQgbWF5CisvLyBh
bGwgd2FudCBwYXJhbGxlbCBoZWxwLiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgZWFjaCB0
YXNrIHRvIHN0YXJ0IGl0cyBvd24gdGhyZWFkIHBvb2wuIEl0J3MKKy8vIGFsc28gZGVzaWduZWQg
dG8gd29yayB3ZWxsIGZvciB0YXNrcyB0aGF0IGRvIHRoZWlyIG93biBsb2FkIGJhbGFuY2luZyBh
bmQgZG8gbm90IHdpc2ggdG8KKy8vIHBhcnRpY2lwYXRlIGluIG1pY3JvdGFzay1zdHlsZSBsb2Fk
IGJhbGFuY2luZy4KKy8vCisvLyBBIHBvb2wgY2FuIGhhdmUgbWFueSBjbGllbnRzLCBhbmQgZWFj
aCBjbGllbnQgbWF5IGhhdmUgemVybyBvciBvbmUgdGFza3MuIFRoZSBwb29sIHdpbGwgaGF2ZSB1
cAorLy8gdG8gc29tZSBudW1iZXIgb2YgdGhyZWFkcywgY29uZmlndXJhYmxlIHdpdGggUGFyYWxs
ZWxIZWxwZXJQb29sOjphZGRUaHJlYWRzKCk7IHVzdWFsbHkgeW91IGJvdW5kCisvLyB0aGlzIGJ5
IHRoZSBudW1iZXIgb2YgQ1BVcy4gV2hlbmV2ZXIgYSB0aHJlYWQgaXMgaWRsZSBhbmQgaXQgbm90
aWNlcyB0aGF0IHNvbWUgY2xpZW50IGhhcyBhCisvLyB0YXNrLCBpdCB3aWxsIHJ1biB0aGUgdGFz
ay4gQSB0YXNrIG1heSBiZSBydW4gb24gYW55d2hlcmUgYmV0d2VlbiB6ZXJvIGFuZCBOIHRocmVh
ZHMsIHdoZXJlIE4gaXMKKy8vIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUgcG9vbC4gVGFz
a3MgcnVuIHRvIGNvbXBsZXRpb24uIEl0J3MgZXhwZWN0ZWQgdGhhdCBhIHRhc2sgd2lsbCBoYXZl
CisvLyBpdHMgb3duIGN1c3RvbSBpZGVhcyBhYm91dCBob3cgdG8gcGFydGljaXBhdGUgaW4gc29t
ZSBwYXJhbGxlbCBhY3Rpdml0eSdzIGxvYWQgYmFsYW5jaW5nLCBhbmQgaXQKKy8vIHdpbGwgcmV0
dXJuIHdoZW4gdGhlIHBhcmFsbGVsIGFjdGl2aXR5IGlzIGRvbmUuIEZvciBleGFtcGxlLCBhIHBh
cmFsbGVsIG1hcmtpbmcgdGFzayB3aWxsIHJldHVybgorLy8gd2hlbiB0aGUgbWFyayBwaGFzZSBp
cyBkb25lLgorLy8KKy8vIFRocmVhZHMgbWF5IGhhdmUgYSBjaG9pY2UgYmV0d2VlbiBtYW55IHRh
c2tzLCBzaW5jZSB0aGVyZSBtYXkgYmUgbWFueSBjbGllbnRzIGFuZCBlYWNoIGNsaWVudAorLy8g
bWF5IGhhdmUgYSB0YXNrLiBGb3IgdGhlIG1hcmtpbmcgZXhhbXBsZSwgdGhhdCBtYXkgaGFwcGVu
IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBWTSBpbnN0YW5jZXMgYW5kCisvLyBlYWNoIGluc3RhbmNl
IGRlY2lkZXMgdG8gc3RhcnQgcGFyYWxsZWwgbWFya2luZyBhdCB0aGUgc2FtZSB0aW1lLiBJbiB0
aGF0IGNhc2UsIHRocmVhZHMgY2hvb3NlCisvLyBhIHRhc2sgYXQgcmFuZG9tLiBTbyBsb25nIGFz
IGFueSBjbGllbnQgaGFzIGEgdGFzaywgYWxsIHRocmVhZHMgaW4gdGhlIHBvb2wgd2lsbCBjb250
aW51ZQorLy8gcnVubmluZyB0aGUgYXZhaWxhYmxlIHRhc2tzLiBUaHJlYWRzIGdvIGlkbGUgd2hl
biBubyBjbGllbnQgaGFzIHRhc2tzIHRvIHJ1bi4KKworLy8gQSB0YXNrIGVuY2Fwc3VsYXRlcyBv
bmUgdGhyZWFkJ3Mgd29ydGggb2YgYWN0aXZpdHkgaW4gc29tZSBwYXJhbGxlbCBhbGdvcml0aG0u
IFRoZSBwb29sIHdpbGwKKy8vIHJ1biB0aGlzIHRhc2sgb24gcG90ZW50aWFsbHkgbWFueSB0aHJl
YWRzLiBUaGUgcG9vbCBtYXkgbm90IHJ1biB0aGUgdGFzayBvbiBhbnkgdGhyZWFkcywgb2YgYWxs
CisvLyB0aHJlYWRzIGFyZSBidXN5IHJ1bm5pbmcgb3RoZXIgdGFza3MuIFRhc2tzIG1heSBqb2lu
IGluIGF0IGFueSB0aW1lLgorLy8KKy8vIFRhc2tzIHNob3VsZCBjb21wbGV0ZSBpbiBmaW5pdGUg
dGltZS4gUGFyYWxsZWxIZWxwZXJQb29sIGFuZCBmcmllbmRzIGFyZSBtZWFudCB0byBiZSB1c2Vk
IGZvcgorLy8gcGFyYWxsZWwgYWxnb3JpdGhtcyB0aGF0IHJ1biB0byBjb21wbGV0aW9uLiBBIGdv
b2QgZXhhbXBsZSBpcyBzb21ldGhpbmcgbGlrZSBwYXJhbGxlbCBtYXJraW5nLAorLy8gd2hpY2gg
Y2FuIGJlIGxvbmctcnVubmluZyBidXQgYWx3YXlzIHRlcm1pbmF0ZXMuCitjbGFzcyBQYXJhbGxl
bEhlbHBlclRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGFyYWxsZWxIZWxwZXJU
YXNrPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxIZWxwZXJUYXNrKCkgeyB9CisgICAgdmlydHVh
bCB+UGFyYWxsZWxIZWxwZXJUYXNrKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAw
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFBhcmFsbGVsSGVscGVy
VGFza0Z1bmN0b3IgOiBwdWJsaWMgUGFyYWxsZWxIZWxwZXJUYXNrIHsKK3B1YmxpYzoKKyAgICBQ
YXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgICAg
IDogbV9mdW5jdG9yKGZ1bmN0b3IpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Z1bmN0b3IoKTsKKyAgICB9CisKKyAg
ICBGdW5jdG9yIG1fZnVuY3RvcjsKK307CisKKy8vIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoK
Ky8vCisvLyBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrID0gY3JlYXRlUGFyYWxsZWxI
ZWxwZXJUYXNrKAorLy8gICAgIFs9XSAoKSB7CisvLyAgICAgICAgIGRvIHRoaW5nczsKKy8vICAg
ICB9KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitSZWZQdHI8UGFyYWxsZWxIZWxwZXJU
YXNrPiBjcmVhdGVQYXJhbGxlbEhlbHBlclRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yPEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKK30KKworY2xhc3MgUGFyYWxsZWxIZWxwZXJQb29sOworCisvLyBBIGNs
aWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIHBhcmFsbGVsIGFsZ29yaXRobS4gQSBwYXJhbGxl
bCBhbGdvcml0aG0gd2lsbCBoYXZlIGEgdGFzayB0aGF0CisvLyBjYW4gYmUgcnVuIGNvbmN1cnJl
bnRseS4gV2hlbmV2ZXIgYSBjbGllbnQgaGFzIGEgdGFzayBzZXQgKHlvdSBoYXZlIGNhbGxlZCBz
ZXRUYXNrKCkgb3IKKy8vIHNldEZ1bmN0aW9uKCkpLCB0aHJlYWRzIGluIHRoZSBwb29sIG1heSBy
dW4gdGhhdCB0YXNrLiBJZiBhIHRhc2sgcmV0dXJucyBvbiBhbnkgdGhyZWFkLCB0aGUKKy8vIGNs
aWVudCB3aWxsIGFzc3VtZSB0aGF0IHRoZSB0YXNrIGlzIGRvbmUgYW5kIHdpbGwgY2xlYXIgdGhl
IHRhc2suIElmIHRoZSB0YXNrIGlzIGNsZWFyZWQgKHRoZQorLy8gdGFzayBydW5zIHRvIGNvbXBs
ZXRpb24gb24gYW55IHRocmVhZCBvciB5b3UgY2FsbCBmaW5pc2goKSksIGFueSB0aHJlYWRzIGlu
IHRoZSBwb29sIGFscmVhZHkKKy8vIHJ1bm5pbmcgdGhlIGxhc3Qgc2V0IHRhc2socykgd2lsbCBj
b250aW51ZSB0byBydW4gdGhlbS4gWW91IGNhbiB3YWl0IGZvciBhbGwgb2YgdGhlbSB0byBmaW5p
c2gKKy8vIGJ5IGNhbGxpbmcgZmluaXNoKCkuIFRoYXQgbWV0aG9kIHdpbGwgY2xlYXIgdGhlIHRh
c2sgYW5kIHdhaXQgZm9yIGFueSB0aHJlYWRzIHJ1bm5pbmcgdGhlIGxhc3QKKy8vIHNldCB0YXNr
IHRvIGZpbmlzaC4gVGhlcmUgYXJlIHR3byBrbm93bi1nb29kIHBhdHRlcm5zIGZvciB1c2luZyBh
IGNsaWVudDoKKy8vCisvLyAxKSBUYXNrcyBpbnRyaW5zaWNhbGx5IGtub3cgd2hlbiB0aGUgYWxn
b3JpdGhtIHJlYWNoZXMgdGVybWluYXRpb24sIGFuZCBzaW1wbHkgcmV0dXJucyB3aGVuCisvLyAg
ICB0aGlzIGhhcHBlbnMuIFRoZSBtYWluIHRocmVhZCBydW5zIHRoZSB0YXNrIGJ5IGRvaW5nOgor
Ly8KKy8vICAgIGNsaWVudC0+c2V0RnVuY3Rpb24oCisvLyAgICAgICAgWz1dICgpIHsKKy8vICAg
ICAgICAgICAgZG8gdGhpbmdzOworLy8gICAgICAgIH0pOworLy8gICAgY2xpZW50LT5kb1NvbWVI
ZWxwaW5nKCk7CisvLyAgICBjbGllbnQtPmZpbmlzaCgpOworLy8KKy8vICAgIENhbGxpbmcgZG9T
b21lSGVscGluZygpIGVuc3VyZXMgdGhhdCB0aGUgYWxnb3JpdGhtIHJ1bnMgb24gYXQgbGVhc3Qg
b25lIHRocmVhZCAodGhpcyBvbmUpLgorLy8gICAgVGFza3Mgd2lsbCBrbm93IHdoZW4gdG8gY29t
cGxldGUsIGFuZCB3aWxsIHJldHVybiB3aGVuIHRoZXkgYXJlIGRvbmUuIFRoaXMgd2lsbCBjbGVh
ciB0aGUKKy8vICAgIHRhc2sgdG8gZW5zdXJlIHRoYXQgbm8gbmV3IHRocmVhZHMgd2lsbCBydW4g
dGhlIHRhc2suIFRoZW4sIGZpbmlzaCgpIGNsZWFycyB0aGUgY3VycmVudCB0YXNrCisvLyAgICBh
bmQgd2FpdHMgZm9yIGFueSBwYXJhbGxlbCB0YXNrcyB0byBmaW5pc2ggYWZ0ZXIgdGhlIG1haW4g
dGhyZWFkIGhhcyBmaW5pc2hlZC4gSXQncyBwb3NzaWJsZQorLy8gICAgZm9yIHRocmVhZHMgdG8g
c3RpbGwgYmUgcnVubmluZyB0aGUgbGFzdCBzZXQgdGFzayAoaS5lLiB0aGUgb25lIHNldCBieSBz
ZXRGdW5jdGlvbigpKSBldmVuCisvLyAgICBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBjbGVhcmVk
LiBXYWl0aW5nIGZvciBpZGxlIGVuc3VyZXMgdGhhdCBubyBvbGQgdGFza3MgYXJlIHJ1bm5pbmcK
Ky8vICAgIGFueW1vcmUuCisvLworLy8gICAgWW91IGNhbiBkbyB0aGlzIG1vcmUgZWFzaWx5IGJ5
IHVzaW5nIHRoZSBydW5GdW5jdGlvbkluUGFyYWxsZWwoKSBoZWxwZXI6CisvLworLy8gICAgY2xp
ZW50cy0+cnVuRnVuY3Rpb25JblBhcmFsbGVsKAorLy8gICAgICAgIFs9XSAoKSB7CisvLyAgICAg
ICAgICAgIGRvIHRoaW5nczsKKy8vICAgICAgICB9KTsKKy8vCisvLyAyKSBUYXNrcyBrZWVwIGRv
aW5nIHRoaW5ncyB1bnRpbCB0aGV5IGFyZSB0b2xkIHRvIHF1aXQgdXNpbmcgc29tZSBjdXN0b20g
bm90aWZpY2F0aW9uIG1lY2hhbmlzbS4KKy8vICAgIFRoZSBtYWluIHRocmVhZCBydW5zIHRoZSB0
YXNrIGJ5IGRvaW5nOgorLy8KKy8vICAgIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKKy8vICAgIGNs
aWVudC0+c2V0RnVuY3Rpb24oCisvLyAgICAgICAgWz1dICgpIHsKKy8vICAgICAgICAgICAgd2hp
bGUgKGtlZXBHb2luZykgeworLy8gICAgICAgICAgICAgICAgZG8gdGhpbmdzOworLy8gICAgICAg
ICAgICB9CisvLyAgICAgICAgfSk7CisvLworLy8gICAgV2hlbiB3b3JrIHJ1bnMgb3V0LCB0aGUg
bWFpbiB0aHJlYWQgd2lsbCBpbmZvcm0gdGFza3MgdGhhdCB0aGVyZSBpcyBubyBtb3JlIHdvcmss
IGFuZCB0aGVuCisvLyAgICB3YWl0IHVudGlsIG5vIG1vcmUgdGFza3MgYXJlIHJ1bm5pbmc6Cisv
LworLy8gICAga2VlcEdvaW5nID0gZmFsc2U7CisvLyAgICBjbGllbnQtPmZpbmlzaCgpOworLy8K
Ky8vICAgIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGFjdHVh
bGx5IHdhbnQgdG8gcnVuIHRoZSB0YXNrIHRoYXQgaXQgc2V0IGluIHRoZQorLy8gICAgY2xpZW50
LiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgaW4gcGFyYWxsZWwgbWFya2luZy4gVGhlIG1haW4g
dGhyZWFkIHVzZXMgYSBzb21ld2hhdAorLy8gICAgZGlmZmVyZW50IG1hcmtpbmcgYWxnb3JpdGht
IHRoYW4gdGhlIGhlbHBlcnMuIFRoZSBtYWluIHRocmVhZCBtYXkgcHJvdmlkZSB3b3JrIHRoYXQg
dGhlCisvLyAgICBoZWxwZXJzIHN0ZWFsLiBUaGUgbWFpbiB0aHJlYWQga25vd3Mgd2hlbiB0ZXJt
aW5hdGlvbiBpcyByZWFjaGVkLCBhbmQgc2ltcGx5IHRlbGxzIHRoZQorLy8gICAgaGVscGVycyB0
byBzdG9wIHVwb24gdGVybWluYXRpb24uCisvLworLy8gVGhlIGtub3duLWdvb2Qgc3R5bGVzIG9m
IHVzaW5nIFBhcmFsbGVsSGVscGVyQ2xpZW50IGFsbCBpbnZvbHZlIGEgcGFyYWxsZWwgYWxnb3Jp
dGhtIHRoYXQgaGFzCisvLyBpdHMgb3duIHdvcmsgZGlzdHJpYnV0aW9uIGFuZCBsb2FkIGJhbGFu
Y2luZy4KK2NsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQYXJhbGxlbEhlbHBlckNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KFJlZlB0cjxQYXJhbGxlbEhlbHBlclBvb2w+
KTsKKyAgICB+UGFyYWxsZWxIZWxwZXJDbGllbnQoKTsKKworICAgIHZvaWQgc2V0VGFzayhSZWZQ
dHI8UGFyYWxsZWxIZWxwZXJUYXNrPik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgc2V0RnVuY3Rpb24oY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIHNldFRhc2soY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKGZ1bmN0b3IpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHZvaWQgZG9Tb21lSGVscGluZygpOwor
CisgICAgLy8gRXF1aXZhbGVudCB0bzoKKyAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7Cisg
ICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsK
KyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+KTsK
KworICAgIC8vIEVxdWl2YWxlbnQgdG86CisgICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5j
dG9yKTsKKyAgICAvLyBjbGllbnQtPmRvU29tZUhlbHBpbmcoKTsKKyAgICAvLyBjbGllbnQtPmZp
bmlzaCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBydW5GdW5j
dGlvbkluUGFyYWxsZWwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJ1
blRhc2tJblBhcmFsbGVsKGNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzayhmdW5jdG9yKSk7CisgICAg
fQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEhlbHBlclBvb2w7CisKKyAg
ICB2b2lkIGZpbmlzaChjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUmVmUHRyPFBhcmFsbGVsSGVs
cGVyVGFzaz4gY2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHJ1blRhc2so
UmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4pOworICAgIAorICAgIFJlZlB0cjxQYXJhbGxlbEhl
bHBlclBvb2w+IG1fcG9vbDsKKyAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiBtX3Rhc2s7
CisgICAgdW5zaWduZWQgbV9udW1BY3RpdmUgeyAwIH07Cit9OworCitjbGFzcyBQYXJhbGxlbEhl
bHBlclBvb2wgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGFyYWxsZWxIZWxwZXJQb29s
PiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxIZWxwZXJQb29sKCk7CisgICAgflBhcmFsbGVsSGVs
cGVyUG9vbCgpOworCisgICAgdm9pZCBhZGRUaHJlYWRzKHVuc2lnbmVkIG51bVRocmVhZHMpOwor
ICAgIHZvaWQgZW5zdXJlVGhyZWFkcyh1bnNpZ25lZCBudW1UaHJlYWRzKTsKKyAgICAKKyAgICB2
b2lkIGRvU29tZUhlbHBpbmcoKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ7CisKKyAgICB2b2lkIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGNvbnN0IExv
Y2tIb2xkZXImKTsKKyAgICB2b2lkIGhlbHBlclRocmVhZEJvZHkoKTsKKworICAgIGJvb2wgaGFz
Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIFBhcmFsbGVsSGVscGVyQ2xp
ZW50KiBnZXRDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUGFyYWxsZWxI
ZWxwZXJDbGllbnQqIHdhaXRGb3JDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJik7Cisg
ICAgCisgICAgTG9jayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fd29ya0F2YWlsYWJsZUNvbmRp
dGlvbjsKKyAgICBDb25kaXRpb24gbV93b3JrQ29tcGxldGVDb25kaXRpb247CisKKyAgICBXZWFr
UmFuZG9tIG1fcmFuZG9tOworICAgIAorICAgIFZlY3RvcjxQYXJhbGxlbEhlbHBlckNsaWVudCo+
IG1fY2xpZW50czsKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV90aHJlYWRzOworICAg
IHVuc2lnbmVkIG1fbnVtVGhyZWFkcyB7IDAgfTsKKyAgICBib29sIG1faXNEeWluZyB7IGZhbHNl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpjcmVhdGVQYXJhbGxl
bEhlbHBlclRhc2s7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OwordXNpbmcgV1RG
OjpQYXJhbGxlbEhlbHBlclBvb2w7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyVGFzazsKK3Vz
aW5nIFdURjo6UGFyYWxsZWxIZWxwZXJUYXNrRnVuY3RvcjsKKworI2VuZGlmIC8vIFBhcmFsbGVs
SGVscGVyUG9vbF9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgJKHJldmlzaW9uIDE5MDE1MSkJKGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oOjE5MDE1MSkKKysr
IFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKgorICog
Q29weXJpZ2h0IChjKSAyMDA5IElhbiBDLiBCdWxsYXJkCisgKiAKKyAqIFBlcm1pc3Npb24gaXMg
aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgKiBvYnRhaW5p
bmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgor
ICogZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91
dAorICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0
cyB0byB1c2UsCisgKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz
dWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g
ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworICogY29uZGl0aW9uczoKKyAqIAorICog
VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh
bGwgYmUKKyAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg
b2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwg
SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUworICogT0YgTUVSQ0hB
TlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklO
RlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisg
KiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJ
TElUWSwKKyAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS
V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg
U09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJF
LgorICovCisKKyNpZm5kZWYgV2Vha1JhbmRvbV9oCisjZGVmaW5lIFdlYWtSYW5kb21faAorCisj
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgV2Vha1JhbmRvbSB7CitmcmllbmQgY2xhc3MgSlNHbG9iYWxP
YmplY3Q7IC8vIEZvciBhY2Nlc3MgdG8gaW5pdGlhbGl6ZVNlZWQoKSBkdXJpbmcgcmVwbGF5Lgor
cHVibGljOgorICAgIFdlYWtSYW5kb20odW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIGlu
aXRpYWxpemVTZWVkKHNlZWQpOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRoZSBzZWVk
IHByb3ZpZGVkIHRoYXQgeW91J3ZlIG5ldmVyIGNhbGxlZCBnZXQoKSBvciBnZXRVaW50MzIoKS4K
KyAgICB1bnNpZ25lZCBzZWVkVW5zYWZlKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9CisKKyAg
ICBkb3VibGUgZ2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZHZhbmNlKCkgLyAoVUlOVF9N
QVggKyAxLjApOworICAgIH0KKworICAgIHVuc2lnbmVkIGdldFVpbnQzMigpCisgICAgeworICAg
ICAgICByZXR1cm4gYWR2YW5jZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBh
ZHZhbmNlKCkKKyAgICB7CisgICAgICAgIG1faGlnaCA9IChtX2hpZ2ggPDwgMTYpICsgKG1faGln
aCA+PiAxNik7CisgICAgICAgIG1faGlnaCArPSBtX2xvdzsKKyAgICAgICAgbV9sb3cgKz0gbV9o
aWdoOworICAgICAgICByZXR1cm4gbV9oaWdoOworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6
ZVNlZWQodW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2
MTZFNDI7CisgICAgICAgIG1faGlnaCA9IHNlZWQ7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9s
b3c7CisgICAgdW5zaWduZWQgbV9oaWdoOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBXZWFrUmFuZG9tX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9XZWFrUmFuZG9tLmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTgg
KzUxLDI5IEBACiAjZGVmaW5lIFdlYWtSYW5kb21faAogCiAjaW5jbHVkZSA8bGltaXRzLmg+Cisj
aW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAotbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgV2Vha1JhbmRv
bSB7Ci1mcmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7IC8vIEZvciBhY2Nlc3MgdG8gaW5pdGlh
bGl6ZVNlZWQoKSBkdXJpbmcgcmVwbGF5LgogcHVibGljOgorICAgIFdlYWtSYW5kb20oKQorICAg
IHsKKyAgICAgICAgaW5pdGlhbGl6ZVNlZWQocmFuZG9tTnVtYmVyKCkgKiAoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpICsgMS4wKSk7CisgICAgfQorICAgIAogICAgIFdlYWtS
YW5kb20odW5zaWduZWQgc2VlZCkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemVTZWVkKHNlZWQp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVTZWVkKHVuc2lnbmVkIHNlZWQpCisg
ICAgeworICAgICAgICBtX2xvdyA9IHNlZWQgXiAweDQ5NjE2RTQyOworICAgICAgICBtX2hpZ2gg
PSBzZWVkOworICAgIH0KKwogICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5
b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdldFVpbnQzMigpLgogICAgIHVuc2lnbmVkIHNl
ZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2g7IH0KIApAQCAtNzYsNiArODcsMTkgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgIH0KIAorICAgIHVuc2lnbmVk
IGdldFVpbnQzMih1bnNpZ25lZCBsaW1pdCkKKyAgICB7CisgICAgICAgIGlmIChsaW1pdCA8PSAx
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHVpbnQ2NF90IGN1dG9mZiA9IChzdGF0
aWNfY2FzdDx1aW50NjRfdD4oVUlOVF9NQVgpICsgMSkgLyBsaW1pdCAqIGxpbWl0OworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSA9IGdldFVpbnQzMigpOwor
ICAgICAgICAgICAgaWYgKHZhbHVlID49IGN1dG9mZikKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAlIGxpbWl0OworICAgICAgICB9CisgICAgfQor
CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIGFkdmFuY2UoKQogICAgIHsKQEAgLTg1LDE2ICsxMDks
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1faGlnaDsKICAgICB9CiAKLSAgICB2b2lk
IGluaXRpYWxpemVTZWVkKHVuc2lnbmVkIHNlZWQpCi0gICAgewotICAgICAgICBtX2xvdyA9IHNl
ZWQgXiAweDQ5NjE2RTQyOwotICAgICAgICBtX2hpZ2ggPSBzZWVkOwotICAgIH0KLQogICAgIHVu
c2lnbmVkIG1fbG93OwogICAgIHVuc2lnbmVkIG1faGlnaDsKIH07CiAKLX0gLy8gbmFtZXNwYWNl
IEpTQworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2Vha1JhbmRvbTsKIAogI2Vu
ZGlmIC8vIFdlYWtSYW5kb21faAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261897</attachid>
            <date>2015-09-24 15:04:05 -0700</date>
            <delta_ts>2015-09-24 18:00:20 -0700</delta_ts>
            <desc>maybe the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80119</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEdDIHRvIHVzZSBhIG5ldyBXVEYg
YWJzdHJhY3Rpb24gZm9yIHBhcmFsbGVsaXNtIGNhbGxlZCBQYXJhbGxlbEhlbHBlclBvb2wuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBHQ1RocmVhZCBhbmQgYWxsIG9mIHRoZSBH
Q1BoYXNlIG1hY2hpbmVyeS4gVGhpcyBraWxscyBhIGxvdCBvZgorICAgICAgICBjb2RlIGFuZCBh
bHNvIGdpdmVzIG91ciBHQyBtYWdpY2FsIHRocmVhZCBzaGFyaW5nIHBvd2Vycy4gSWYgdHdvIEdD
cyBpbiB0d28gZGlmZmVyZW50IFZNcworICAgICAgICBmaXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRo
ZW4gdGhleSB3aWxsIGJvdGggZ2V0IGEgcmFuZG9tIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHNo
YXJlZCBHQworICAgICAgICB0aHJlYWRzLiBJZiBvbmUgR0MgaGFwcGVucyBiZWZvcmUgdGhlIG90
aGVyLCB0aGVuIGl0IHdpbGwgcHJvYmFibHkgZ2V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlCisgICAg
ICAgIHRocmVhZHMuIElmIGEgR0MgaGFwcGVucyB3aGlsZSBhbm90aGVyIFZNIGFscmVhZHkgc3Rh
cnRlZCBHQ2luZywgdGhlbiBpdCB3aWxsIHByb2JhYmx5IG5vdAorICAgICAgICBnZXQgYW55IGhl
bHBlciB0aHJlYWRzLiBUaGlzIGlzIHByb2JhYmx5IGZpbmUsIHNpbmNlIGluIG11bHRpLVZNIHNj
ZW5hcmlvcyB3ZSBoYXZlIG5vCisgICAgICAgIHJlYXNvbiB0byBvcHRpbWl6ZSBmb3IgYW55dGhp
bmcgb3RoZXIgdGhhbiB0b3RhbCB0aHJvdWdocHV0LgorCisgICAgICAgIFRoZSBHQyBoYXMgb25l
IHN0YXRpYyBoZWxwZXIgcG9vbC4gVGhpcyBwb29sIGlzIGF2YWlsYWJsZSB2aWEgSlNDOjpoZWFw
SGVscGVyUG9vbCgpLiBJdAorICAgICAgICB3b3VsZCBiZSBPSyBmb3Igb3RoZXIgcGFydHMgb2Yg
SlNDIHRvIHVzZSBpdCBpbiB0aGUgZnV0dXJlIGZvciBwYXJhbGxlbCB0YXNrcy4gRWFjaCBIZWFw
CisgICAgICAgIGluc3RhbmNlIGhhcyBhIGhlbHBlciBjbGllbnQgYXR0YWNoZWQgdG8gdGhlIHBv
b2wuCisKKyAgICAgICAgVGhlIG1hcmtpbmcgcGhhc2UgdGVsbHMgdGhlIFBhcmFsbGVsSGVscGVy
Q2xpZW50IHRvIGFzeW5jaHJvbm91c2x5IHJ1biBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgam9p
bnMgcGFyYWxsZWwgbWFya2luZyBhbmQgZmluaXNoZXMgb25jZSBtYXJraW5nIHJlYWNoZXMgdGVy
bWluYXRpb24uIEl0IHVzZXMgdGhlCisgICAgICAgIGNsaWVudC5zZXRGdW5jdGlvbigpIGlkaW9t
IHdoZXJlIHRoZSB0aHJlYWRzIHNoYXJlIHdvcmsgd2l0aCBlYWNoIG90aGVyIHVzaW5nIGEgc3Bl
Y2lhbGl6ZWQKKyAgICAgICAgd29ya2xpc3QuIFRoZSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgbm90
IGludm9sdmVkIGluIGRlY2lkaW5nIHdoZW4gdGhyZWFkcyBzaG91bGQgdGVybWluYXRlLgorCisg
ICAgICAgIFRoZSBjb3B5aW5nIHBoYXNlIHRlbGxzIHRoZSBQYXJhbGxlbEhlbHBlckNsaWVudCB0
byBydW4gYSBjb3B5aW5nIGZ1bmN0aW9uIGluIHBhcmFsbGVsLiBJdAorICAgICAgICB1c2VzIHRo
ZSBjbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKCkgaWRpb20uIFRoZSBjb3B5aW5nIGZ1bmN0
aW9uIGdldHMgd29yayBmcm9tIHRoZQorICAgICAgICBtX2Jsb2Nrc1RvQ29weSB3b3JrbGlzdCBp
bnNpZGUgSGVhcC4KKworICAgICAgICBUaGlzIHNob3VsZG4ndCBhZmZlY3QgcGVyZm9ybWFuY2Ug
b24gYmVuY2htYXJrcywgYnV0IGl0IHdpbGwgc3VyZSBoZWxwIGFwcHMgd2l0aCBhIGxvdCBvZgor
ICAgICAgICBWTSBpbnN0YW5jZXMuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgICogaGVhcC9HQ1RocmVhZC5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogaGVhcC9HQ1RocmVhZC5oOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkhlYXA6OkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjp+SGVhcCk6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmlzUGFnZWRPdXQpOgorICAgICAgICAoSlNDOjpIZWFwOjptYXJr
Um9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb3B5QmFja2luZ1N0b3Jlcyk6CisgICAgICAg
IChKU0M6OkhlYXA6OnJlc2V0VmlzaXRvcnMpOgorICAgICAgICAoSlNDOjpIZWFwOjp0aHJlYWRW
aXNpdENvdW50KToKKyAgICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkQnl0ZXNWaXNpdGVkKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkQnl0ZXNDb3BpZWQpOgorICAgICAgICAoSlNDOjpIZWFw
OjpzdGFydE5leHRQaGFzZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhlYXA6OmVuZEN1cnJl
bnRQaGFzZSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVh
cC9IZWFwSGVscGVyUG9vbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpoZWFwSGVscGVyUG9v
bCk6CisgICAgICAgICogaGVhcC9IZWFwSGVscGVyUG9vbC5oOiBBZGRlZC4KKyAgICAgICAgKiBo
ZWFwL01hcmtTdGFjay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja0FycmF5OjpzdGVhbFNv
bWVDZWxsc0Zyb20pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAo
SlNDOjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJl
ZCk6CisgICAgICAgICogaml0L0JpbmFyeVN3aXRjaC5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29k
ZUNhY2hlLmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAqIHJ1bnRpbWUvV2Vh
a1JhbmRvbS5oOiBSZW1vdmVkLgorCiAyMDE1LTA5LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNwZWNpYWwgY2FzZSBjb2RlIGZvciB0aGUgbm8t
cGFyYWxsZWwtR0MgY2FzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDggQEAK
IAkJMEYzMDBCNzgxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjc3MThBQjA1MTEwMEE2
RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi87IH07CiAJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcy
RSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3OTE4QUIxQjE0MDBBNkQ3MkUgLyog
REZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjMwMEI3QzE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdBMThBQjFCMTQwMEE2
RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9OworCQkwRjMyQkQx
MDFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMkJEMEUxQkIzNEYxOTAwOTNBNTdGIC8q
IEhlYXBIZWxwZXJQb29sLmNwcCAqLzsgfTsKKwkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8q
IEhlYXBIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjMyQkQwRjFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuaCAqLzsg
fTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAw
MUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsK
IAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdG
MDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKQEAgLTc3NSw3ICs3NzcsNiBA
QAogCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0OENBMTNBMTc2RUMw
MEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxv
b21GaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDE1MDEzMzE1NEJCMTNG
MDA1RDhDOTggLyogV2Vha1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0SW5s
aW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIg
LyogV2Vha1JhbmRvbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMTM1OUEwQTY3N0Y0RjAw
QTgxOTVFIC8qIEpTQmFzZS5jcHAgKi87IH07CiAJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAv
KiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNjkyQTg1ODAyNTU1OTdEMDFGRjYwRjcgLyogRGVidWdnZXIuY3BwICovOyB9OwogCQkx
NDI4MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8q
IENhbGxEYXRhLmNwcCAqLzsgfTsKQEAgLTE2NjUsOCArMTY2Niw2IEBACiAJCUMyMjM5RDE3MTYy
NjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuY3BwICovOyB9OwogCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5
RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAv
KiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlD
MjIzOUQxQTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8q
IEdDVGhyZWFkLmNwcCAqLzsgfTsKLQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhy
ZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIz
OUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyog
U2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsgfTsK
IAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAw
NzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRT
cGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
MjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9OwpAQCAtMjEx
OSw2ICsyMTE4LDggQEAKIAkJMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmln
aW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZU9yaWdpbi5oOyBw
YXRoID0gZGZnL0RGR05vZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ludGVnZXJDaGVj
a0NvbWJpbmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdBMThBQjFCMTQw
MEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwSGVscGVyUG9vbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzJCRDBGMUJCMzRGMTkwMDkzQTU3
RiAvKiBIZWFwSGVscGVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwSGVscGVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2
RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8q
IERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2lu
ZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRFbnRy
eXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MTYsNyArMjYxNyw2
IEBACiAJCTE0MTQ0OENBMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja1NldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29t
RmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlCbG9vbUZpbHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE1MDEzMjE1NEJCMTNGMDA1RDhD
OTggLyogV2Vha1NldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vha1NldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQyMEJFN0Ex
MEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDIx
MzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MjcxMTM4MEE0NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MjlENzdCMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzUzNyw4ICszNTM3LDYgQEAKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENv
cHlWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlW
aXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvcHlWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE0
MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjQwMzA1MzE0QjQwNEM5MDA3
OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29waWVkU3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjRE
MzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFN0YXRpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDI1MSw4ICs0MjQ5LDYgQEAKIAkJCQkyQUFCQ0RFNjE4RUYyOTQy
MDAwMDIwOTYgLyogR0NMb2dnaW5nLmggKi8sCiAJCQkJMkEzNDNGNzQxOEExNzQ4QjAwMzlCMDg1
IC8qIEdDU2VnbWVudGVkQXJyYXkuaCAqLywKIAkJCQkyQTM0M0Y3NzE4QTE3NDlEMDAzOUIwODUg
LyogR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCAqLywKLQkJCQlDMjIzOUQxNTE2MjYyQkREMDA1
QUM1RkQgLyogR0NUaHJlYWQuY3BwICovLAotCQkJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAv
KiBHQ1RocmVhZC5oICovLAogCQkJCTE0MkUzMTJCMTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGUu
aCAqLywKIAkJCQlDMjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2suaCAqLywK
IAkJCQlDMjgzMTkwMTE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVzLmggKi8s
CkBAIC00MjYzLDYgKzQyNTksOCBAQAogCQkJCTE0NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBI
YW5kbGVUeXBlcy5oICovLAogCQkJCTE0QkE3QTk1MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNw
cCAqLywKIAkJCQkxNEJBN0E5NjEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5oICovLAorCQkJCTBG
MzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEYz
MkJEMEYxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggKi8sCiAJCQkJQzJEQTc3
ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8sCiAJCQkJMkFEODkzMjkxN0Uz
ODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovLAogCQkJCTJBNkY0NjI1MTdF
OTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8sCkBAIC01MDkyLDcgKzUwOTAsNiBA
QAogCQkJCUE3Q0EzQUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAogCQkJ
CUE3Q0EzQURGMTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmNwcCAqLywKIAkJ
CQlBN0NBM0FFMDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovLAotCQkJ
CTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJNzA5RkI4
NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJNzA5
RkI4NjQxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oICovLAogCQkJCTcw
OUZCODY1MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCAqLywKQEAgLTYx
NTUsNiArNjE1Miw3IEBACiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFs
aXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERG
R0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJC
QyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzJCRDExMUJCMzRGMTkw
MDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02OTMxLDcgKzY5MjksNiBAQAogCQkJCUE3Q0EzQUU0MTdEQTQxQUUwMDY1
MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUVD
MTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdD
QTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZl
c3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdl
YWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODZBMUFFMzM1QzYwMDM5RDA2OSAvKiBX
ZWFrU2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA2Miw2ICs4MDU5LDcgQEAK
IAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGNDI3NDMxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5jIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEQxNThFQkZFNjAwNENCOUZGIC8qIHVkaXM4Nl9pdGFi
X2hvbGRlci5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMkJEMTAxQkIzNEYxOTAwOTNBNTdGIC8q
IEhlYXBIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ1MTU4RUJFOTEw
MDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDYx
NThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwuYyBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmMgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRl
ICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVt
YmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtS
YW5kb20uaD4KIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJH
Q1RocmVhZC5oIgotCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJDb3B5Vmlz
aXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotR0NUaHJlYWQ6OkdDVGhyZWFkKEhlYXAmIGhlYXAsIHN0ZDo6dW5pcXVlX3B0cjxTbG90Vmlz
aXRvcj4gc2xvdFZpc2l0b3IpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX2hlYXAoaGVh
cCkKLSAgICAsIG1fc2xvdFZpc2l0b3IoV1RGOjptb3ZlKHNsb3RWaXNpdG9yKSkKLXsKLX0KLQot
VGhyZWFkSWRlbnRpZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQotewotICAgIEFTU0VSVChtX3Ro
cmVhZElEKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKLX0KLQotdm9pZCBHQ1RocmVhZDo6aW5p
dGlhbGl6ZVRocmVhZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgQVNTRVJU
KCFtX3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Ci19Ci0KLVNsb3RWaXNp
dG9yKiBHQ1RocmVhZDo6c2xvdFZpc2l0b3IoKQotewotICAgIEFTU0VSVChtX3Nsb3RWaXNpdG9y
KTsKLSAgICByZXR1cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKLX0KLQotR0NQaGFzZSBHQ1RocmVh
ZDo6d2FpdEZvck5leHRQaGFzZSgpCi17Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2Nr
KG1faGVhcC5tX3BoYXNlTXV0ZXgpOwotICAgIG1faGVhcC5tX3BoYXNlQ29uZGl0aW9uVmFyaWFi
bGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1faGVhcC5tX2djVGhyZWFkc1Nob3VsZFdh
aXQ7IH0pOwotCi0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMtLTsKLSAgICBp
ZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQotICAgICAgICBtX2hlYXAubV9h
Y3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotCi0gICAgbV9oZWFwLm1fcGhh
c2VDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX2hlYXAubV9j
dXJyZW50UGhhc2UgIT0gTm9QaGFzZTsgfSk7Ci0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVH
Q1RocmVhZHMrKzsKLSAgICByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNlOwotfQotCi12b2lk
IEdDVGhyZWFkOjpnY1RocmVhZE1haW4oKQotewotICAgIEdDUGhhc2UgY3VycmVudFBoYXNlOwot
ICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIC8vIFdhaXQgZm9yIHRoZSBtYWluIHRo
cmVhZCB0byBmaW5pc2ggY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyB1cy4gVGhlIG1haW4gdGhy
ZWFkIGdyYWJzIHRoaXMgbG9jayBiZWZvcmUgCi0gICAgLy8gY3JlYXRpbmcgdGhpcyB0aHJlYWQu
IFdlIGFyZW4ndCBndWFyYW50ZWVkIHRvIGhhdmUgYSB2YWxpZCB0aHJlYWRJRCB1bnRpbCB0aGUg
bWFpbiB0aHJlYWQgcmVsZWFzZXMgdGhpcyBsb2NrLgotICAgIHsKLSAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fcGhhc2VNdXRleCk7Ci0gICAgfQotICAgIHsKLSAg
ICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX3Nsb3RWaXNpdG9yKTsKLSAgICAg
ICAgd2hpbGUgKChjdXJyZW50UGhhc2UgPSB3YWl0Rm9yTmV4dFBoYXNlKCkpICE9IEV4aXQpIHsK
LSAgICAgICAgICAgIC8vIE5vdGU6IEVhY2ggcGhhc2UgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBv
d24gdGVybWluYXRpb24gY29uZGl0aW9ucy4gVGhlIGNvbW1lbnRzIGJlbG93IGRlc2NyaWJlIAot
ICAgICAgICAgICAgLy8gaG93IGVhY2ggcGhhc2UgcmVhY2hlcyB0ZXJtaW5hdGlvbi4KLSAgICAg
ICAgICAgIHN3aXRjaCAoY3VycmVudFBoYXNlKSB7Ci0gICAgICAgICAgICBjYXNlIE1hcms6Ci0g
ICAgICAgICAgICAgICAgbV9zbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9y
OjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICAvLyBHQ1RocmVhZHMgb25seSByZXR1cm4g
ZnJvbSBkcmFpbkZyb21TaGFyZWQoKSBpZiB0aGUgbWFpbiB0aHJlYWQgc2V0cyB0aGUgbV9wYXJh
bGxlbE1hcmtlcnNTaG91bGRFeGl0IAotICAgICAgICAgICAgICAgIC8vIGZsYWcgaW4gdGhlIEdD
VGhyZWFkU2hhcmVkRGF0YS4gVGhlIG9ubHkgd2F5IHRoZSBtYWluIHRocmVhZCBzZXRzIHRoYXQg
ZmxhZyBpcyBpZiBpdCByZWFsaXplcyAKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFsbCBvZiB0
aGUgdmFyaW91cyBzdWJwaGFzZXMgaW4gSGVhcDo6bWFya1Jvb3RzKCkgaGF2ZSBiZWVuIGZ1bGx5
IGZpbmlzaGVkIGFuZCB0aGVyZSBpcyAKLSAgICAgICAgICAgICAgICAvLyBubyBtb3JlIG1hcmtp
bmcgd29yayB0byBkbyBhbmQgYWxsIG9mIHRoZSBHQ1RocmVhZHMgYXJlIGlkbGUsIG1lYW5pbmcg
bm8gbW9yZSB3b3JrIGNhbiBiZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIENvcHk6IHsKLSAgICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5
VmlzaXRvcihtX2hlYXApOwotICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9yLnN0YXJ0Q29weWlu
ZygpOwotICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9yLmNvcHlGcm9tU2hhcmVkKCk7Ci0gICAg
ICAgICAgICAgICAgLy8gV2Uga25vdyB3ZSdyZSBkb25lIGNvcHlpbmcgd2hlbiB3ZSByZXR1cm4g
ZnJvbSBjb3B5RnJvbVNoYXJlZCgpIGJlY2F1c2Ugd2Ugd291bGQgCi0gICAgICAgICAgICAgICAg
Ly8gb25seSBkbyBzbyBpZiB0aGVyZSB3ZXJlIG5vIG1vcmUgY2h1bmtzIG9mIGNvcHlpbmcgd29y
ayBsZWZ0IHRvIGRvLiBXaGVuIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIG1vcmUg
Y29weWluZyB3b3JrIHRvIGRvLCB0aGUgbWFpbiB0aHJlYWQgd2lsbCB3YWl0IGluIENvcGllZFNw
YWNlOjpkb25lQ29weWluZygpIHVudGlsIAotICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUg
YmxvY2tzIHRoYXQgdGhlIEdDVGhyZWFkcyBib3Jyb3dlZCBoYXZlIGJlZW4gcmV0dXJuZWQuIGRv
bmVDb3B5aW5nKCkgCi0gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvdXIgYm9ycm93ZWQgQ29w
aWVkQmxvY2ssIGFsbG93aW5nIHRoZSBjb3B5aW5nIHBoYXNlIHRvIGZpbmlzaC4KLSAgICAgICAg
ICAgICAgICBjb3B5VmlzaXRvci5kb25lQ29weWluZygpOwotCi0gICAgICAgICAgICAgICAgV1RG
OjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7Ci0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgTm9QaGFzZToK
LSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFeGl0OgotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFk
U3RhcnRGdW5jKHZvaWQqIGRhdGEpCi17Ci0gICAgR0NUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19j
YXN0PEdDVGhyZWFkKj4oZGF0YSk7Ci0gICAgdGhyZWFkLT5nY1RocmVhZE1haW4oKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1Ro
cmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFk
LmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhy
ZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgR0NUaHJlYWRfaAotI2RlZmluZSBHQ1RocmVhZF9oCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUu
aD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLWVudW0gR0NQaGFzZSB7Ci0gICAgTm9QaGFz
ZSwKLSAgICBNYXJrLAotICAgIENvcHksCi0gICAgRXhpdAotfTsKLQotY2xhc3MgR0NUaHJlYWQg
ewotcHVibGljOgotICAgIEdDVGhyZWFkKEhlYXAmLCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0
b3I+KTsKLQotICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOwotICAgIFRocmVhZElkZW50
aWZpZXIgdGhyZWFkSUQoKTsKLSAgICB2b2lkIGluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVu
dGlmaWVyKTsKLQotICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqKTsKLQot
cHJpdmF0ZToKLSAgICB2b2lkIGdjVGhyZWFkTWFpbigpOwotICAgIEdDUGhhc2Ugd2FpdEZvck5l
eHRQaGFzZSgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIEhlYXAm
IG1faGVhcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fc2xvdFZpc2l0b3I7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdl
YmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGdWxs
R0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAj
aW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVh
cEhlbHBlclBvb2wuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRl
ICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMzM2
LDcgKzMzNyw2IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAs
IG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0
aGlzKQogICAgICwgbV9zbG90VmlzaXRvcigqdGhpcykKLSAgICAsIG1fY29weVZpc2l0b3IoKnRo
aXMpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNl
KQogICAgICwgbV93cml0ZUJhcnJpZXJCdWZmZXIoMjU2KQpAQCAtMzU2LDIyICszNTYsOCBAQCBI
ZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwg
bV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKKyAgICAsIG1faGVscGVy
Q2xpZW50KCZoZWFwSGVscGVyUG9vbCgpKQogewotICAgIHsKLSAgICAgICAgLy8gR3JhYiB0aGUg
bG9jayBzbyB0aGUgbmV3IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJl
Zm9yZSB0aGV5IHN0YXJ0IHJ1bm5pbmcuCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4g
bG9jayhtX3BoYXNlTXV0ZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKTsgKytpKSB7Ci0gICAgICAgICAgICBtX251bWJlck9m
QWN0aXZlR0NUaHJlYWRzKys7Ci0gICAgICAgICAgICBHQ1RocmVhZCogbmV3VGhyZWFkID0gbmV3
IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpOwot
ICAgICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChHQ1Ro
cmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMsIG5ld1RocmVhZCwgIkphdmFTY3JpcHRDb3JlOjpNYXJr
aW5nIik7Ci0gICAgICAgICAgICBuZXdUaHJlYWQtPmluaXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJ
RCk7Ci0gICAgICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHRoZSBHQ1RocmVhZHMgdG8gZ2V0
IHRvIHRoZSByaWdodCBwbGFjZS4KLSAgICAgICAgbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxl
LndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9
KTsKLSAgICB9Ci0gICAgCiAgICAgbV9zdG9yYWdlU3BhY2UuaW5pdCgpOwogICAgIGlmIChPcHRp
b25zOjp2ZXJpZnlIZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PEhlYXBWZXJpZmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9y
VmVyaWZpY2F0aW9uKCkpOwpAQCAtMzgxLDIxICszNjcsNiBAQCBIZWFwOjp+SGVhcCgpCiB7CiAg
ICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9sb2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAg
ICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveShibG9jayk7Ci0KLSAgICAvLyBEZXN0cm95IG91ciBt
YXJraW5nIHRocmVhZHMuCi0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFy
a2luZ0xvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
cGhhc2VMb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9
PSBOb1BoYXNlKTsKLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsK
LSAgICAgICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAgICAgIG1fY3VycmVu
dFBoYXNlID0gRXhpdDsKLSAgICAgICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFs
bCgpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNb
aV0tPnRocmVhZElEKCkpOwotICAgICAgICBkZWxldGUgbV9nY1RocmVhZHNbaV07Ci0gICAgfQog
fQogCiBib29sIEhlYXA6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQpAQCAtNTcwLDEyICs1
NDEsMzcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLAogCiAgICAg
aWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgbV9v
cGFxdWVSb290cy5jbGVhcigpOwotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4
aXQgPSBmYWxzZTsKLSAgICAgICAgc3RhcnROZXh0UGhhc2UoTWFyayk7Ci0gICAgfQorCisgICAg
bV9zaG91bGRIYXNoQ29ucyA9IG1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygp
OworCisgICAgbV9oZWxwZXJDbGllbnQuc2V0RnVuY3Rpb24oCisgICAgICAgIFt0aGlzXSAoKSB7
CisgICAgICAgICAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3I7CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9j
ayk7CisgICAgICAgICAgICAgICAgaWYgKG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG90Vmlz
aXRvcj4gbmV3VmlzaXRvciA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5p
cXVlPFNsb3RWaXNpdG9yPigqdGhpcyk7CisgICAgICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9y
ID0gbmV3VmlzaXRvci5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJhbGxlbFNsb3RW
aXNpdG9ycy5hcHBlbmQoV1RGOjptb3ZlKG5ld1Zpc2l0b3IpKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBtX2F2YWlsYWJsZVBhcmFs
bGVsU2xvdFZpc2l0b3JzLnRha2VMYXN0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIHBhcmFsbGVsTW9kZUVuYWJs
ZXIoKnNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZGlkU3RhcnRN
YXJraW5nKCk7CisgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChT
bG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JM
b2NrKTsKKyAgICAgICAgICAgICAgICBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmFw
cGVuZChzbG90VmlzaXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCiAgICAgbV9z
bG90VmlzaXRvci5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAKICAgICBIZWFwUm9vdFZpc2l0b3Ig
aGVhcFJvb3RWaXNpdG9yKG1fc2xvdFZpc2l0b3IpOwogCiAgICAgewpAQCAtNjAzLDggKzU5OSw3
IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwKICAgICAgICAgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKICAgICAgICAgbV9tYXJraW5nQ29uZGl0
aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7CiAgICAgfQotICAgIEFTU0VSVChtX2N1cnJlbnRQaGFz
ZSA9PSBNYXJrKTsKLSAgICBlbmRDdXJyZW50UGhhc2UoKTsKKyAgICBtX2hlbHBlckNsaWVudC5m
aW5pc2goKTsKICAgICB1cGRhdGVPYmplY3RDb3VudHMoZ2NTdGFydFRpbWUpOwogICAgIHJlc2V0
VmlzaXRvcnMoKTsKIH0KQEAgLTYzMywxNSArNjI4LDE1IEBAIHZvaWQgSGVhcDo6Y29weUJhY2tp
bmdTdG9yZXMoKQogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV9jb3B5SW5kZXggPSAwOwog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzdGFydE5leHRQaGFzZShDb3B5KTsKLSAgICAg
ICAgCi0gICAgICAgIG1fY29weVZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7Ci0gICAgICAgIG1fY29w
eVZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKLSAgICAgICAgbV9jb3B5VmlzaXRvci5kb25lQ29w
eWluZygpOwogCi0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBDb3B5KTsKLSAgICAg
ICAgZW5kQ3VycmVudFBoYXNlKCk7CisgICAgICAgIG1faGVscGVyQ2xpZW50LnJ1bkZ1bmN0aW9u
SW5QYXJhbGxlbCgKKyAgICAgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAgICAgICAgQ29w
eVZpc2l0b3IgY29weVZpc2l0b3IoKnRoaXMpOworICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9y
LnN0YXJ0Q29weWluZygpOworICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9yLmNvcHlGcm9tU2hh
cmVkKCk7CisgICAgICAgICAgICAgICAgY29weVZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKKyAgICAg
ICAgICAgICAgICBXVEY6OnJlbGVhc2VGYXN0TWFsbG9jRnJlZU1lbW9yeUZvclRoaXNUaHJlYWQo
KTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICAKICAgICBtX3N0b3JhZ2VTcGFjZS5kb25l
Q29weWluZygpOwpAQCAtODcwLDggKzg2NSw4IEBAIHZvaWQgSGVhcDo6cmVzZXRWaXNpdG9ycygp
CiB7CiAgICAgbV9zbG90VmlzaXRvci5yZXNldCgpOwogCi0gICAgZm9yIChHQ1RocmVhZCogdGhy
ZWFkIDogbV9nY1RocmVhZHMpCi0gICAgICAgIHRocmVhZC0+c2xvdFZpc2l0b3IoKS0+cmVzZXQo
KTsKKyAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRv
cnMpCisgICAgICAgIHBhcmFsbGVsVmlzaXRvci0+cmVzZXQoKTsKIAogICAgIEFTU0VSVChtX3No
YXJlZE1hcmtTdGFjay5pc0VtcHR5KCkpOwogICAgIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcnMu
cmVtb3ZlQWxsKCk7CkBAIC0xNTMyLDQ1ICsxNTI3LDI1IEBAIGJvb2wgSGVhcDo6c3dlZXBOZXh0
TG9naWNhbGx5RW1wdHlXZWFrQmwKIHNpemVfdCBIZWFwOjp0aHJlYWRWaXNpdENvdW50KCkKIHsg
ICAgICAgCiAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1f
Z2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT52aXNpdENvdW50KCk7CisgICAgZm9yIChhdXRv
JiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICByZXN1
bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT52aXNpdENvdW50KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCgpCiB7ICAgICAgIAogICAgIHNp
emVfdCByZXN1bHQgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFk
cy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90Vmlz
aXRvcigpLT5ieXRlc1Zpc2l0ZWQoKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6
IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJlc3VsdCArPSBwYXJhbGxlbFZpc2l0
b3ItPmJ5dGVzVmlzaXRlZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHNpemVfdCBIZWFw
Ojp0aHJlYWRCeXRlc0NvcGllZCgpCiB7ICAgICAgIAogICAgIHNpemVfdCByZXN1bHQgPSAwOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVzdWx0ICs9IG1fZ2NUaHJlYWRzW2ldLT5zbG90VmlzaXRvcigpLT5ieXRlc0NvcGll
ZCgpOworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNp
dG9ycykKKyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlzaXRvci0+Ynl0ZXNDb3BpZWQoKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEhlYXA6OnN0YXJ0TmV4dFBoYXNlKEdDUGhh
c2UgcGhhc2UpCi17Ci0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9waGFzZU11dGV4
KTsKLSAgICBBU1NFUlQoIW1fZ2NUaHJlYWRzU2hvdWxkV2FpdCk7Ci0gICAgQVNTRVJUKG1fY3Vy
cmVudFBoYXNlID09IE5vUGhhc2UpOwotICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9IHRydWU7
Ci0gICAgbV9jdXJyZW50UGhhc2UgPSBwaGFzZTsKLSAgICBtX3BoYXNlQ29uZGl0aW9uVmFyaWFi
bGUubm90aWZ5QWxsKCk7Ci19Ci0KLXZvaWQgSGVhcDo6ZW5kQ3VycmVudFBoYXNlKCkKLXsKLSAg
ICBBU1NFUlQobV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPExv
Y2s+IGxvY2sobV9waGFzZU11dGV4KTsKLSAgICBtX2N1cnJlbnRQaGFzZSA9IE5vUGhhc2U7Ci0g
ICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAgbV9waGFzZUNvbmRpdGlvblZh
cmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZS53YWl0
KGxvY2ssIFt0aGlzXSB7IHJldHVybiAhbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkczsgfSk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
cmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0Lmgi
CiAjaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRl
ZFNldC5oIgotI2luY2x1ZGUgIkdDVGhyZWFkLmgiCiAjaW5jbHVkZSAiSGFuZGxlU2V0LmgiCiAj
aW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKICNpbmNsdWRlICJIZWFwT3BlcmF0aW9uLmgiCkBAIC00
Niw2ICs0NSw3IEBACiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyU3VwcG9ydC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoQ291bnRlZFNldC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzQ3
LDggKzM0Nyw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IHRocmVhZER1cFN0cmluZ3MoKTsKIAog
ICAgIHZvaWQgZ2V0TmV4dEJsb2Nrc1RvQ29weShzaXplX3QmLCBzaXplX3QmKTsKLSAgICB2b2lk
IHN0YXJ0TmV4dFBoYXNlKEdDUGhhc2UpOwotICAgIHZvaWQgZW5kQ3VycmVudFBoYXNlKCk7CiAK
ICAgICBjb25zdCBIZWFwVHlwZSBtX2hlYXBUeXBlOwogICAgIGNvbnN0IHNpemVfdCBtX3JhbVNp
emU7CkBAIC0zODMsNyArMzgxLDE0IEBAIHByaXZhdGU6CiAgICAgTWFjaGluZVRocmVhZHMgbV9t
YWNoaW5lVGhyZWFkczsKICAgICAKICAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOwotICAg
IENvcHlWaXNpdG9yIG1fY29weVZpc2l0b3I7CisKKyAgICAvLyBXZSBwb29sIHRoZSBzbG90IHZp
c2l0b3JzIHVzZWQgYnkgcGFyYWxsZWwgbWFya2luZyB0aHJlYWRzLiBJdCdzIHVzZWZ1bCB0byBi
ZSBhYmxlIHRvCisgICAgLy8gZW51bWVyYXRlIG92ZXIgdGhlbSwgYW5kIGl0J3MgdXNlZnVsIHRv
IGhhdmUgdGhlbSBjYWNoZSBzb21lIHNtYWxsIGFtb3VudCBvZiBtZW1vcnkgZnJvbQorICAgIC8v
IG9uZSBHQyB0byB0aGUgbmV4dC4gR0MgbWFya2luZyB0aHJlYWRzIGNsYWltIHRoZXNlIGF0IHRo
ZSBzdGFydCBvZiBtYXJraW5nLCBhbmQgcmV0dXJuCisgICAgLy8gdGhlbSBhdCB0aGUgZW5kLgor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+PiBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzOworICAgIFZlY3RvcjxTbG90VmlzaXRvcio+IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90
VmlzaXRvcnM7CisgICAgTG9jayBtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrOwogCiAgICAgSGFu
ZGxlU2V0IG1faGFuZGxlU2V0OwogICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CkBAIC00
MjIsOCArNDI3LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9zaG91bGRIYXNoQ29ucyB7IGZh
bHNlIH07CiAKLSAgICBWZWN0b3I8R0NUaHJlYWQqPiBtX2djVGhyZWFkczsKLQogICAgIExvY2sg
bV9tYXJraW5nTXV0ZXg7CiAgICAgQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxl
OwogICAgIE1hcmtTdGFja0FycmF5IG1fc2hhcmVkTWFya1N0YWNrOwpAQCAtNDM5LDE1ICs0NDIs
MTAgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jb3B5SW5kZXggeyAwIH07CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzX2Jsb2NrRnJhZ21lbnRMZW5ndGggPSAzMjsKIAotICAgIExvY2sgbV9w
aGFzZU11dGV4OwotICAgIENvbmRpdGlvbiBtX3BoYXNlQ29uZGl0aW9uVmFyaWFibGU7Ci0gICAg
Q29uZGl0aW9uIG1fYWN0aXZpdHlDb25kaXRpb25WYXJpYWJsZTsKLSAgICB1bnNpZ25lZCBtX251
bWJlck9mQWN0aXZlR0NUaHJlYWRzIHsgMCB9OwotICAgIGJvb2wgbV9nY1RocmVhZHNTaG91bGRX
YWl0IHsgZmFsc2UgfTsKLSAgICBHQ1BoYXNlIG1fY3VycmVudFBoYXNlIHsgTm9QaGFzZSB9Owot
CiAgICAgTGlzdGFibGVIYW5kbGVyPFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI+OjpMaXN0IG1fd2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcnM7CiAgICAgTGlzdGFibGVIYW5kbGVyPFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXI+OjpMaXN0IG1fdW5jb25kaXRpb25hbEZpbmFsaXplcnM7CisKKyAgICBQYXJhbGxl
bEhlbHBlckNsaWVudCBtX2hlbHBlckNsaWVudDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJIZWFwSGVscGVyUG9vbC5oIgorCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworUGFyYWxsZWxIZWxwZXJQb29sJiBoZWFwSGVscGVy
UG9vbCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVIZWxwZXJQb29s
T25jZUZsYWc7CisgICAgc3RhdGljIFBhcmFsbGVsSGVscGVyUG9vbCogaGVscGVyUG9vbDsKKyAg
ICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgaW5pdGlhbGl6ZUhlbHBlclBvb2xPbmNlRmxhZywK
KyAgICAgICAgW10geworICAgICAgICAgICAgaGVscGVyUG9vbCA9IG5ldyBQYXJhbGxlbEhlbHBl
clBvb2woKTsKKyAgICAgICAgICAgIGhlbHBlclBvb2wtPmVuc3VyZVRocmVhZHMoT3B0aW9uczo6
bnVtYmVyT2ZHQ01hcmtlcnMoKSAtIDEpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKmhlbHBl
clBvb2w7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBIZWFwSGVscGVyUG9vbF9oCisjZGVmaW5lIEhlYXBIZWxwZXJQb29sX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1Bh
cmFsbGVsSGVscGVyUG9vbCYgaGVhcEhlbHBlclBvb2woKTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBIZWFwSGVscGVyUG9vbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEw
Nyw4IEBAIHZvaWQgTWFya1N0YWNrQXJyYXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHNpemVfdCBudW1iZXJPZkNlbGxzVG9TdGVhbCA9IChvdGhl
ci5zaXplKCkgKyBpZGxlVGhyZWFkQ291bnQgLSAxKSAvIGlkbGVUaHJlYWRDb3VudDsgLy8gUm91
bmQgdXAgdG8gc3RlYWwgMSAvIDEuCisgICAgLy8gU3RlYWwgY2VpbChvdGhlci5zaXplKCkgLyBp
ZGxlVGhyZWFkQ291bnQpIHRoaW5ncy4KKyAgICBzaXplX3QgbnVtYmVyT2ZDZWxsc1RvU3RlYWwg
PSAob3RoZXIuc2l6ZSgpICsgaWRsZVRocmVhZENvdW50IC0gMSkgLyBpZGxlVGhyZWFkQ291bnQ7
CiAgICAgd2hpbGUgKG51bWJlck9mQ2VsbHNUb1N0ZWFsLS0gPiAwICYmIG90aGVyLmNhblJlbW92
ZUxhc3QoKSkKICAgICAgICAgYXBwZW5kKG90aGVyLnJlbW92ZUxhc3QoKSk7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCShyZXZpc2lvbiAxOTAy
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5o
IgogI2luY2x1ZGUgIkNvcGllZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtNjcsMTAgKzY2
LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKICAgICBpZiAoaGVhcCgp
LT5vcGVyYXRpb25JblByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCiAgICAgICAgIEFTU0VS
VChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cu
CiAKLSAgICBtX2hlYXAubV9zaG91bGRIYXNoQ29ucyA9IG1faGVhcC5tX3ZtLT5oYXZlRW5vdWdo
TmV3U3RyaW5nc1RvSGFzaENvbnMoKTsKICAgICBtX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1f
c2hvdWxkSGFzaENvbnM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faGVhcC5tX2dj
VGhyZWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9oZWFwLm1fZ2NUaHJlYWRzW2ldLT5zbG90
VmlzaXRvcigpLT5tX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1fc2hvdWxkSGFzaENvbnM7CiB9
CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKQEAgLTIyMSw3ICsyMTcsNyBAQCB2b2lkIFNs
b3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQoU2hhcmVkCiAgICAgICAgICAgICAgICAgaWYgKG1f
aGVhcC5tX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgCisKICAgICAgICAgICAgIG1fc3RhY2su
c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAgICAgICAgICAgIG1faGVhcC5tX3NoYXJlZE1hcmtT
dGFjaywgbV9oZWFwLm1fbnVtYmVyT2ZXYWl0aW5nUGFyYWxsZWxNYXJrZXJzKTsKICAgICAgICAg
ICAgIG1faGVhcC5tX251bWJlck9mQWN0aXZlUGFyYWxsZWxNYXJrZXJzKys7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0JpbmFyeVN3aXRjaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgJKHJldmlzaW9uIDE5MDIxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgotI2luY2x1ZGUgIldlYWtSYW5kb20uaCIKKyNpbmNsdWRlIDx3dGYvV2Vh
a1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMSAr
MzEsMTEgQEAKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCiAj
aW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIldlYWtSYW5kb20uaCIK
ICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SYW5kb21OdW1iZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxOTAyMTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCw2IEBACiAjaW5jbHVkZSAiVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJW
TUVudHJ5UmVjb3JkLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIldlYWtS
YW5kb20uaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVy
QWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CkBAIC02Niw2ICs2NSw3IEBA
CiAjaW5jbHVkZSA8d3RmL1N0YWNrQm91bmRzLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNwZWNpZmljLmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtSYW5kb20uaD4KICNpbmNsdWRlIDx3dGYvV1RGVGhyZWFkRGF0YS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N5bWJvbFJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5o
CShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFr
UmFuZG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOSBJ
YW4gQy4gQnVsbGFyZAotICogCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl
IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgotICogb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNv
ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KLSAqIGZpbGVzICh0aGUgIlNvZnR3
YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKLSAqIHJlc3RyaWN0aW9uLCBp
bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAotICogY29weSwg
bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl
bGwKLSAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3
aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo
ZSBmb2xsb3dpbmcKLSAqIGNvbmRpdGlvbnM6Ci0gKiAKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCi0gKiBpbmNsdWRlZCBp
biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAq
IAotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAotICogSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCi0gKiBXSEVUSEVSIElO
IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZS
T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug
T1IKLSAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIFdl
YWtSYW5kb21faAotI2RlZmluZSBXZWFrUmFuZG9tX2gKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgot
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IFdlYWtSYW5kb20gewotZnJpZW5kIGNsYXNzIEpTR2xvYmFsT2JqZWN0OyAvLyBGb3IgYWNjZXNz
IHRvIGluaXRpYWxpemVTZWVkKCkgZHVyaW5nIHJlcGxheS4KLXB1YmxpYzoKLSAgICBXZWFrUmFu
ZG9tKHVuc2lnbmVkIHNlZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXplU2VlZChzZWVkKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0aGUgc2VlZCBwcm92aWRlZCB0aGF0IHlvdSd2
ZSBuZXZlciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWludDMyKCkuCi0gICAgdW5zaWduZWQgc2VlZFVu
c2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQotCi0gICAgZG91YmxlIGdldCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWR2YW5jZSgpIC8gKFVJTlRfTUFYICsgMS4wKTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBnZXRVaW50MzIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkdmFuY2Uo
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgYWR2YW5jZSgpCi0gICAgewotICAg
ICAgICBtX2hpZ2ggPSAobV9oaWdoIDw8IDE2KSArIChtX2hpZ2ggPj4gMTYpOwotICAgICAgICBt
X2hpZ2ggKz0gbV9sb3c7Ci0gICAgICAgIG1fbG93ICs9IG1faGlnaDsKLSAgICAgICAgcmV0dXJu
IG1faGlnaDsKLSAgICB9Ci0KLSAgICB2b2lkIGluaXRpYWxpemVTZWVkKHVuc2lnbmVkIHNlZWQp
Ci0gICAgewotICAgICAgICBtX2xvdyA9IHNlZWQgXiAweDQ5NjE2RTQyOwotICAgICAgICBtX2hp
Z2ggPSBzZWVkOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG1fbG93OwotICAgIHVuc2lnbmVkIG1f
aGlnaDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gV2Vha1JhbmRvbV9o
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMTkwMjE4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSw5NSBAQAorMjAxNS0wOS0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIFZNcyBzaG91bGQgc2hhcmUgR0MgdGhyZWFkcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NDMzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRzIHR3
byBtYWpvciB0aGluZ3MgdG8gV1RGOiBXZWFrUmFuZG9tIGFuZCBQYXJhbGxlbEhlbHBlclBvb2wu
IFdlYWtSYW5kb20gd2FzCisgICAgICAgIGFscmVhZHkgaW4gSlNDOyB3ZSdyZSBqdXN0IGhvaXN0
aW5nIGl0IGludG8gV1RGLiBJdCdzIGp1c3QgYSB3ZWFrIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9y
CisgICAgICAgIHRoYXQncyBzdWl0YWJsZSBmb3IgcGxhY2VzIHdoZXJlIHlvdSBuZWVkIGp1c3Qg
YSB0aW55IGJpdCBvZiByYW5kb21uZXNzLgorCisgICAgICAgIFBhcmFsbGVsSGVscGVyUG9vbCBp
cyBhIG5ldyBBUEkgdGhhdCBzaW1wbGlmaWVzIGRhdGEtcGFyYWxsZWwgYWxnb3JpdGhtcyBsaWtl
IHRoZSBKU0MgR0MuCisgICAgICAgIEluIGEgZGF0YS1wYXJhbGxlbCBhbGdvcml0aG0sIHdlIHdh
bnQgdG8gcnVuIG9uZSB0YXNrIG9uIGFzIG1hbnkgY29yZXMgYXMgcG9zc2libGUgYW5kIGxldAor
ICAgICAgICB0aGUgdGFzayB3b3JyeSBhYm91dCB3aGljaCBzdWJzZXQgb2YgdGhlIGlucHV0IGRh
dGEgdG8gd29yayBvbi4gSW4gc29tZSBjYXNlcywgdGhlCisgICAgICAgIGFsZ29yaXRobSB3aWxs
IG5vdCBuZWVkIHRvIGRvIGFueSBsb2FkIGJhbGFuY2luZyAtIGFuZCBpZiBsb2FkIGJhbGFuY2lu
ZyBpcyByZXF1aXJlZCwgaXQncworICAgICAgICB1cCB0byB0aGUgdXNlci4gVGhpcyBpcyBhcHBy
b3ByaWF0ZSBpbiBjb250ZXh0cyB3aGVyZSB0aGUgbG9hZCBiYWxhbmNpbmcgbmVlZHMgdG8gYmUK
KyAgICAgICAgY3VzdG9tLXR1bmVkIGZvciBwZXJmb3JtYW5jZSwgbGlrZSB0aGUgR0MncyBtYXJr
aW5nIHBoYXNlLgorCisgICAgICAgIFRoaXMgbmV3IEFQSSBoYXMgdGhyZWUgY29uY2VwdHM6IHRh
c2ssIGNsaWVudCwgYW5kIHBvb2wuIEEgdGFzayBpcyBhIHJlZmVyZW5jZSBjb3VudGVkCisgICAg
ICAgIG9iamVjdCB3aXRoIGEgcnVuKCkgbWV0aG9kLCB3aGljaCBtYXkgYmUgcnVuIGluIHBhcmFs
bGVsLiBJdCBpcyB1c3VhbGx5IHVzZWQgdG8gd3JhcCBhCisgICAgICAgIGZ1bmN0b3IuIEEgcG9v
bCBpcyBhIHBvb2wgb2YgdGhyZWFkcyB0aGF0IGNhbiBydW4gdGhpbmdzLiBBIGNsaWVudCBpcyBh
IHBsYWNlaG9sZGVyIGZvciBhCisgICAgICAgIHRhc2suIEEgY2xpZW50IGNhbiBoYXZlIHplcm8g
b3Igb25lIHRhc2tzLiBBIGNsaWVudCBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCBhIHBvb2wuIFdo
ZW4gYQorICAgICAgICBjbGllbnQgaGFzIGEgdGFzaywgdGhlIHBvb2wncyB0aHJlYWRzIG1heSBj
aG9vc2UgdG8gcnVuIGl0LiBJZiBhIHRocmVhZCBzdGFydHMgcnVubmluZyBhCisgICAgICAgIHRh
c2ssIGl0IHdpbGwgcnVuIGl0IHRvIGNvbXBsZXRpb24uIFdoZW4gdGhlIHRhc2sgcmV0dXJucyBv
biBhbnkgdGhyZWFkLCB0aGUgY2xpZW50IHRha2VzCisgICAgICAgIGl0IHRvIG1lYW4gdGhhdCB0
aGUgdGFzayBzaG91bGQgYmUgcmVtb3ZlZC4gVGhhdCBtZWFucyB0aGF0IGFueSBjdXJyZW50bHkg
cnVubmluZyBpbnN0YW5jZXMKKyAgICAgICAgb2YgdGhlIHRhc2sgd2lsbCBmaW5pc2ggYnV0IG5v
IG5ldyB0aHJlYWRzIHdpbGwgYXR0ZW1wdCB0byBydW4gdGhlIHRhc2suIFlvdSBjYW4gZWFzaWx5
IGFzaworICAgICAgICBhIGNsaWVudCB0byB3YWl0IHVudGlsIGEgdGFzayBmaW5pc2hlcy4gWW91
IGNhbiBhbHNvIGVhc2lseSBhc2sgYSBjbGllbnQgdG8gcnVuIGEgdGFzayBvbgorICAgICAgICB0
aGUgY3VycmVudCB0aHJlYWQgaW4gYWRkaXRpb24gdG8gcG9zc2libHkgc29tZSBoZWxwZXIgdGhy
ZWFkcyBmcm9tIHRoZSBwb29sLgorCisgICAgICAgIEZvciBzb21lIGRhdGEtcGFyYWxsZWwgYWxn
b3JpdGhtcywgcHJvZ3JhbW1pbmcgd2l0aCBQYXJhbGxlbEhlbHBlclBvb2wgaXMgYXMgZWFzeSBh
czoKKworICAgICAgICBjbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAgICAg
Wz1dICgpIHsKKyAgICAgICAgICAgICAgICBkbyB0aGluZ3M7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICBOb3RlIHRoYXQgeW91IGNhbm5vdCB0ZWxsIGFoZWFkIG9mIHRpbWUgaG93IG1hbnkg
dGhyZWFkcyB3aWxsIGpvaW4gdG8gaGVscCB0aGUgdGFzay4KKyAgICAgICAgVGhyZWFkcyBtYXkg
YmVjb21lIGF2YWlsYWJsZSBhZnRlciB0aGUgdGFzayBoYXMgYWxyZWFkeSBzdGFydGVkIHJ1bm5p
bmcuIFRob3NlIHRocmVhZHMgbWF5CisgICAgICAgIGpvaW4gYWZ0ZXIgdGhlIG90aGVyIHRocmVh
ZHMgaGF2ZSBhbHJlYWR5IHN0YXJ0ZWQuIGl0J3Mgbm90IGFkdmlzYWJsZSB0byBtYWtlIGFsZ29y
aXRobWljCisgICAgICAgIGRlY2lzaW9ucyBiYXNlZCBvbiBjbGllbnQubnVtYmVyT2ZBY3RpdmVU
aHJlYWRzKCksIHNpbmNlIHRoYXQgbnVtYmVyIG1heSBjaGFuZ2UuIFVzdWFsbHkKKyAgICAgICAg
dGhlIGJlc3Qgd2F5IHRvIHVzZSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgd2l0aCBhbiBhbGdvcml0
aG0gdGhhdCBoYXMgaXRzIG93biBjdXN0b20KKyAgICAgICAgd29ya2xpc3QuIEFuIGV4YW1wbGUg
b2YgYSB2ZXJ5IHNpbXBsZSBjdXN0b20gd29ya2xpc3QgaXMgdGhlIG9uZSBpbiB0aGUgSlNDIEdD
J3MgY29weWluZworICAgICAgICBwaGFzZSAtIGl0J3MganVzdCBhIFZlY3RvciBhbmQgYW4gaW5k
ZXggdGhhdCBpbmRpY2F0ZXMgdGhlIG5leHQgc2V0IG9mIGVsZW1lbnRzIHRvIHByb2Nlc3MuCisK
KyAgICAgICAgVGhpcyBuZXcgQVBJIHdhcyBpbml0aWFsbHkgZGVzaWduZWQgdG8gc2ltcGxpZnkg
aG93IEdDVGhyZWFkIHdvcmtzLCBieSByZXBsYWNpbmcgUGhhc2Ugd2l0aAorICAgICAgICBhIGNh
bGxiYWNrIHRoYXQgY29udGFpbnMgdGhlIHBoYXNlJ3Mgd29ya2xvYWQuIEkgdGhlbiByZWFsaXpl
ZCB0aGF0IHdpdGggYSBmZXcgdHdlYWtzLCBJCisgICAgICAgIGNvdWxkIG1ha2UgdGhpcyBzb21l
d2hhdCBnZW5lcmFsIGVub3VnaCB0aGF0IGl0IG1pZ2h0IGJlY29tZSBpbnRlcmVzdGluZyBvdXRz
aWRlIEdDLiBJIGFsc28KKyAgICAgICAgcmVhbGl6ZWQgdGhhdCBJIGNvdWxkIHVzZSB0aGlzIHRv
IGVuYWJsZSB0aHJlYWQgc2hhcmluZy4gU28sIGFsdGhvdWdoIHRoZSBBUEkgaXMga2luZGEKKyAg
ICAgICAgcXVpcmt5LCBpdCdzIGdyb3VuZGVkIGluIHRoZSByZWFsaXR5IG9mIGhvdyB0aGUgSlND
IEdDIGRvZXMgcGFyYWxsZWxpc20uCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcDogQWRkZWQuCisg
ICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpQYXJhbGxlbEhlbHBlckNsaWVudCk6
CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGll
bnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayk6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2gpOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZyk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBl
ckNsaWVudDo6cnVuVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6UGFy
YWxsZWxIZWxwZXJQb29sKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjp+UGFy
YWxsZWxIZWxwZXJQb29sKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjphZGRU
aHJlYWRzKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVUaHJlYWRz
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKToKKyAg
ICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpkaWRNYWtlV29ya0F2YWlsYWJsZSk6Cisg
ICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6aGVscGVyVGhyZWFkQm9keSk6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6aGFzQ2xpZW50V2l0aFRhc2spOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmdldENsaWVudFdpdGhUYXNrKToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjp3YWl0Rm9yQ2xpZW50V2l0aFRhc2spOgorICAgICAg
ICAqIHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlBhcmFs
bGVsSGVscGVyVGFzazo6UGFyYWxsZWxIZWxwZXJUYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxs
ZWxIZWxwZXJUYXNrOjp+UGFyYWxsZWxIZWxwZXJUYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxs
ZWxIZWxwZXJUYXNrRnVuY3Rvcjo6UGFyYWxsZWxIZWxwZXJUYXNrRnVuY3Rvcik6CisgICAgICAg
IChXVEY6OmNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
SGVscGVyQ2xpZW50OjpzZXRGdW5jdGlvbik6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVy
Q2xpZW50OjpydW5GdW5jdGlvbkluUGFyYWxsZWwpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhl
bHBlckNsaWVudDo6cG9vbCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpu
dW1iZXJPZkFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6
Om51bWJlck9mVGhyZWFkcyk6CisgICAgICAgICogd3RmL1dlYWtSYW5kb20uaDogQ29waWVkIGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oLgorICAgICAgICAo
V1RGOjpXZWFrUmFuZG9tOjpXZWFrUmFuZG9tKToKKyAgICAgICAgKFdURjo6V2Vha1JhbmRvbTo6
aW5pdGlhbGl6ZVNlZWQpOgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjpzZWVkVW5zYWZlKToK
KyAgICAgICAgKFdURjo6V2Vha1JhbmRvbTo6Z2V0VWludDMyKToKKyAgICAgICAgKFdURjo6V2Vh
a1JhbmRvbTo6YWR2YW5jZSk6CisgICAgICAgIChKU0M6OldlYWtSYW5kb206OldlYWtSYW5kb20p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWFrUmFuZG9tOjpzZWVkVW5zYWZlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6V2Vha1JhbmRvbTo6Z2V0VWludDMyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6V2Vha1JhbmRvbTo6YWR2YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldl
YWtSYW5kb206OmluaXRpYWxpemVTZWVkKTogRGVsZXRlZC4KKwogMjAxNS0wOS0yNCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSYW4gc29ydC1YY29kZS1wcm9q
ZWN0LWZpbGUuCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAkJMEYwRDg1QjQxNzIzNEND
MTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9Owog
CQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3
QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVz
LmggKi87IH07CisJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1
OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAy
RTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAg
Ki87IH07CiAJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsK
QEAgLTQ4LDYgKzQ5LDggQEAKIAkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0
NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi87IH07CiAJCTBGRTQ0NzlEMUI3
QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmgg
Ki87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OworCQkwRkZGMTlEQzFCQjMzNEVCMDA4ODZE
OTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhl
bHBlclBvb2wuY3BwICovOyB9OworCQkwRkZGMTlERDFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxs
ZWxIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi87
IH07CiAJCTE0MDIyRjQxMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAyMkY0MDE4RjVDM0ZD
MDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJ
CTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC0zMTIs
NiArMzE1LDcgQEAKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZD
b3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNTAx
NjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzYsNiArMzQwLDggQEAKIAkJMEZFNDQ3OUExQjdBQUEw
MzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdvcmRMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNDQ3
OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2
N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyog
UGFyYWxsZWxIZWxwZXJQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBh
cmFsbGVsSGVscGVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0
MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2Mu
YTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBG
OTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFF
MTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOCw2ICs4
MjQsOCBAQAogCQkJCUE4QTQ3MkUzMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwICov
LAogCQkJCUE4QTQ3MkU0MTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suaCAqLywKIAkJCQlB
OEE0NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCisJCQkJMEZG
RjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJ
MEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovLAogCQkJ
CUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywKIAkJCQlBOEE0
NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLywKIAkJ
CQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8sCkBAIC04OTIs
NiArOTAwLDcgQEAKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRz
LmggKi8sCiAJCQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJ
CTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCisJCQkJMEYzNTAxNjMx
QkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAz
MDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLAogCQkJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThF
QiAvKiBXb3JkTG9jay5oICovLAogCQkJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3Jr
UXVldWUuY3BwICovLApAQCAtMTA2Myw2ICsxMDcyLDcgQEAKIAkJCQlBOEE0NzM4NTE1MUE4MjVC
MDA0MTIzRkYgLyogQVNDSUlDVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzQxNTFB
ODI1QjAwNDEyM0ZGIC8qIEFTQ0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
Mzg3MTUxQTgyNUIwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDczODgxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDM2MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDM3MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmdIYXNoLmgg
aW4gSGVhZGVycyAqLywKQEAgLTEwNzQsNiArMTA4NCw3IEBACiAJCQkJODEzNDAxMzkxNUIwOTJG
RDAwMUZGMEI4IC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1
QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1
MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGMTlERDFC
QjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVh
ZGVycyAqLywKQEAgLTEzOTIsNiArMTQwMyw3IEBACiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERC
QTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAw
NERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFB
RjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZG
RjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxl
UGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDIxMTUxQTgyNUIwMDQxMjNGRiAv
KiBTSEExLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxsZWxI
ZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBl
clBvb2wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQ
b29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUGFyYWxsZWxIZWxwZXJQb29sLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitQYXJhbGxl
bEhlbHBlckNsaWVudDo6UGFyYWxsZWxIZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVscGVy
UG9vbD4gcG9vbCkKKyAgICA6IG1fcG9vbChwb29sKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcG9vbC0+bV9sb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlpbmcp
OworICAgIG1fcG9vbC0+bV9jbGllbnRzLmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wb29sLT5tX2xvY2spOworICAgIGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3Bvb2wtPm1fY2xpZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9wb29sLT5tX2NsaWVudHNbaV0gPT0gdGhpcykgeworICAgICAgICAgICAgbV9wb29sLT5t
X2NsaWVudHNbaV0gPSBtX3Bvb2wtPm1fY2xpZW50cy5sYXN0KCk7CisgICAgICAgICAgICBtX3Bv
b2wtPm1fY2xpZW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8
UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9v
bC0+bV9sb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV90YXNrKTsKKyAgICBtX3Rhc2sgPSB0
YXNrOworICAgIG1fcG9vbC0+ZGlkTWFrZVdvcmtBdmFpbGFibGUobG9ja2VyKTsKK30KKwordm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3Bvb2wtPm1fbG9jayk7CisgICAgZmluaXNoKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBpbmcoKQoreworICAgIFJlZlB0cjxQYXJhbGxlbEhl
bHBlclRhc2s+IHRhc2s7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wt
Pm1fbG9jayk7CisgICAgICAgIHRhc2sgPSBjbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgaWYg
KCF0YXNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJ1blRhc2sodGFzayk7
Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0
cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7CisgICAgc2V0VGFzayh0YXNrKTsKKyAgICBk
b1NvbWVIZWxwaW5nKCk7CisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJD
bGllbnQ6OmZpbmlzaChjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBtX3Rhc2sgPSBudWxscHRy
OworICAgIHdoaWxlIChtX251bUFjdGl2ZSkKKyAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0
ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKK30KKworUmVmUHRyPFBhcmFsbGVsSGVs
cGVyVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVy
JikKK3sKKyAgICBpZiAoIW1fdGFzaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgbV9udW1BY3RpdmUrKzsKKyAgICByZXR1cm4gbV90YXNrOworfQorCit2b2lkIFBhcmFsbGVs
SGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKHRh
c2spOworICAgIAorICAgIHRhc2stPnJ1bigpOworCisgICAgeworICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbnVtQWN0
aXZlKTsKKyAgICAgICAgbV90YXNrID0gbnVsbHB0cjsKKyAgICAgICAgbV9udW1BY3RpdmUtLTsK
KyAgICAgICAgaWYgKCFtX251bUFjdGl2ZSkKKyAgICAgICAgICAgIG1fcG9vbC0+bV93b3JrQ29t
cGxldGVDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQorfQorCitQYXJhbGxlbEhlbHBlclBv
b2w6OlBhcmFsbGVsSGVscGVyUG9vbCgpCit7Cit9CisKK1BhcmFsbGVsSGVscGVyUG9vbDo6flBh
cmFsbGVsSGVscGVyUG9vbCgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9jbGllbnRzLmlzRW1w
dHkoKSk7CisgICAgCisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwor
ICAgICAgICBtX2lzRHlpbmcgPSB0cnVlOworICAgICAgICBtX3dvcmtBdmFpbGFibGVDb25kaXRp
b24ubm90aWZ5QWxsKCk7CisgICAgfQorCisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVh
ZElkZW50aWZpZXIgOiBtX3RocmVhZHMpCisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9u
KHRocmVhZElkZW50aWZpZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6YWRkVGhy
ZWFkcyh1bnNpZ25lZCBudW1UaHJlYWRzKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CisgICAgbV9udW1UaHJlYWRzICs9IG51bVRocmVhZHM7CisgICAgaWYgKGdldENsaWVudFdp
dGhUYXNrKGxvY2tlcikpCisgICAgICAgIGRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tlcik7Cit9
CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVUaHJlYWRzKHVuc2lnbmVkIG51bVRo
cmVhZHMpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAobnVtVGhy
ZWFkcyA8IG1fbnVtVGhyZWFkcykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbnVtVGhyZWFkcyA9
IG51bVRocmVhZHM7CisgICAgaWYgKGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikpCisgICAgICAg
IGRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQ
b29sOjpkb1NvbWVIZWxwaW5nKCkKK3sKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50
OworICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2s7CisgICAgeworICAgICAgICBM
b2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBjbGllbnQgPSBnZXRDbGllbnRXaXRo
VGFzayhsb2NrZXIpOworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGFzayA9IGNsaWVudC0+Y2xhaW1UYXNrKGxvY2tlcik7CisgICAgfQorCisgICAg
Y2xpZW50LT5ydW5UYXNrKHRhc2spOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZGlk
TWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgd2hpbGUgKG1fbnVt
VGhyZWFkcyA+IG1fdGhyZWFkcy5zaXplKCkpIHsKKyAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0
aHJlYWRJZGVudGlmaWVyID0gY3JlYXRlVGhyZWFkKAorICAgICAgICAgICAgIlBhcmFsbGVsIEhl
bHBlciBUaHJlYWQiLAorICAgICAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBo
ZWxwZXJUaHJlYWRCb2R5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV90aHJlYWRzLmFw
cGVuZCh0aHJlYWRJZGVudGlmaWVyKTsKKyAgICB9CisgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0
aW9uLm5vdGlmeUFsbCgpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6aGVscGVyVGhy
ZWFkQm9keSgpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVu
dCogY2xpZW50OworICAgICAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrOworCisg
ICAgICAgIHsKKyAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAg
ICAgICBjbGllbnQgPSB3YWl0Rm9yQ2xpZW50V2l0aFRhc2sobG9ja2VyKTsKKyAgICAgICAgICAg
IGlmICghY2xpZW50KSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9pc0R5aW5n
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRhc2sgPSBjbGllbnQtPmNsYWltVGFzayhsb2NrZXIpOworICAgICAgICB9CisKKyAgICAgICAg
Y2xpZW50LT5ydW5UYXNrKHRhc2spOworICAgIH0KK30KKworYm9vbCBQYXJhbGxlbEhlbHBlclBv
b2w6Omhhc0NsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICBy
ZXR1cm4gISFnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpOworfQorCitQYXJhbGxlbEhlbHBlckNs
aWVudCogUGFyYWxsZWxIZWxwZXJQb29sOjpnZXRDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9s
ZGVyJikKK3sKKyAgICAvLyBXZSBsb2FkLWJhbGFuY2UgYnkgYmVpbmcgcmFuZG9tLgorICAgIHVu
c2lnbmVkIHN0YXJ0SW5kZXggPSBtX3JhbmRvbS5nZXRVaW50MzIobV9jbGllbnRzLnNpemUoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IHN0YXJ0SW5kZXg7IGluZGV4IDwgbV9jbGllbnRz
LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50
ID0gbV9jbGllbnRzW2luZGV4XTsKKyAgICAgICAgaWYgKGNsaWVudC0+bV90YXNrKQorICAgICAg
ICAgICAgcmV0dXJuIGNsaWVudDsKKyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgc3RhcnRJbmRleDsgKytpbmRleCkgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNs
aWVudCogY2xpZW50ID0gbV9jbGllbnRzW2luZGV4XTsKKyAgICAgICAgaWYgKGNsaWVudC0+bV90
YXNrKQorICAgICAgICAgICAgcmV0dXJuIGNsaWVudDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbDo6d2Fp
dEZvckNsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlcikKK3sKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIHF1aXR0aW4nIHRpbWUuCisgICAgICAgIGlm
IChtX2lzRHlpbmcpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAo
UGFyYWxsZWxIZWxwZXJDbGllbnQqIHJlc3VsdCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcikp
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgIC8vIFdhaXQgdW50aWwgd29y
ayBiZWNvbWVzIGF2YWlsYWJsZS4KKyAgICAgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLndh
aXQobV9sb2NrKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1BhcmFsbGVsSGVscGVyUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUGFy
YWxsZWxIZWxwZXJQb29sX2gKKyNkZWZpbmUgUGFyYWxsZWxIZWxwZXJQb29sX2gKKworI2luY2x1
ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi9XZWFrUmFuZG9tLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBBIFBhcmFsbGVsSGVs
cGVyUG9vbCBpcyBhIHNoYXJlZCBwb29sIG9mIHRocmVhZHMgdGhhdCBjYW4gYmUgYXNrZWQgdG8g
aGVscCB3aXRoIHNvbWUgZmluaXRlLXRpbWUKKy8vIHBhcmFsbGVsIGFjdGl2aXR5LiBJdCdzIGRl
c2lnbmVkIHRvIHdvcmsgd2VsbCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBjb25jdXJyZW50IHRh
c2tzIHRoYXQgbWF5CisvLyBhbGwgd2FudCBwYXJhbGxlbCBoZWxwLiBJbiB0aGF0IGNhc2UsIHdl
IGRvbid0IHdhbnQgZWFjaCB0YXNrIHRvIHN0YXJ0IGl0cyBvd24gdGhyZWFkIHBvb2wuIEl0J3MK
Ky8vIGFsc28gZGVzaWduZWQgdG8gd29yayB3ZWxsIGZvciB0YXNrcyB0aGF0IGRvIHRoZWlyIG93
biBsb2FkIGJhbGFuY2luZyBhbmQgZG8gbm90IHdpc2ggdG8KKy8vIHBhcnRpY2lwYXRlIGluIG1p
Y3JvdGFzay1zdHlsZSBsb2FkIGJhbGFuY2luZy4KKy8vCisvLyBBIHBvb2wgY2FuIGhhdmUgbWFu
eSBjbGllbnRzLCBhbmQgZWFjaCBjbGllbnQgbWF5IGhhdmUgemVybyBvciBvbmUgdGFza3MuIFRo
ZSBwb29sIHdpbGwgaGF2ZSB1cAorLy8gdG8gc29tZSBudW1iZXIgb2YgdGhyZWFkcywgY29uZmln
dXJhYmxlIHdpdGggUGFyYWxsZWxIZWxwZXJQb29sOjphZGRUaHJlYWRzKCk7IHVzdWFsbHkgeW91
IGJvdW5kCisvLyB0aGlzIGJ5IHRoZSBudW1iZXIgb2YgQ1BVcy4gV2hlbmV2ZXIgYSB0aHJlYWQg
aXMgaWRsZSBhbmQgaXQgbm90aWNlcyB0aGF0IHNvbWUgY2xpZW50IGhhcyBhCisvLyB0YXNrLCBp
dCB3aWxsIHJ1biB0aGUgdGFzay4gQSB0YXNrIG1heSBiZSBydW4gb24gYW55d2hlcmUgYmV0d2Vl
biB6ZXJvIGFuZCBOIHRocmVhZHMsIHdoZXJlIE4gaXMKKy8vIHRoZSBudW1iZXIgb2YgdGhyZWFk
cyBpbiB0aGUgcG9vbC4gVGFza3MgcnVuIHRvIGNvbXBsZXRpb24uIEl0J3MgZXhwZWN0ZWQgdGhh
dCBhIHRhc2sgd2lsbCBoYXZlCisvLyBpdHMgb3duIGN1c3RvbSBpZGVhcyBhYm91dCBob3cgdG8g
cGFydGljaXBhdGUgaW4gc29tZSBwYXJhbGxlbCBhY3Rpdml0eSdzIGxvYWQgYmFsYW5jaW5nLCBh
bmQgaXQKKy8vIHdpbGwgcmV0dXJuIHdoZW4gdGhlIHBhcmFsbGVsIGFjdGl2aXR5IGlzIGRvbmUu
IEZvciBleGFtcGxlLCBhIHBhcmFsbGVsIG1hcmtpbmcgdGFzayB3aWxsIHJldHVybgorLy8gd2hl
biB0aGUgbWFyayBwaGFzZSBpcyBkb25lLgorLy8KKy8vIFRocmVhZHMgbWF5IGhhdmUgYSBjaG9p
Y2UgYmV0d2VlbiBtYW55IHRhc2tzLCBzaW5jZSB0aGVyZSBtYXkgYmUgbWFueSBjbGllbnRzIGFu
ZCBlYWNoIGNsaWVudAorLy8gbWF5IGhhdmUgYSB0YXNrLiBGb3IgdGhlIG1hcmtpbmcgZXhhbXBs
ZSwgdGhhdCBtYXkgaGFwcGVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBWTSBpbnN0YW5jZXMgYW5k
CisvLyBlYWNoIGluc3RhbmNlIGRlY2lkZXMgdG8gc3RhcnQgcGFyYWxsZWwgbWFya2luZyBhdCB0
aGUgc2FtZSB0aW1lLiBJbiB0aGF0IGNhc2UsIHRocmVhZHMgY2hvb3NlCisvLyBhIHRhc2sgYXQg
cmFuZG9tLiBTbyBsb25nIGFzIGFueSBjbGllbnQgaGFzIGEgdGFzaywgYWxsIHRocmVhZHMgaW4g
dGhlIHBvb2wgd2lsbCBjb250aW51ZQorLy8gcnVubmluZyB0aGUgYXZhaWxhYmxlIHRhc2tzLiBU
aHJlYWRzIGdvIGlkbGUgd2hlbiBubyBjbGllbnQgaGFzIHRhc2tzIHRvIHJ1bi4KKworLy8gQSB0
YXNrIGVuY2Fwc3VsYXRlcyBvbmUgdGhyZWFkJ3Mgd29ydGggb2YgYWN0aXZpdHkgaW4gc29tZSBw
YXJhbGxlbCBhbGdvcml0aG0uIFRoZSBwb29sIHdpbGwKKy8vIHJ1biB0aGlzIHRhc2sgb24gcG90
ZW50aWFsbHkgbWFueSB0aHJlYWRzLiBUaGUgcG9vbCBtYXkgbm90IHJ1biB0aGUgdGFzayBvbiBh
bnkgdGhyZWFkcywgb2YgYWxsCisvLyB0aHJlYWRzIGFyZSBidXN5IHJ1bm5pbmcgb3RoZXIgdGFz
a3MuIFRhc2tzIG1heSBqb2luIGluIGF0IGFueSB0aW1lLgorLy8KKy8vIFRhc2tzIHNob3VsZCBj
b21wbGV0ZSBpbiBmaW5pdGUgdGltZS4gUGFyYWxsZWxIZWxwZXJQb29sIGFuZCBmcmllbmRzIGFy
ZSBtZWFudCB0byBiZSB1c2VkIGZvcgorLy8gcGFyYWxsZWwgYWxnb3JpdGhtcyB0aGF0IHJ1biB0
byBjb21wbGV0aW9uLiBBIGdvb2QgZXhhbXBsZSBpcyBzb21ldGhpbmcgbGlrZSBwYXJhbGxlbCBt
YXJraW5nLAorLy8gd2hpY2ggY2FuIGJlIGxvbmctcnVubmluZyBidXQgYWx3YXlzIHRlcm1pbmF0
ZXMuCitjbGFzcyBQYXJhbGxlbEhlbHBlclRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8UGFyYWxsZWxIZWxwZXJUYXNrPiB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxIZWxwZXJUYXNr
KCkgeyB9CisgICAgdmlydHVhbCB+UGFyYWxsZWxIZWxwZXJUYXNrKCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcnVuKCkgPSAwOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Ns
YXNzIFBhcmFsbGVsSGVscGVyVGFza0Z1bmN0b3IgOiBwdWJsaWMgUGFyYWxsZWxIZWxwZXJUYXNr
IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKGZ1bmN0b3IpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICB2b2lkIHJ1bigpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2Z1bmN0
b3IoKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsKK307CisKKy8vIFlvdSBjYW4g
dXNlIHRoaXMgbGlrZSBzbzoKKy8vCisvLyBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNr
ID0gY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKAorLy8gICAgIFs9XSAoKSB7CisvLyAgICAgICAg
IGRvIHRoaW5nczsKKy8vICAgICB9KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitSZWZQ
dHI8UGFyYWxsZWxIZWxwZXJUYXNrPiBjcmVhdGVQYXJhbGxlbEhlbHBlclRhc2soY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQYXJhbGxlbEhlbHBl
clRhc2tGdW5jdG9yPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworY2xhc3MgUGFyYWxsZWxIZWxw
ZXJQb29sOworCisvLyBBIGNsaWVudCBpcyBhIHBsYWNlaG9sZGVyIGZvciBhIHBhcmFsbGVsIGFs
Z29yaXRobS4gQSBwYXJhbGxlbCBhbGdvcml0aG0gd2lsbCBoYXZlIGEgdGFzayB0aGF0CisvLyBj
YW4gYmUgcnVuIGNvbmN1cnJlbnRseS4gV2hlbmV2ZXIgYSBjbGllbnQgaGFzIGEgdGFzayBzZXQg
KHlvdSBoYXZlIGNhbGxlZCBzZXRUYXNrKCkgb3IKKy8vIHNldEZ1bmN0aW9uKCkpLCB0aHJlYWRz
IGluIHRoZSBwb29sIG1heSBydW4gdGhhdCB0YXNrLiBJZiBhIHRhc2sgcmV0dXJucyBvbiBhbnkg
dGhyZWFkLCB0aGUKKy8vIGNsaWVudCB3aWxsIGFzc3VtZSB0aGF0IHRoZSB0YXNrIGlzIGRvbmUg
YW5kIHdpbGwgY2xlYXIgdGhlIHRhc2suIElmIHRoZSB0YXNrIGlzIGNsZWFyZWQgKHRoZQorLy8g
dGFzayBydW5zIHRvIGNvbXBsZXRpb24gb24gYW55IHRocmVhZCBvciB5b3UgY2FsbCBmaW5pc2go
KSksIGFueSB0aHJlYWRzIGluIHRoZSBwb29sIGFscmVhZHkKKy8vIHJ1bm5pbmcgdGhlIGxhc3Qg
c2V0IHRhc2socykgd2lsbCBjb250aW51ZSB0byBydW4gdGhlbS4gWW91IGNhbiB3YWl0IGZvciBh
bGwgb2YgdGhlbSB0byBmaW5pc2gKKy8vIGJ5IGNhbGxpbmcgZmluaXNoKCkuIFRoYXQgbWV0aG9k
IHdpbGwgY2xlYXIgdGhlIHRhc2sgYW5kIHdhaXQgZm9yIGFueSB0aHJlYWRzIHJ1bm5pbmcgdGhl
IGxhc3QKKy8vIHNldCB0YXNrIHRvIGZpbmlzaC4gVGhlcmUgYXJlIHR3byBrbm93bi1nb29kIHBh
dHRlcm5zIGZvciB1c2luZyBhIGNsaWVudDoKKy8vCisvLyAxKSBUYXNrcyBpbnRyaW5zaWNhbGx5
IGtub3cgd2hlbiB0aGUgYWxnb3JpdGhtIHJlYWNoZXMgdGVybWluYXRpb24sIGFuZCBzaW1wbHkg
cmV0dXJucyB3aGVuCisvLyAgICB0aGlzIGhhcHBlbnMuIFRoZSBtYWluIHRocmVhZCBydW5zIHRo
ZSB0YXNrIGJ5IGRvaW5nOgorLy8KKy8vICAgIGNsaWVudC0+c2V0RnVuY3Rpb24oCisvLyAgICAg
ICAgWz1dICgpIHsKKy8vICAgICAgICAgICAgZG8gdGhpbmdzOworLy8gICAgICAgIH0pOworLy8g
ICAgY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisvLyAgICBjbGllbnQtPmZpbmlzaCgpOworLy8K
Ky8vICAgIENhbGxpbmcgZG9Tb21lSGVscGluZygpIGVuc3VyZXMgdGhhdCB0aGUgYWxnb3JpdGht
IHJ1bnMgb24gYXQgbGVhc3Qgb25lIHRocmVhZCAodGhpcyBvbmUpLgorLy8gICAgVGFza3Mgd2ls
bCBrbm93IHdoZW4gdG8gY29tcGxldGUsIGFuZCB3aWxsIHJldHVybiB3aGVuIHRoZXkgYXJlIGRv
bmUuIFRoaXMgd2lsbCBjbGVhciB0aGUKKy8vICAgIHRhc2sgdG8gZW5zdXJlIHRoYXQgbm8gbmV3
IHRocmVhZHMgd2lsbCBydW4gdGhlIHRhc2suIFRoZW4sIGZpbmlzaCgpIGNsZWFycyB0aGUgY3Vy
cmVudCB0YXNrCisvLyAgICBhbmQgd2FpdHMgZm9yIGFueSBwYXJhbGxlbCB0YXNrcyB0byBmaW5p
c2ggYWZ0ZXIgdGhlIG1haW4gdGhyZWFkIGhhcyBmaW5pc2hlZC4gSXQncyBwb3NzaWJsZQorLy8g
ICAgZm9yIHRocmVhZHMgdG8gc3RpbGwgYmUgcnVubmluZyB0aGUgbGFzdCBzZXQgdGFzayAoaS5l
LiB0aGUgb25lIHNldCBieSBzZXRGdW5jdGlvbigpKSBldmVuCisvLyAgICBhZnRlciB0aGUgdGFz
ayBoYXMgYmVlbiBjbGVhcmVkLiBXYWl0aW5nIGZvciBpZGxlIGVuc3VyZXMgdGhhdCBubyBvbGQg
dGFza3MgYXJlIHJ1bm5pbmcKKy8vICAgIGFueW1vcmUuCisvLworLy8gICAgWW91IGNhbiBkbyB0
aGlzIG1vcmUgZWFzaWx5IGJ5IHVzaW5nIHRoZSBydW5GdW5jdGlvbkluUGFyYWxsZWwoKSBoZWxw
ZXI6CisvLworLy8gICAgY2xpZW50cy0+cnVuRnVuY3Rpb25JblBhcmFsbGVsKAorLy8gICAgICAg
IFs9XSAoKSB7CisvLyAgICAgICAgICAgIGRvIHRoaW5nczsKKy8vICAgICAgICB9KTsKKy8vCisv
LyAyKSBUYXNrcyBrZWVwIGRvaW5nIHRoaW5ncyB1bnRpbCB0aGV5IGFyZSB0b2xkIHRvIHF1aXQg
dXNpbmcgc29tZSBjdXN0b20gbm90aWZpY2F0aW9uIG1lY2hhbmlzbS4KKy8vICAgIFRoZSBtYWlu
IHRocmVhZCBydW5zIHRoZSB0YXNrIGJ5IGRvaW5nOgorLy8KKy8vICAgIGJvb2wga2VlcEdvaW5n
ID0gdHJ1ZTsKKy8vICAgIGNsaWVudC0+c2V0RnVuY3Rpb24oCisvLyAgICAgICAgWz1dICgpIHsK
Ky8vICAgICAgICAgICAgd2hpbGUgKGtlZXBHb2luZykgeworLy8gICAgICAgICAgICAgICAgZG8g
dGhpbmdzOworLy8gICAgICAgICAgICB9CisvLyAgICAgICAgfSk7CisvLworLy8gICAgV2hlbiB3
b3JrIHJ1bnMgb3V0LCB0aGUgbWFpbiB0aHJlYWQgd2lsbCBpbmZvcm0gdGFza3MgdGhhdCB0aGVy
ZSBpcyBubyBtb3JlIHdvcmssIGFuZCB0aGVuCisvLyAgICB3YWl0IHVudGlsIG5vIG1vcmUgdGFz
a3MgYXJlIHJ1bm5pbmc6CisvLworLy8gICAga2VlcEdvaW5nID0gZmFsc2U7CisvLyAgICBjbGll
bnQtPmZpbmlzaCgpOworLy8KKy8vICAgIFRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBtYWluIHRo
cmVhZCBkb2Vzbid0IGFjdHVhbGx5IHdhbnQgdG8gcnVuIHRoZSB0YXNrIHRoYXQgaXQgc2V0IGlu
IHRoZQorLy8gICAgY2xpZW50LiBUaGlzIGhhcHBlbnMgZm9yIGV4YW1wbGUgaW4gcGFyYWxsZWwg
bWFya2luZy4gVGhlIG1haW4gdGhyZWFkIHVzZXMgYSBzb21ld2hhdAorLy8gICAgZGlmZmVyZW50
IG1hcmtpbmcgYWxnb3JpdGhtIHRoYW4gdGhlIGhlbHBlcnMuIFRoZSBtYWluIHRocmVhZCBtYXkg
cHJvdmlkZSB3b3JrIHRoYXQgdGhlCisvLyAgICBoZWxwZXJzIHN0ZWFsLiBUaGUgbWFpbiB0aHJl
YWQga25vd3Mgd2hlbiB0ZXJtaW5hdGlvbiBpcyByZWFjaGVkLCBhbmQgc2ltcGx5IHRlbGxzIHRo
ZQorLy8gICAgaGVscGVycyB0byBzdG9wIHVwb24gdGVybWluYXRpb24uCisvLworLy8gVGhlIGtu
b3duLWdvb2Qgc3R5bGVzIG9mIHVzaW5nIFBhcmFsbGVsSGVscGVyQ2xpZW50IGFsbCBpbnZvbHZl
IGEgcGFyYWxsZWwgYWxnb3JpdGhtIHRoYXQgaGFzCisvLyBpdHMgb3duIHdvcmsgZGlzdHJpYnV0
aW9uIGFuZCBsb2FkIGJhbGFuY2luZy4KK2NsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50IHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJhbGxlbEhlbHBlckNsaWVudCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KFJlZlB0cjxQ
YXJhbGxlbEhlbHBlclBvb2w+KTsKKyAgICB+UGFyYWxsZWxIZWxwZXJDbGllbnQoKTsKKworICAg
IHZvaWQgc2V0VGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPik7CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0RnVuY3Rpb24oY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIHNldFRhc2soY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNr
KGZ1bmN0b3IpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHZvaWQg
ZG9Tb21lSGVscGluZygpOworCisgICAgLy8gRXF1aXZhbGVudCB0bzoKKyAgICAvLyBjbGllbnQt
PnNldFRhc2sodGFzayk7CisgICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8g
Y2xpZW50LT5maW5pc2goKTsKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxQYXJh
bGxlbEhlbHBlclRhc2s+KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG86CisgICAgLy8gY2xpZW50
LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKKyAgICAvLyBjbGllbnQtPmRvU29tZUhlbHBpbmcoKTsK
KyAgICAvLyBjbGllbnQtPmZpbmlzaCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVBhcmFsbGVsSGVscGVyVGFz
ayhmdW5jdG9yKSk7CisgICAgfQorCisgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyBy
ZXR1cm4gKm1fcG9vbDsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlVGhyZWFkcygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtQWN0aXZlOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFBhcmFsbGVsSGVscGVyUG9vbDsKKworICAgIHZvaWQgZmluaXNoKGNvbnN0IExvY2tIb2xkZXIm
KTsKKyAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hv
bGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPik7Cisg
ICAgCisgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29sOworICAgIFJlZlB0cjxQ
YXJhbGxlbEhlbHBlclRhc2s+IG1fdGFzazsKKyAgICB1bnNpZ25lZCBtX251bUFjdGl2ZSB7IDAg
fTsKK307CisKK2NsYXNzIFBhcmFsbGVsSGVscGVyUG9vbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxQYXJhbGxlbEhlbHBlclBvb2w+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbEhlbHBl
clBvb2woKTsKKyAgICB+UGFyYWxsZWxIZWxwZXJQb29sKCk7CisKKyAgICB2b2lkIGFkZFRocmVh
ZHModW5zaWduZWQgbnVtVGhyZWFkcyk7CisgICAgdm9pZCBlbnN1cmVUaHJlYWRzKHVuc2lnbmVk
IG51bVRocmVhZHMpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9udW1UaHJlYWRzOyB9CisgICAgCisgICAgdm9pZCBkb1NvbWVIZWxwaW5nKCk7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50OworCisgICAg
dm9pZCBkaWRNYWtlV29ya0F2YWlsYWJsZShjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBo
ZWxwZXJUaHJlYWRCb2R5KCk7CisKKyAgICBib29sIGhhc0NsaWVudFdpdGhUYXNrKGNvbnN0IExv
Y2tIb2xkZXImKTsKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogZ2V0Q2xpZW50V2l0aFRhc2so
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiB3YWl0Rm9yQ2xp
ZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIAorICAgIExvY2sgbV9sb2NrOwor
ICAgIENvbmRpdGlvbiBtX3dvcmtBdmFpbGFibGVDb25kaXRpb247CisgICAgQ29uZGl0aW9uIG1f
d29ya0NvbXBsZXRlQ29uZGl0aW9uOworCisgICAgV2Vha1JhbmRvbSBtX3JhbmRvbTsKKyAgICAK
KyAgICBWZWN0b3I8UGFyYWxsZWxIZWxwZXJDbGllbnQqPiBtX2NsaWVudHM7CisgICAgVmVjdG9y
PFRocmVhZElkZW50aWZpZXI+IG1fdGhyZWFkczsKKyAgICB1bnNpZ25lZCBtX251bVRocmVhZHMg
eyAwIH07IC8vIFRoaXMgY2FuIGJlIGxhcmdlciB0aGFuIG1fdGhyZWFkcy5zaXplKCkgYmVjYXVz
ZSB3ZSBzdGFydCB0aHJlYWRzIG9ubHkgb25jZSB0aGVyZSBpcyB3b3JrLgorICAgIGJvb2wgbV9p
c0R5aW5nIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6
OmNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzazsKK3VzaW5nIFdURjo6UGFyYWxsZWxIZWxwZXJDbGll
bnQ7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDsKK3VzaW5nIFdURjo6UGFyYWxsZWxI
ZWxwZXJUYXNrOwordXNpbmcgV1RGOjpQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yOworCisjZW5k
aWYgLy8gUGFyYWxsZWxIZWxwZXJQb29sX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvV2Vha1Jh
bmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkocmV2aXNp
b24gMTkwMTUxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9t
Lmg6MTkwMTUxKQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSWFuIEMuIEJ1bGxhcmQKKyAqIAorICog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24KKyAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk
b2N1bWVudGF0aW9uCisgKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBT
b2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNv
ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz
IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRp
b25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu
dGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVT
UyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVT
CisgKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBP
UiBDT1BZUklHSFQKKyAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg
T1IgT1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs
IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJ
TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBXZWFrUmFuZG9tX2gKKyNkZWZpbmUgV2Vh
a1JhbmRvbV9oCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrUmFuZG9tIHsKK2ZyaWVuZCBj
bGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1
cmluZyByZXBsYXkuCitwdWJsaWM6CisgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQorICAg
IHsKKyAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7CisgICAgfQorICAgIAorICAgIC8vIFJl
dHVybnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9y
IGdldFVpbnQzMigpLgorICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBt
X2hpZ2g7IH0KKworICAgIGRvdWJsZSBnZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkdmFu
Y2UoKSAvIChVSU5UX01BWCArIDEuMCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ2V0VWludDMy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgbV9oaWdoID0gKG1faGlnaCA8
PCAxNikgKyAobV9oaWdoID4+IDE2KTsKKyAgICAgICAgbV9oaWdoICs9IG1fbG93OworICAgICAg
ICBtX2xvdyArPSBtX2hpZ2g7CisgICAgICAgIHJldHVybiBtX2hpZ2g7CisgICAgfQorCisgICAg
dm9pZCBpbml0aWFsaXplU2VlZCh1bnNpZ25lZCBzZWVkKQorICAgIHsKKyAgICAgICAgbV9sb3cg
PSBzZWVkIF4gMHg0OTYxNkU0MjsKKyAgICAgICAgbV9oaWdoID0gc2VlZDsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBtX2xvdzsKKyAgICB1bnNpZ25lZCBtX2hpZ2g7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtSYW5kb21faApJbmRleDogU291cmNlL1dURi93dGYv
V2Vha1JhbmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxOCArNTEsMjkgQEAKICNkZWZpbmUgV2Vha1JhbmRvbV9oCiAKICNpbmNsdWRl
IDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCi1uYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXVEYgewogCiBj
bGFzcyBXZWFrUmFuZG9tIHsKLWZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFj
Y2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmluZyByZXBsYXkuCiBwdWJsaWM6CisgICAgV2Vh
a1JhbmRvbSgpCisgICAgeworICAgICAgICBpbml0aWFsaXplU2VlZChyYW5kb21OdW1iZXIoKSAq
IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKTsKKyAgICB9Cisg
ICAgCiAgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQogICAgIHsKICAgICAgICAgaW5pdGlh
bGl6ZVNlZWQoc2VlZCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5z
aWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7Cisg
ICAgICAgIG1faGlnaCA9IHNlZWQ7CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0aGUgc2VlZCBw
cm92aWRlZCB0aGF0IHlvdSd2ZSBuZXZlciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWludDMyKCkuCiAg
ICAgdW5zaWduZWQgc2VlZFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQogCkBAIC03
Niw2ICs4NywxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgfQog
CisgICAgdW5zaWduZWQgZ2V0VWludDMyKHVuc2lnbmVkIGxpbWl0KQorICAgIHsKKyAgICAgICAg
aWYgKGxpbWl0IDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdWludDY0X3Qg
Y3V0b2ZmID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihVSU5UX01BWCkgKyAxKSAvIGxpbWl0ICog
bGltaXQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlID0g
Z2V0VWludDMyKCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPj0gY3V0b2ZmKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlICUgbGltaXQ7CisgICAg
ICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgYWR2YW5jZSgpCiAgICAgewpA
QCAtODUsMTYgKzEwOSwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9oaWdoOwogICAg
IH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkKLSAgICB7Ci0gICAg
ICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7Ci0gICAgICAgIG1faGlnaCA9IHNlZWQ7Ci0g
ICAgfQotCiAgICAgdW5zaWduZWQgbV9sb3c7CiAgICAgdW5zaWduZWQgbV9oaWdoOwogfTsKIAot
fSAvLyBuYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXZWFr
UmFuZG9tOwogCiAjZW5kaWYgLy8gV2Vha1JhbmRvbV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261907</attachid>
            <date>2015-09-24 18:00:20 -0700</date>
            <delta_ts>2015-09-24 18:50:06 -0700</delta_ts>
            <desc>getter better</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87139</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEdDIHRvIHVzZSBhIG5ldyBXVEYg
YWJzdHJhY3Rpb24gZm9yIHBhcmFsbGVsaXNtIGNhbGxlZCBQYXJhbGxlbEhlbHBlclBvb2wuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBHQ1RocmVhZCBhbmQgYWxsIG9mIHRoZSBH
Q1BoYXNlIG1hY2hpbmVyeS4gVGhpcyBraWxscyBhIGxvdCBvZgorICAgICAgICBjb2RlIGFuZCBh
bHNvIGdpdmVzIG91ciBHQyBtYWdpY2FsIHRocmVhZCBzaGFyaW5nIHBvd2Vycy4gSWYgdHdvIEdD
cyBpbiB0d28gZGlmZmVyZW50IFZNcworICAgICAgICBmaXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRo
ZW4gdGhleSB3aWxsIGJvdGggZ2V0IGEgcmFuZG9tIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHNo
YXJlZCBHQworICAgICAgICB0aHJlYWRzLiBJZiBvbmUgR0MgaGFwcGVucyBiZWZvcmUgdGhlIG90
aGVyLCB0aGVuIGl0IHdpbGwgcHJvYmFibHkgZ2V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlCisgICAg
ICAgIHRocmVhZHMuIElmIGEgR0MgaGFwcGVucyB3aGlsZSBhbm90aGVyIFZNIGFscmVhZHkgc3Rh
cnRlZCBHQ2luZywgdGhlbiBpdCB3aWxsIHByb2JhYmx5IG5vdAorICAgICAgICBnZXQgYW55IGhl
bHBlciB0aHJlYWRzLiBUaGlzIGlzIHByb2JhYmx5IGZpbmUsIHNpbmNlIGluIG11bHRpLVZNIHNj
ZW5hcmlvcyB3ZSBoYXZlIG5vCisgICAgICAgIHJlYXNvbiB0byBvcHRpbWl6ZSBmb3IgYW55dGhp
bmcgb3RoZXIgdGhhbiB0b3RhbCB0aHJvdWdocHV0LgorCisgICAgICAgIFRoZSBHQyBoYXMgb25l
IHN0YXRpYyBoZWxwZXIgcG9vbC4gVGhpcyBwb29sIGlzIGF2YWlsYWJsZSB2aWEgSlNDOjpoZWFw
SGVscGVyUG9vbCgpLiBJdAorICAgICAgICB3b3VsZCBiZSBPSyBmb3Igb3RoZXIgcGFydHMgb2Yg
SlNDIHRvIHVzZSBpdCBpbiB0aGUgZnV0dXJlIGZvciBwYXJhbGxlbCB0YXNrcy4gRWFjaCBIZWFw
CisgICAgICAgIGluc3RhbmNlIGhhcyBhIGhlbHBlciBjbGllbnQgYXR0YWNoZWQgdG8gdGhlIHBv
b2wuCisKKyAgICAgICAgVGhlIG1hcmtpbmcgcGhhc2UgdGVsbHMgdGhlIFBhcmFsbGVsSGVscGVy
Q2xpZW50IHRvIGFzeW5jaHJvbm91c2x5IHJ1biBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgam9p
bnMgcGFyYWxsZWwgbWFya2luZyBhbmQgZmluaXNoZXMgb25jZSBtYXJraW5nIHJlYWNoZXMgdGVy
bWluYXRpb24uIEl0IHVzZXMgdGhlCisgICAgICAgIGNsaWVudC5zZXRGdW5jdGlvbigpIGlkaW9t
IHdoZXJlIHRoZSB0aHJlYWRzIHNoYXJlIHdvcmsgd2l0aCBlYWNoIG90aGVyIHVzaW5nIGEgc3Bl
Y2lhbGl6ZWQKKyAgICAgICAgd29ya2xpc3QuIFRoZSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgbm90
IGludm9sdmVkIGluIGRlY2lkaW5nIHdoZW4gdGhyZWFkcyBzaG91bGQgdGVybWluYXRlLgorCisg
ICAgICAgIFRoZSBjb3B5aW5nIHBoYXNlIHRlbGxzIHRoZSBQYXJhbGxlbEhlbHBlckNsaWVudCB0
byBydW4gYSBjb3B5aW5nIGZ1bmN0aW9uIGluIHBhcmFsbGVsLiBJdAorICAgICAgICB1c2VzIHRo
ZSBjbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKCkgaWRpb20uIFRoZSBjb3B5aW5nIGZ1bmN0
aW9uIGdldHMgd29yayBmcm9tIHRoZQorICAgICAgICBtX2Jsb2Nrc1RvQ29weSB3b3JrbGlzdCBp
bnNpZGUgSGVhcC4KKworICAgICAgICBUaGlzIHNob3VsZG4ndCBhZmZlY3QgcGVyZm9ybWFuY2Ug
b24gYmVuY2htYXJrcywgYnV0IGl0IHdpbGwgc3VyZSBoZWxwIGFwcHMgd2l0aCBhIGxvdCBvZgor
ICAgICAgICBWTSBpbnN0YW5jZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRl
cnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAq
IGhlYXAvR0NUaHJlYWQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvR0NUaHJlYWQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjpp
c1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpT
Qzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNldFZp
c2l0b3JzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkVmlzaXRDb3VudCk6CisgICAgICAg
IChKU0M6OkhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnRo
cmVhZEJ5dGVzQ29waWVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhcnROZXh0UGhhc2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjplbmRDdXJyZW50UGhhc2UpOiBEZWxldGVkLgor
ICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSGVhcEhlbHBlclBvb2wuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6aGVhcEhlbHBlclBvb2wpOgorICAgICAgICAqIGhlYXAv
SGVhcEhlbHBlclBvb2wuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKToKKyAgICAg
ICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAqIGppdC9C
aW5hcnlTd2l0Y2guaDoKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtSYW5kb20uaDogUmVtb3ZlZC4K
KwogMjAxNS0wOS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSBzcGVjaWFsIGNhc2UgY29kZSBmb3IgdGhlIG5vLXBhcmFsbGVsLUdDIGNhc2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MDIxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
Mjk0LDEwICsyOTQsMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0Z1
bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0FjdGl2aXR5Q2FsbGJhY2suY3Bw
CiAgICAgaGVhcC9HQ0xvZ2dpbmcuY3BwCi0gICAgaGVhcC9HQ1RocmVhZC5jcHAKICAgICBoZWFw
L0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhlYXAvSGVhcC5j
cHAKKyAgICBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAogICAgIGhlYXAvSGVhcFN0YXRpc3RpY3Mu
Y3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAgaGVhcC9IZWFwVmVyaWZpZXIuY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDIx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2ICs1NjksNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTdGFjay5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caGVhcFxIZWFwSGVscGVyUG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXEhlYXBTdGF0aXN0aWNzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcFRpbWVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
SGVhcFZlcmlmaWVyLmNwcCIgLz4KQEAgLTEzNTAsNiArMTM1MSw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVN0YWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXEhhbmRsZVR5cGVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxoZWFwXEhlYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcEhl
bHBlclBvb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcElubGlu
ZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcE9wZXJhdGlvbi5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwUm9vdFZpc2l0b3IuaCIg
Lz4KQEAgLTE4MDksNyArMTgxMSw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFdlYWtNYXBQcm90b3R5cGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcV2Vha1NldENvbnN0cnVjdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFdlYWtTZXRQcm90b3R5cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcV2Vha1JhbmRvbS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxXcml0ZUJhcnJpZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcV3JpdGVCYXJyaWVySW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cdG9vbHNcQ29kZVByb2ZpbGUuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjkxLDYgKzI5MSw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxIZWFwSGVscGVyUG9vbC5jcHAiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAg
PC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTdGF0aXN0
aWNzLmNwcCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
QEAgLTIyODgsNiArMjI5MSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhl
YXAuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcEhlbHBlclBvb2wuaCI+CisgICAgICA8
RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcElubGluZXMuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTMxNjcsOSArMzE3Myw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtHQ01hcC5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxXZWFrUmFuZG9tLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdyaXRl
QmFycmllci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNs
dWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDIxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDggQEAKIAkJMEYzMDBCNzgx
OEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdO
b2RlT3JpZ2luLmggKi87IH07CiAJCTBGMzAwQjdCMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3OTE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjMwMEI3QzE4QUIxQjE0MDBBNkQ3MkUg
LyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJ
bnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9OworCQkwRjMyQkQxMDFCQjM0RjE5MDA5
M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzMkJEMEUxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQ
b29sLmNwcCAqLzsgfTsKKwkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQ
b29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMy
QkQwRjFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuaCAqLzsgfTsKIAkJMEYzNEIx
NDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERG
R1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNl
S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
NEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLzsgfTsKIAkJMEYzOEIwMTEx
N0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyog
TExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKQEAgLTc3NSw3ICs3NzcsNiBAQAogCQkxNDE0NDhD
QjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0OENBMTNBMTc2RUMwMEY1QkExQSAvKiBN
YXJrZWRCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0OENDMTNB
MTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDE1MDEzMzE1NEJCMTNGMDA1RDhDOTggLyog
V2Vha1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0SW5saW5lcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0MjBCRTdCMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIwQkU3QTEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRv
bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMTM1OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpT
QmFzZS5jcHAgKi87IH07CiAJCTE0MjgwODIzMTA3RUMwMkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1
ODAyNTU1OTdEMDFGRjYwRjcgLyogRGVidWdnZXIuY3BwICovOyB9OwogCQkxNDI4MDgyRDEwN0VD
MDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNBNjJERkUwRTI4MjYyMzAwMDRGMzBEIC8qIENhbGxEYXRhLmNw
cCAqLzsgfTsKQEAgLTE2NjUsOCArMTY2Niw2IEBACiAJCUMyMjM5RDE3MTYyNjJCREQwMDVBQzVG
RCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3BwICov
OyB9OwogCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQw
MDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUMyMjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRv
cklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDMjIzOUQxQTE2MjYy
QkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNw
cCAqLzsgfTsKLQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNjE2MjYyQkRE
MDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlDMjI1NDk0MzE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyNTQ5
NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9yLmNwcCAqLzsgfTsKIAkJQzIyQjMxQjkx
NDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjQwMzA1MzE0QjQw
NEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovOyB9OwpAQCAtMjExOSw2ICsyMTE4LDgg
QEAKIAkJMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZU9yaWdpbi5oOyBwYXRoID0gZGZnL0RG
R05vZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCNzkxOEFC
MUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1Bo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdBMThBQjFCMTQwMEE2RDcyRSAvKiBE
RkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0lu
dGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwSGVscGVyUG9vbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzJCRDBGMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVs
cGVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSGVscGVyUG9v
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RB
NUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdVc2VLaW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVXNlS2luZC5oOyBwYXRoID0g
ZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYx
N0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRFbnRyeXBvaW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2MTYsNyArMjYxNyw2IEBACiAJCTE0MTQ0
OENBMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja1NldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEgLyogVGlueUJsb29tRmlsdGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlCbG9vbUZpbHRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE1MDEzMjE1NEJCMTNGMDA1RDhDOTggLyogV2Vha1Nl
dElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1NldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQyMEJFN0ExMEFBNkREQjAwRjQ1
NUQyIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDIxMzU5QTBBNjc3RjRG
MDBBODE5NUUgLyogSlNCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MjcxMTM4MEE0
NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MjlENzdCMEVEMjBE
NzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnRlcnByZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzUzNyw4
ICszNTM3LDYgQEAKIAkJQzIyMzlEMTIxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvcHlWaXNpdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTMxNjI2MkJERDAwNUFDNUZEIC8q
IENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvcHlWaXNp
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMjM5RDE0MTYyNjJCREQwMDVB
QzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29weVZpc2l0b3JJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2xvdFZpc2l0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29w
aWVkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29waWVk
U3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjREMzFFMDE2MUNENjk1
MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSGVhcFN0YXRpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDI1MSw4ICs0MjQ5LDYgQEAKIAkJCQkyQUFCQ0RFNjE4RUYyOTQyMDAwMDIwOTYgLyog
R0NMb2dnaW5nLmggKi8sCiAJCQkJMkEzNDNGNzQxOEExNzQ4QjAwMzlCMDg1IC8qIEdDU2VnbWVu
dGVkQXJyYXkuaCAqLywKIAkJCQkyQTM0M0Y3NzE4QTE3NDlEMDAzOUIwODUgLyogR0NTZWdtZW50
ZWRBcnJheUlubGluZXMuaCAqLywKLQkJCQlDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NU
aHJlYWQuY3BwICovLAotCQkJCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5o
ICovLAogCQkJCTE0MkUzMTJCMTM0RkYwQTYwMEFGQURCNSAvKiBIYW5kbGUuaCAqLywKIAkJCQlD
MjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxlQmxvY2suaCAqLywKIAkJCQlDMjgzMTkw
MTE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJbmxpbmVzLmggKi8sCkBAIC00MjYzLDYg
KzQyNTksOCBAQAogCQkJCTE0NkZBNUE4MTM3OEY2QjAwMDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5o
ICovLAogCQkJCTE0QkE3QTk1MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmNwcCAqLywKIAkJCQkx
NEJBN0E5NjEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5oICovLAorCQkJCTBGMzJCRDBFMUJCMzRG
MTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEYzMkJEMEYxQkIzNEYx
OTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggKi8sCiAJCQkJQzJEQTc3ODIxOEUyNTk5OTAw
NjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8sCiAJCQkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2
IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovLAogCQkJCTJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5
OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8sCkBAIC01MDkyLDcgKzUwOTAsNiBAQAogCQkJCUE3Q0Ez
QUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oICovLAogCQkJCUE3Q0EzQURGMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmNwcCAqLywKIAkJCQlBN0NBM0FFMDE3
REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oICovLAotCQkJCTE0MjBCRTdBMTBB
QTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAw
MzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJNzA5RkI4NjQxQUUzMzVD
NjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5oICovLAogCQkJCTcwOUZCODY1MUFFMzM1
QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCAqLywKQEAgLTYxNTUsNiArNjE1Miw3
IEBACiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVz
aGVkQXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzJCRDExMUJCMzRGMTkwMDkzQTU3RiAvKiBI
ZWFwSGVscGVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNE
OEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjlD
Qzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTMxLDcgKzY5MjksNiBAQAogCQkJCUE3Q0EzQUU0MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFr
TWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUVDMTdEQTUxNjgwMDY1
MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFB
RTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0MjBC
RTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGQTExNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwOUZCODZBMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA2Miw2ICs4MDU5LDcgQEAKIAkJCQkwRkY0Mjc0
MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNDI3NDMxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5jIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNDI3NEQxNThFQkZFNjAwNENCOUZGIC8qIHVkaXM4Nl9pdGFiX2hvbGRlci5jIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYzMkJEMTAxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQ
b29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1
ZGlzODZfc3luLWF0dC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDYxNThFQkU5MTAwNENC
OUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwuYyBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzQ3MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmMgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSAr
MzEsOSBAQAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9t
LmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIAog
I2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9H
Q1RocmVhZC5jcHAJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHQ1RocmVhZC5oIgot
Ci0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotR0NUaHJlYWQ6
OkdDVGhyZWFkKEhlYXAmIGhlYXAsIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gc2xvdFZp
c2l0b3IpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAgLCBtX2hlYXAoaGVhcCkKLSAgICAsIG1f
c2xvdFZpc2l0b3IoV1RGOjptb3ZlKHNsb3RWaXNpdG9yKSkKLXsKLX0KLQotVGhyZWFkSWRlbnRp
ZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQotewotICAgIEFTU0VSVChtX3RocmVhZElEKTsKLSAg
ICByZXR1cm4gbV90aHJlYWRJRDsKLX0KLQotdm9pZCBHQ1RocmVhZDo6aW5pdGlhbGl6ZVRocmVh
ZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17Ci0gICAgQVNTRVJUKCFtX3RocmVhZElE
KTsKLSAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Ci19Ci0KLVNsb3RWaXNpdG9yKiBHQ1RocmVh
ZDo6c2xvdFZpc2l0b3IoKQotewotICAgIEFTU0VSVChtX3Nsb3RWaXNpdG9yKTsKLSAgICByZXR1
cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKLX0KLQotR0NQaGFzZSBHQ1RocmVhZDo6d2FpdEZvck5l
eHRQaGFzZSgpCi17Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1faGVhcC5tX3Bo
YXNlTXV0ZXgpOwotICAgIG1faGVhcC5tX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUud2FpdChsb2Nr
LCBbdGhpc10geyByZXR1cm4gIW1faGVhcC5tX2djVGhyZWFkc1Nob3VsZFdhaXQ7IH0pOwotCi0g
ICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMtLTsKLSAgICBpZiAoIW1faGVhcC5t
X251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQotICAgICAgICBtX2hlYXAubV9hY3Rpdml0eUNvbmRp
dGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotCi0gICAgbV9oZWFwLm1fcGhhc2VDb25kaXRpb25W
YXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVybiBtX2hlYXAubV9jdXJyZW50UGhhc2Ug
IT0gTm9QaGFzZTsgfSk7Ci0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMrKzsK
LSAgICByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNlOwotfQotCi12b2lkIEdDVGhyZWFkOjpn
Y1RocmVhZE1haW4oKQotewotICAgIEdDUGhhc2UgY3VycmVudFBoYXNlOwotICAgIFdURjo6cmVn
aXN0ZXJHQ1RocmVhZCgpOwotICAgIC8vIFdhaXQgZm9yIHRoZSBtYWluIHRocmVhZCB0byBmaW5p
c2ggY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyB1cy4gVGhlIG1haW4gdGhyZWFkIGdyYWJzIHRo
aXMgbG9jayBiZWZvcmUgCi0gICAgLy8gY3JlYXRpbmcgdGhpcyB0aHJlYWQuIFdlIGFyZW4ndCBn
dWFyYW50ZWVkIHRvIGhhdmUgYSB2YWxpZCB0aHJlYWRJRCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQg
cmVsZWFzZXMgdGhpcyBsb2NrLgotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9oZWFwLm1fcGhhc2VNdXRleCk7Ci0gICAgfQotICAgIHsKLSAgICAgICAgUGFyYWxs
ZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX3Nsb3RWaXNpdG9yKTsKLSAgICAgICAgd2hpbGUgKChj
dXJyZW50UGhhc2UgPSB3YWl0Rm9yTmV4dFBoYXNlKCkpICE9IEV4aXQpIHsKLSAgICAgICAgICAg
IC8vIE5vdGU6IEVhY2ggcGhhc2UgaXMgcmVzcG9uc2libGUgZm9yIGl0cyBvd24gdGVybWluYXRp
b24gY29uZGl0aW9ucy4gVGhlIGNvbW1lbnRzIGJlbG93IGRlc2NyaWJlIAotICAgICAgICAgICAg
Ly8gaG93IGVhY2ggcGhhc2UgcmVhY2hlcyB0ZXJtaW5hdGlvbi4KLSAgICAgICAgICAgIHN3aXRj
aCAoY3VycmVudFBoYXNlKSB7Ci0gICAgICAgICAgICBjYXNlIE1hcms6Ci0gICAgICAgICAgICAg
ICAgbV9zbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWlu
KTsKLSAgICAgICAgICAgICAgICAvLyBHQ1RocmVhZHMgb25seSByZXR1cm4gZnJvbSBkcmFpbkZy
b21TaGFyZWQoKSBpZiB0aGUgbWFpbiB0aHJlYWQgc2V0cyB0aGUgbV9wYXJhbGxlbE1hcmtlcnNT
aG91bGRFeGl0IAotICAgICAgICAgICAgICAgIC8vIGZsYWcgaW4gdGhlIEdDVGhyZWFkU2hhcmVk
RGF0YS4gVGhlIG9ubHkgd2F5IHRoZSBtYWluIHRocmVhZCBzZXRzIHRoYXQgZmxhZyBpcyBpZiBp
dCByZWFsaXplcyAKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGFsbCBvZiB0aGUgdmFyaW91cyBz
dWJwaGFzZXMgaW4gSGVhcDo6bWFya1Jvb3RzKCkgaGF2ZSBiZWVuIGZ1bGx5IGZpbmlzaGVkIGFu
ZCB0aGVyZSBpcyAKLSAgICAgICAgICAgICAgICAvLyBubyBtb3JlIG1hcmtpbmcgd29yayB0byBk
byBhbmQgYWxsIG9mIHRoZSBHQ1RocmVhZHMgYXJlIGlkbGUsIG1lYW5pbmcgbm8gbW9yZSB3b3Jr
IGNhbiBiZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENvcHk6IHsKLSAgICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5VmlzaXRvcihtX2hl
YXApOwotICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9yLnN0YXJ0Q29weWluZygpOwotICAgICAg
ICAgICAgICAgIGNvcHlWaXNpdG9yLmNvcHlGcm9tU2hhcmVkKCk7Ci0gICAgICAgICAgICAgICAg
Ly8gV2Uga25vdyB3ZSdyZSBkb25lIGNvcHlpbmcgd2hlbiB3ZSByZXR1cm4gZnJvbSBjb3B5RnJv
bVNoYXJlZCgpIGJlY2F1c2Ugd2Ugd291bGQgCi0gICAgICAgICAgICAgICAgLy8gb25seSBkbyBz
byBpZiB0aGVyZSB3ZXJlIG5vIG1vcmUgY2h1bmtzIG9mIGNvcHlpbmcgd29yayBsZWZ0IHRvIGRv
LiBXaGVuIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIG1vcmUgY29weWluZyB3b3Jr
IHRvIGRvLCB0aGUgbWFpbiB0aHJlYWQgd2lsbCB3YWl0IGluIENvcGllZFNwYWNlOjpkb25lQ29w
eWluZygpIHVudGlsIAotICAgICAgICAgICAgICAgIC8vIGFsbCBvZiB0aGUgYmxvY2tzIHRoYXQg
dGhlIEdDVGhyZWFkcyBib3Jyb3dlZCBoYXZlIGJlZW4gcmV0dXJuZWQuIGRvbmVDb3B5aW5nKCkg
Ci0gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvdXIgYm9ycm93ZWQgQ29waWVkQmxvY2ssIGFs
bG93aW5nIHRoZSBjb3B5aW5nIHBoYXNlIHRvIGZpbmlzaC4KLSAgICAgICAgICAgICAgICBjb3B5
VmlzaXRvci5kb25lQ29weWluZygpOwotCi0gICAgICAgICAgICAgICAgV1RGOjpyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgTm9QaGFzZToKLSAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFeGl0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZv
aWQqIGRhdGEpCi17Ci0gICAgR0NUaHJlYWQqIHRocmVhZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFk
Kj4oZGF0YSk7Ci0gICAgdGhyZWFkLT5nY1RocmVhZE1haW4oKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9u
IDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR0NUaHJlYWRf
aAotI2RlZmluZSBHQ1RocmVhZF9oCi0KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBIZWFwOwotY2xh
c3MgU2xvdFZpc2l0b3I7Ci0KLWVudW0gR0NQaGFzZSB7Ci0gICAgTm9QaGFzZSwKLSAgICBNYXJr
LAotICAgIENvcHksCi0gICAgRXhpdAotfTsKLQotY2xhc3MgR0NUaHJlYWQgewotcHVibGljOgot
ICAgIEdDVGhyZWFkKEhlYXAmLCBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+KTsKLQotICAg
IFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOwotICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFk
SUQoKTsKLSAgICB2b2lkIGluaXRpYWxpemVUaHJlYWRJRChUaHJlYWRJZGVudGlmaWVyKTsKLQot
ICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqKTsKLQotcHJpdmF0ZToKLSAg
ICB2b2lkIGdjVGhyZWFkTWFpbigpOwotICAgIEdDUGhhc2Ugd2FpdEZvck5leHRQaGFzZSgpOwot
Ci0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElEOwotICAgIEhlYXAmIG1faGVhcDsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1fc2xvdFZpc2l0b3I7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMDksIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NJ
bmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVhcEhlbHBlclBvb2wu
aCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZp
c2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgpAQCAtMzM2LDcgKzMzNyw2IEBA
IEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fZGVwcmVjYXRl
ZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNoaW5lVGhyZWFkcyh0aGlzKQogICAgICwg
bV9zbG90VmlzaXRvcigqdGhpcykKLSAgICAsIG1fY29weVZpc2l0b3IoKnRoaXMpCiAgICAgLCBt
X2hhbmRsZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQogICAgICwgbV93
cml0ZUJhcnJpZXJCdWZmZXIoMjU2KQpAQCAtMzU2LDIyICszNTYsOCBAQCBIZWFwOjpIZWFwKFZN
KiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNFKENGKQogICAgICwgbV9kZWxheWVkUmVs
ZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKKyAgICAsIG1faGVscGVyQ2xpZW50KCZoZWFw
SGVscGVyUG9vbCgpKQogewotICAgIHsKLSAgICAgICAgLy8gR3JhYiB0aGUgbG9jayBzbyB0aGUg
bmV3IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGluaXRpYWxpemVkIGJlZm9yZSB0aGV5IHN0
YXJ0IHJ1bm5pbmcuCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3BoYXNl
TXV0ZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0aW9uczo6bnVtYmVy
T2ZHQ01hcmtlcnMoKTsgKytpKSB7Ci0gICAgICAgICAgICBtX251bWJlck9mQWN0aXZlR0NUaHJl
YWRzKys7Ci0gICAgICAgICAgICBHQ1RocmVhZCogbmV3VGhyZWFkID0gbmV3IEdDVGhyZWFkKCp0
aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9yPigqdGhpcykpOwotICAgICAgICAgICAg
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChHQ1RocmVhZDo6Z2NUaHJl
YWRTdGFydEZ1bmMsIG5ld1RocmVhZCwgIkphdmFTY3JpcHRDb3JlOjpNYXJraW5nIik7Ci0gICAg
ICAgICAgICBuZXdUaHJlYWQtPmluaXRpYWxpemVUaHJlYWRJRCh0aHJlYWRJRCk7Ci0gICAgICAg
ICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFkKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHRoZSBHQ1RocmVhZHMgdG8gZ2V0IHRvIHRoZSByaWdo
dCBwbGFjZS4KLSAgICAgICAgbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywg
W3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9KTsKLSAgICB9Ci0g
ICAgCiAgICAgbV9zdG9yYWdlU3BhY2UuaW5pdCgpOwogICAgIGlmIChPcHRpb25zOjp2ZXJpZnlI
ZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmll
cj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9u
KCkpOwpAQCAtMzgxLDIxICszNjcsNiBAQCBIZWFwOjp+SGVhcCgpCiB7CiAgICAgZm9yIChXZWFr
QmxvY2sqIGJsb2NrIDogbV9sb2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MpCiAgICAgICAgIFdlYWtC
bG9jazo6ZGVzdHJveShibG9jayk7Ci0KLSAgICAvLyBEZXN0cm95IG91ciBtYXJraW5nIHRocmVh
ZHMuCi0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbWFya2luZ0xvY2sobV9t
YXJraW5nTXV0ZXgpOwotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1f
cGhhc2VNdXRleCk7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsK
LSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9n
Y1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAgICAgIG1fY3VycmVudFBoYXNlID0gRXhp
dDsKLSAgICAgICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotICAgIH0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24obV9nY1RocmVhZHNbaV0tPnRocmVhZElE
KCkpOwotICAgICAgICBkZWxldGUgbV9nY1RocmVhZHNbaV07Ci0gICAgfQogfQogCiBib29sIEhl
YXA6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQpAQCAtNTcwLDEyICs1NDEsMzkgQEAgdm9p
ZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLAogCiAgICAgaWYgKG1fb3BlcmF0
aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgbV9vcGFxdWVSb290cy5j
bGVhcigpOwotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJr
aW5nTXV0ZXgpOwotICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsK
LSAgICAgICAgc3RhcnROZXh0UGhhc2UoTWFyayk7Ci0gICAgfQorCisgICAgbV9zaG91bGRIYXNo
Q29ucyA9IG1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpOworCisgICAgbV9w
YXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7CisKKyAgICBtX2hlbHBlckNsaWVudC5z
ZXRGdW5jdGlvbigKKyAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgIFNsb3RWaXNpdG9y
KiBzbG90VmlzaXRvcjsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAo
bV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBuZXdWaXNpdG9yID0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKTsK
KyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3IgPSBuZXdWaXNpdG9yLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzLmFwcGVuZChXVEY6Om1vdmUo
bmV3VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFBhcmFs
bGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2RlRW5hYmxlcigqc2xvdFZpc2l0b3IpOworICAgICAg
ICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRTdGFydE1hcmtpbmcoKTsKKyAgICAgICAgICAgICAg
ICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIG1f
YXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSk7CisKICAgICBtX3Nsb3RWaXNpdG9yLmRpZFN0YXJ0TWFya2lu
ZygpOworICAgIAogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IobV9zbG90Vmlz
aXRvcik7CiAKICAgICB7CkBAIC02MDMsOCArNjAxLDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMo
ZG91YmxlIGdjU3RhcnRUaW1lLAogICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQg
PSB0cnVlOwogICAgICAgICBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsK
ICAgICB9Ci0gICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE1hcmspOwotICAgIGVuZEN1cnJl
bnRQaGFzZSgpOworICAgIG1faGVscGVyQ2xpZW50LmZpbmlzaCgpOwogICAgIHVwZGF0ZU9iamVj
dENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgcmVzZXRWaXNpdG9ycygpOwogfQpAQCAtNjMzLDE1
ICs2MzAsMTUgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2luZ1N0b3JlcygpCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBtX2NvcHlJbmRleCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHN0YXJ0TmV4dFBoYXNlKENvcHkpOwotICAgICAgICAKLSAgICAgICAgbV9jb3B5VmlzaXRv
ci5zdGFydENvcHlpbmcoKTsKLSAgICAgICAgbV9jb3B5VmlzaXRvci5jb3B5RnJvbVNoYXJlZCgp
OwotICAgICAgICBtX2NvcHlWaXNpdG9yLmRvbmVDb3B5aW5nKCk7CiAKLSAgICAgICAgQVNTRVJU
KG1fY3VycmVudFBoYXNlID09IENvcHkpOwotICAgICAgICBlbmRDdXJyZW50UGhhc2UoKTsKKyAg
ICAgICAgbV9oZWxwZXJDbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKAorICAgICAgICAgICAg
W3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBDb3B5VmlzaXRvciBjb3B5VmlzaXRvcigqdGhp
cyk7CisgICAgICAgICAgICAgICAgY29weVZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7CisgICAgICAg
ICAgICAgICAgY29weVZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKKyAgICAgICAgICAgICAgICBj
b3B5VmlzaXRvci5kb25lQ29weWluZygpOworICAgICAgICAgICAgICAgIFdURjo6cmVsZWFzZUZh
c3RNYWxsb2NGcmVlTWVtb3J5Rm9yVGhpc1RocmVhZCgpOworICAgICAgICAgICAgfSk7CiAgICAg
fQogICAgIAogICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVDb3B5aW5nKCk7CkBAIC04NzAsOCArODY3
LDggQEAgdm9pZCBIZWFwOjpyZXNldFZpc2l0b3JzKCkKIHsKICAgICBtX3Nsb3RWaXNpdG9yLnJl
c2V0KCk7CiAKLSAgICBmb3IgKEdDVGhyZWFkKiB0aHJlYWQgOiBtX2djVGhyZWFkcykKLSAgICAg
ICAgdGhyZWFkLT5zbG90VmlzaXRvcigpLT5yZXNldCgpOworICAgIGZvciAoYXV0byYgcGFyYWxs
ZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgcGFyYWxsZWxWaXNp
dG9yLT5yZXNldCgpOwogCiAgICAgQVNTRVJUKG1fc2hhcmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7
CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5yZW1vdmVBbGwoKTsKQEAgLTE1MzIsNDUg
KzE1MjksMjUgQEAgYm9vbCBIZWFwOjpzd2VlcE5leHRMb2dpY2FsbHlFbXB0eVdlYWtCbAogc2l6
ZV90IEhlYXA6OnRocmVhZFZpc2l0Q291bnQoKQogeyAgICAgICAKICAgICB1bnNpZ25lZCBsb25n
IHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNp
emUoKTsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9y
KCktPnZpc2l0Q291bnQoKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFsbGVsVmlzaXRvciA6IG1fcGFy
YWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJlc3VsdCArPSBwYXJhbGxlbFZpc2l0b3ItPnZp
c2l0Q291bnQoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzaXplX3QgSGVhcDo6dGhyZWFk
Qnl0ZXNWaXNpdGVkKCkKIHsgICAgICAgCiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICBy
ZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzVmlzaXRlZCgpOwor
ICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9ycykK
KyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlzaXRvci0+Ynl0ZXNWaXNpdGVkKCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogc2l6ZV90IEhlYXA6OnRocmVhZEJ5dGVzQ29waWVkKCkKIHsg
ICAgICAgCiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVh
ZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzQ29waWVkKCk7CisgICAgZm9yIChhdXRvJiBwYXJh
bGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICByZXN1bHQgKz0g
cGFyYWxsZWxWaXNpdG9yLT5ieXRlc0NvcGllZCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgSGVhcDo6c3RhcnROZXh0UGhhc2UoR0NQaGFzZSBwaGFzZSkKLXsKLSAgICBzdGQ6Omxv
Y2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgIEFTU0VSVCghbV9nY1RocmVh
ZHNTaG91bGRXYWl0KTsKLSAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTm9QaGFzZSk7Ci0g
ICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gdHJ1ZTsKLSAgICBtX2N1cnJlbnRQaGFzZSA9IHBo
YXNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLX0KLQotdm9p
ZCBIZWFwOjplbmRDdXJyZW50UGhhc2UoKQotewotICAgIEFTU0VSVChtX2djVGhyZWFkc1Nob3Vs
ZFdhaXQpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwot
ICAgIG1fY3VycmVudFBoYXNlID0gTm9QaGFzZTsKLSAgICBtX2djVGhyZWFkc1Nob3VsZFdhaXQg
PSBmYWxzZTsKLSAgICBtX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAg
bV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFt
X251bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKICNpbmNsdWRlICJDb3B5VmlzaXRvci5o
IgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmgiCi0jaW5jbHVkZSAiR0NUaHJl
YWQuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5oIgog
I2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKQEAgLTQ2LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQb29s
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNDcsOCArMzQ3LDYgQEAgcHJpdmF0ZToKICAg
ICBzaXplX3QgdGhyZWFkRHVwU3RyaW5ncygpOwogCiAgICAgdm9pZCBnZXROZXh0QmxvY2tzVG9D
b3B5KHNpemVfdCYsIHNpemVfdCYpOwotICAgIHZvaWQgc3RhcnROZXh0UGhhc2UoR0NQaGFzZSk7
Ci0gICAgdm9pZCBlbmRDdXJyZW50UGhhc2UoKTsKIAogICAgIGNvbnN0IEhlYXBUeXBlIG1faGVh
cFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6ZTsKQEAgLTM4Myw3ICszODEsMTQgQEAg
cHJpdmF0ZToKICAgICBNYWNoaW5lVGhyZWFkcyBtX21hY2hpbmVUaHJlYWRzOwogICAgIAogICAg
IFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAgQ29weVZpc2l0b3IgbV9jb3B5VmlzaXRv
cjsKKworICAgIC8vIFdlIHBvb2wgdGhlIHNsb3QgdmlzaXRvcnMgdXNlZCBieSBwYXJhbGxlbCBt
YXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8KKyAgICAvLyBlbnVtZXJh
dGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8gaGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21h
bGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCisgICAgLy8gb25lIEdDIHRvIHRoZSBuZXh0LiBHQyBt
YXJraW5nIHRocmVhZHMgY2xhaW0gdGhlc2UgYXQgdGhlIHN0YXJ0IG9mIG1hcmtpbmcsIGFuZCBy
ZXR1cm4KKyAgICAvLyB0aGVtIGF0IHRoZSBlbmQuCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxTbG90VmlzaXRvcj4+IG1fcGFyYWxsZWxTbG90VmlzaXRvcnM7CisgICAgVmVjdG9yPFNsb3RW
aXNpdG9yKj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9yczsKKyAgICBMb2NrIG1fcGFy
YWxsZWxTbG90VmlzaXRvckxvY2s7CiAKICAgICBIYW5kbGVTZXQgbV9oYW5kbGVTZXQ7CiAgICAg
SGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKQEAgLTQyMiw4ICs0MjcsNiBAQCBwcml2YXRlOgog
CiAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zIHsgZmFsc2UgfTsKIAotICAgIFZlY3RvcjxHQ1Ro
cmVhZCo+IG1fZ2NUaHJlYWRzOwotCiAgICAgTG9jayBtX21hcmtpbmdNdXRleDsKICAgICBDb25k
aXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7CiAgICAgTWFya1N0YWNrQXJyYXkgbV9z
aGFyZWRNYXJrU3RhY2s7CkBAIC00MzksMTUgKzQ0MiwxMCBAQCBwcml2YXRlOgogICAgIHNpemVf
dCBtX2NvcHlJbmRleCB7IDAgfTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFn
bWVudExlbmd0aCA9IDMyOwogCi0gICAgTG9jayBtX3BoYXNlTXV0ZXg7Ci0gICAgQ29uZGl0aW9u
IG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZTsKLSAgICBDb25kaXRpb24gbV9hY3Rpdml0eUNvbmRp
dGlvblZhcmlhYmxlOwotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMgeyAw
IH07Ci0gICAgYm9vbCBtX2djVGhyZWFkc1Nob3VsZFdhaXQgeyBmYWxzZSB9OwotICAgIEdDUGhh
c2UgbV9jdXJyZW50UGhhc2UgeyBOb1BoYXNlIH07Ci0KICAgICBMaXN0YWJsZUhhbmRsZXI8V2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVyczsKICAg
ICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZpbmFsaXplcj46Okxpc3QgbV91bmNvbmRp
dGlvbmFsRmluYWxpemVyczsKKworICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50IG1faGVscGVyQ2xp
ZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBIZWxwZXJQb29sLmgiCisKKyNp
bmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitQYXJhbGxlbEhlbHBlclBvb2wmIGhlYXBIZWxwZXJQb29sKCkKK3sKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUhlbHBlclBvb2xPbmNlRmxhZzsKKyAgICBzdGF0aWMgUGFy
YWxsZWxIZWxwZXJQb29sKiBoZWxwZXJQb29sOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAg
ICBpbml0aWFsaXplSGVscGVyUG9vbE9uY2VGbGFnLAorICAgICAgICBbXSB7CisgICAgICAgICAg
ICBoZWxwZXJQb29sID0gbmV3IFBhcmFsbGVsSGVscGVyUG9vbCgpOworICAgICAgICAgICAgaGVs
cGVyUG9vbC0+ZW5zdXJlVGhyZWFkcyhPcHRpb25zOjpudW1iZXJPZkdDTWFya2VycygpIC0gMSk7
CisgICAgICAgIH0pOworICAgIHJldHVybiAqaGVscGVyUG9vbDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29s
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBv
b2wuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxw
ZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhlYXBIZWxwZXJQb29sX2gK
KyNkZWZpbmUgSGVhcEhlbHBlclBvb2xfaAorCisjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSGVscGVy
UG9vbC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworUGFyYWxsZWxIZWxwZXJQb29sJiBoZWFwSGVs
cGVyUG9vbCgpOworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEhlYXBIZWxwZXJQ
b29sX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShy
ZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDggQEAgdm9pZCBNYXJrU3RhY2tBcnJh
eTo6c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2l6
ZV90IG51bWJlck9mQ2VsbHNUb1N0ZWFsID0gKG90aGVyLnNpemUoKSArIGlkbGVUaHJlYWRDb3Vu
dCAtIDEpIC8gaWRsZVRocmVhZENvdW50OyAvLyBSb3VuZCB1cCB0byBzdGVhbCAxIC8gMS4KKyAg
ICAvLyBTdGVhbCBjZWlsKG90aGVyLnNpemUoKSAvIGlkbGVUaHJlYWRDb3VudCkgdGhpbmdzLgor
ICAgIHNpemVfdCBudW1iZXJPZkNlbGxzVG9TdGVhbCA9IChvdGhlci5zaXplKCkgKyBpZGxlVGhy
ZWFkQ291bnQgLSAxKSAvIGlkbGVUaHJlYWRDb3VudDsKICAgICB3aGlsZSAobnVtYmVyT2ZDZWxs
c1RvU3RlYWwtLSA+IDAgJiYgb3RoZXIuY2FuUmVtb3ZlTGFzdCgpKQogICAgICAgICBhcHBlbmQo
b3RoZXIucmVtb3ZlTGFzdCgpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBA
QAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2Uu
aCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKLSNpbmNsdWRlICJHQ1RocmVhZC5o
IgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5o
IgogI2luY2x1ZGUgIlZNLmgiCkBAIC02NywxMCArNjYsNyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpk
aWRTdGFydE1hcmtpbmcoKQogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9
PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgp
KTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KIAotICAgIG1faGVhcC5tX3Nob3VsZEhh
c2hDb25zID0gbV9oZWFwLm1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29ucygpOwog
ICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29uczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFwLm1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX2hlYXAubV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPm1fc2hvdWxkSGFzaENv
bnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29uczsKIH0KIAogdm9pZCBTbG90VmlzaXRvcjo6cmVz
ZXQoKQpAQCAtMjIxLDcgKzIxNyw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluRnJvbVNoYXJl
ZChTaGFyZWQKICAgICAgICAgICAgICAgICBpZiAobV9oZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hv
dWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAKKwogICAgICAgICAgICAgbV9zdGFjay5zdGVhbFNvbWVDZWxsc0Zyb20oCiAgICAg
ICAgICAgICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0YWNrLCBtX2hlYXAubV9udW1iZXJPZldh
aXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAgICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3Rp
dmVQYXJhbGxlbE1hcmtlcnMrKzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmlu
YXJ5U3dpdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5h
cnlTd2l0Y2guaAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9CaW5hcnlTd2l0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5j
bHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAi
V2Vha1JhbmRvbS5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2FjaGUuaAko
cmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMSBAQAogI2luY2x1ZGUgIlNvdXJj
ZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25t
ZW50LmgiCi0jaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFr
UmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDYgQEAKICNpbmNsdWRlICJUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRl
ICJXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3
dGYvRGF0ZU1hdGguaD4KQEAgLTY2LDYgKzY1LDcgQEAKICNpbmNsdWRlIDx3dGYvU3RhY2tCb3Vu
ZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogI2luY2x1
ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3ltYm9sUmVnaXN0
cnkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElhbiBDLiBCdWxsYXJkCi0gKiAKLSAqIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
Ci0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbgotICogZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29m
dHdhcmUgd2l0aG91dAotICogcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp
b24gdGhlIHJpZ2h0cyB0byB1c2UsCi0gKiBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk
aXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAotICogY29waWVzIG9mIHRoZSBTb2Z0
d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBm
dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZwotICogY29uZGl0aW9u
czoKLSAqIAotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv
biBub3RpY2Ugc2hhbGwgYmUKLSAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp
YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICogCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJP
VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUwot
ICogT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQKLSAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1Ig
Q09QWVJJR0hUCi0gKiBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S
IE9USEVSIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU
T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ
T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICogT1RIRVIgREVBTElOR1MgSU4g
VEhFIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgV2Vha1JhbmRvbV9oCi0jZGVmaW5lIFdlYWtS
YW5kb21faAotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgV2Vha1JhbmRvbSB7Ci1mcmllbmQgY2xh
c3MgSlNHbG9iYWxPYmplY3Q7IC8vIEZvciBhY2Nlc3MgdG8gaW5pdGlhbGl6ZVNlZWQoKSBkdXJp
bmcgcmVwbGF5LgotcHVibGljOgotICAgIFdlYWtSYW5kb20odW5zaWduZWQgc2VlZCkKLSAgICB7
Ci0gICAgICAgIGluaXRpYWxpemVTZWVkKHNlZWQpOwotICAgIH0KLSAgICAKLSAgICAvLyBSZXR1
cm5zIHRoZSBzZWVkIHByb3ZpZGVkIHRoYXQgeW91J3ZlIG5ldmVyIGNhbGxlZCBnZXQoKSBvciBn
ZXRVaW50MzIoKS4KLSAgICB1bnNpZ25lZCBzZWVkVW5zYWZlKCkgY29uc3QgeyByZXR1cm4gbV9o
aWdoOyB9Ci0KLSAgICBkb3VibGUgZ2V0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZHZhbmNl
KCkgLyAoVUlOVF9NQVggKyAxLjApOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGdldFVpbnQzMigp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAg
ICB1bnNpZ25lZCBhZHZhbmNlKCkKLSAgICB7Ci0gICAgICAgIG1faGlnaCA9IChtX2hpZ2ggPDwg
MTYpICsgKG1faGlnaCA+PiAxNik7Ci0gICAgICAgIG1faGlnaCArPSBtX2xvdzsKLSAgICAgICAg
bV9sb3cgKz0gbV9oaWdoOwotICAgICAgICByZXR1cm4gbV9oaWdoOwotICAgIH0KLQotICAgIHZv
aWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkKLSAgICB7Ci0gICAgICAgIG1fbG93ID0g
c2VlZCBeIDB4NDk2MTZFNDI7Ci0gICAgICAgIG1faGlnaCA9IHNlZWQ7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbV9sb3c7Ci0gICAgdW5zaWduZWQgbV9oaWdoOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCi0KLSNlbmRpZiAvLyBXZWFrUmFuZG9tX2gKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTAyMTgp
CisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgdHdvIG1ham9yIHRoaW5ncyB0byBXVEY6IFdl
YWtSYW5kb20gYW5kIFBhcmFsbGVsSGVscGVyUG9vbC4gV2Vha1JhbmRvbSB3YXMKKyAgICAgICAg
YWxyZWFkeSBpbiBKU0M7IHdlJ3JlIGp1c3QgaG9pc3RpbmcgaXQgaW50byBXVEYuIEl0J3MganVz
dCBhIHdlYWsgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAgdGhhdCdzIHN1aXRhYmxl
IGZvciBwbGFjZXMgd2hlcmUgeW91IG5lZWQganVzdCBhIHRpbnkgYml0IG9mIHJhbmRvbW5lc3Mu
CisKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJQb29sIGlzIGEgbmV3IEFQSSB0aGF0IHNpbXBsaWZp
ZXMgZGF0YS1wYXJhbGxlbCBhbGdvcml0aG1zIGxpa2UgdGhlIEpTQyBHQy4KKyAgICAgICAgSW4g
YSBkYXRhLXBhcmFsbGVsIGFsZ29yaXRobSwgd2Ugd2FudCB0byBydW4gb25lIHRhc2sgb24gYXMg
bWFueSBjb3JlcyBhcyBwb3NzaWJsZSBhbmQgbGV0CisgICAgICAgIHRoZSB0YXNrIHdvcnJ5IGFi
b3V0IHdoaWNoIHN1YnNldCBvZiB0aGUgaW5wdXQgZGF0YSB0byB3b3JrIG9uLiBJbiBzb21lIGNh
c2VzLCB0aGUKKyAgICAgICAgYWxnb3JpdGhtIHdpbGwgbm90IG5lZWQgdG8gZG8gYW55IGxvYWQg
YmFsYW5jaW5nIC0gYW5kIGlmIGxvYWQgYmFsYW5jaW5nIGlzIHJlcXVpcmVkLCBpdCdzCisgICAg
ICAgIHVwIHRvIHRoZSB1c2VyLiBUaGlzIGlzIGFwcHJvcHJpYXRlIGluIGNvbnRleHRzIHdoZXJl
IHRoZSBsb2FkIGJhbGFuY2luZyBuZWVkcyB0byBiZQorICAgICAgICBjdXN0b20tdHVuZWQgZm9y
IHBlcmZvcm1hbmNlLCBsaWtlIHRoZSBHQydzIG1hcmtpbmcgcGhhc2UuCisKKyAgICAgICAgVGhp
cyBuZXcgQVBJIGhhcyB0aHJlZSBjb25jZXB0czogdGFzaywgY2xpZW50LCBhbmQgcG9vbC4gQSB0
YXNrIGlzIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgb2JqZWN0IHdpdGggYSBydW4oKSBt
ZXRob2QsIHdoaWNoIG1heSBiZSBydW4gaW4gcGFyYWxsZWwuIEl0IGlzIHVzdWFsbHkgdXNlZCB0
byB3cmFwIGEKKyAgICAgICAgZnVuY3Rvci4gQSBwb29sIGlzIGEgcG9vbCBvZiB0aHJlYWRzIHRo
YXQgY2FuIHJ1biB0aGluZ3MuIEEgY2xpZW50IGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEKKyAgICAg
ICAgdGFzay4gQSBjbGllbnQgY2FuIGhhdmUgemVybyBvciBvbmUgdGFza3MuIEEgY2xpZW50IG11
c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIGEgcG9vbC4gV2hlbiBhCisgICAgICAgIGNsaWVudCBoYXMg
YSB0YXNrLCB0aGUgcG9vbCdzIHRocmVhZHMgbWF5IGNob29zZSB0byBydW4gaXQuIElmIGEgdGhy
ZWFkIHN0YXJ0cyBydW5uaW5nIGEKKyAgICAgICAgdGFzaywgaXQgd2lsbCBydW4gaXQgdG8gY29t
cGxldGlvbi4gV2hlbiB0aGUgdGFzayByZXR1cm5zIG9uIGFueSB0aHJlYWQsIHRoZSBjbGllbnQg
dGFrZXMKKyAgICAgICAgaXQgdG8gbWVhbiB0aGF0IHRoZSB0YXNrIHNob3VsZCBiZSByZW1vdmVk
LiBUaGF0IG1lYW5zIHRoYXQgYW55IGN1cnJlbnRseSBydW5uaW5nIGluc3RhbmNlcworICAgICAg
ICBvZiB0aGUgdGFzayB3aWxsIGZpbmlzaCBidXQgbm8gbmV3IHRocmVhZHMgd2lsbCBhdHRlbXB0
IHRvIHJ1biB0aGUgdGFzay4gWW91IGNhbiBlYXNpbHkgYXNrCisgICAgICAgIGEgY2xpZW50IHRv
IHdhaXQgdW50aWwgYSB0YXNrIGZpbmlzaGVzLiBZb3UgY2FuIGFsc28gZWFzaWx5IGFzayBhIGNs
aWVudCB0byBydW4gYSB0YXNrIG9uCisgICAgICAgIHRoZSBjdXJyZW50IHRocmVhZCBpbiBhZGRp
dGlvbiB0byBwb3NzaWJseSBzb21lIGhlbHBlciB0aHJlYWRzIGZyb20gdGhlIHBvb2wuCisKKyAg
ICAgICAgRm9yIHNvbWUgZGF0YS1wYXJhbGxlbCBhbGdvcml0aG1zLCBwcm9ncmFtbWluZyB3aXRo
IFBhcmFsbGVsSGVscGVyUG9vbCBpcyBhcyBlYXN5IGFzOgorCisgICAgICAgIGNsaWVudC5ydW5G
dW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBbPV0gKCkgeworICAgICAgICAgICAgICAg
IGRvIHRoaW5nczsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIE5vdGUgdGhhdCB5b3UgY2Fu
bm90IHRlbGwgYWhlYWQgb2YgdGltZSBob3cgbWFueSB0aHJlYWRzIHdpbGwgam9pbiB0byBoZWxw
IHRoZSB0YXNrLgorICAgICAgICBUaHJlYWRzIG1heSBiZWNvbWUgYXZhaWxhYmxlIGFmdGVyIHRo
ZSB0YXNrIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgcnVubmluZy4gVGhvc2UgdGhyZWFkcyBtYXkKKyAg
ICAgICAgam9pbiBhZnRlciB0aGUgb3RoZXIgdGhyZWFkcyBoYXZlIGFscmVhZHkgc3RhcnRlZC4g
aXQncyBub3QgYWR2aXNhYmxlIHRvIG1ha2UgYWxnb3JpdGhtaWMKKyAgICAgICAgZGVjaXNpb25z
IGJhc2VkIG9uIGNsaWVudC5udW1iZXJPZkFjdGl2ZVRocmVhZHMoKSwgc2luY2UgdGhhdCBudW1i
ZXIgbWF5IGNoYW5nZS4gVXN1YWxseQorICAgICAgICB0aGUgYmVzdCB3YXkgdG8gdXNlIFBhcmFs
bGVsSGVscGVyUG9vbCBpcyB3aXRoIGFuIGFsZ29yaXRobSB0aGF0IGhhcyBpdHMgb3duIGN1c3Rv
bQorICAgICAgICB3b3JrbGlzdC4gQW4gZXhhbXBsZSBvZiBhIHZlcnkgc2ltcGxlIGN1c3RvbSB3
b3JrbGlzdCBpcyB0aGUgb25lIGluIHRoZSBKU0MgR0MncyBjb3B5aW5nCisgICAgICAgIHBoYXNl
IC0gaXQncyBqdXN0IGEgVmVjdG9yIGFuZCBhbiBpbmRleCB0aGF0IGluZGljYXRlcyB0aGUgbmV4
dCBzZXQgb2YgZWxlbWVudHMgdG8gcHJvY2Vzcy4KKworICAgICAgICBUaGlzIG5ldyBBUEkgd2Fz
IGluaXRpYWxseSBkZXNpZ25lZCB0byBzaW1wbGlmeSBob3cgR0NUaHJlYWQgd29ya3MsIGJ5IHJl
cGxhY2luZyBQaGFzZSB3aXRoCisgICAgICAgIGEgY2FsbGJhY2sgdGhhdCBjb250YWlucyB0aGUg
cGhhc2UncyB3b3JrbG9hZC4gSSB0aGVuIHJlYWxpemVkIHRoYXQgd2l0aCBhIGZldyB0d2Vha3Ms
IEkKKyAgICAgICAgY291bGQgbWFrZSB0aGlzIHNvbWV3aGF0IGdlbmVyYWwgZW5vdWdoIHRoYXQg
aXQgbWlnaHQgYmVjb21lIGludGVyZXN0aW5nIG91dHNpZGUgR0MuIEkgYWxzbworICAgICAgICBy
ZWFsaXplZCB0aGF0IEkgY291bGQgdXNlIHRoaXMgdG8gZW5hYmxlIHRocmVhZCBzaGFyaW5nLiBT
bywgYWx0aG91Z2ggdGhlIEFQSSBpcyBraW5kYQorICAgICAgICBxdWlya3ksIGl0J3MgZ3JvdW5k
ZWQgaW4gdGhlIHJlYWxpdHkgb2YgaG93IHRoZSBKU0MgR0MgZG9lcyBwYXJhbGxlbGlzbS4KKwor
ICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qOgorICAgICAgICAqIFdURi52Y3hwcm9q
L1dURi52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QYXJh
bGxlbEhlbHBlclBvb2wuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJD
bGllbnQ6OlBhcmFsbGVsSGVscGVyQ2xpZW50KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxw
ZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaWVudCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
SGVscGVyQ2xpZW50OjpzZXRUYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGll
bnQ6OmZpbmlzaCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVI
ZWxwaW5nKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBh
cmFsbGVsKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayk6
CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpQYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAo
V1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6On5QYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAo
V1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmFkZFRocmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJh
bGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhl
bHBlclBvb2w6OmRvU29tZUhlbHBpbmcpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBv
b2w6OmRpZE1ha2VXb3JrQXZhaWxhYmxlKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQ
b29sOjpoZWxwZXJUaHJlYWRCb2R5KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29s
OjpoYXNDbGllbnRXaXRoVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6
Z2V0Q2xpZW50V2l0aFRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6Ondh
aXRGb3JDbGllbnRXaXRoVGFzayk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJUYXNrOjpQYXJhbGxlbEhlbHBl
clRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclRhc2s6On5QYXJhbGxlbEhlbHBl
clRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yOjpQYXJhbGxl
bEhlbHBlclRhc2tGdW5jdG9yKToKKyAgICAgICAgKFdURjo6Y3JlYXRlUGFyYWxsZWxIZWxwZXJU
YXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldEZ1bmN0aW9uKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1bkZ1bmN0aW9uSW5QYXJhbGxl
bCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpwb29sKToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6Om51bWJlck9mQWN0aXZlVGhyZWFkcyk6CisgICAg
ICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6bnVtYmVyT2ZUaHJlYWRzKToKKyAgICAgICAg
KiB3dGYvV2Vha1JhbmRvbS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9XZWFrUmFuZG9tLmguCisgICAgICAgIChXVEY6OldlYWtSYW5kb206OldlYWtSYW5kb20p
OgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjppbml0aWFsaXplU2VlZCk6CisgICAgICAgIChX
VEY6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjpn
ZXRVaW50MzIpOgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjphZHZhbmNlKToKKyAgICAgICAg
KEpTQzo6V2Vha1JhbmRvbTo6V2Vha1JhbmRvbSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Oldl
YWtSYW5kb206OnNlZWRVbnNhZmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWFrUmFuZG9t
OjpnZXRVaW50MzIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWFrUmFuZG9tOjphZHZhbmNl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha1JhbmRvbTo6aW5pdGlhbGl6ZVNlZWQpOiBE
ZWxldGVkLgorCiAyMDE1LTA5LTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJhbiBzb3J0LVhjb2RlLXByb2plY3QtZmlsZS4KSW5kZXg6IFNvdXJjZS9XVEYv
V1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYudmN4
cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL1dURi9XVEYudmN4
cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcT1NBbGxvY2F0b3JXaW4uY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXE9TUmFuZG9tU291cmNlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2suY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSGVscGVyUG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFya2luZ0xvdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx3dGZcUHJpbnRTdHJlYW0uY3BwIiAvPgpAQCAtMjQ2LDYgKzI0Nyw3IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFnZUFsbG9jYXRpb24uaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0ZlxQYWdlUmVzZXJ2YXRpb24uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEhlbHBlclBvb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxQYXJhbGxlbEpvYnNHZW5lcmljLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx3dGZcUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCIgLz4KQEAgLTMxMyw2ICszMTUsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFZNVGFncy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHdpblxHRElPYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0Zlx3aW5cV29ya0l0ZW1XaW4uaCIgLz4KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxXZWFrUmFuZG9tLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx3dGZcV29yZExvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxXb3Jr
UXVldWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxXVEZUaHJlYWREYXRh
LmgiIC8+CkluZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9q
LmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVt
YXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4K
ICAgICA8RmlsdGVyIEluY2x1ZGU9ImR0b2EiPgpAQCAtMTc0LDYgKzE3NCw5IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFnZUJsb2NrLmNwcCI+CiAgICAgICA8RmlsdGVyPnd0
ZjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
d3RmXFBhcmFsbGVsSGVscGVyUG9vbC5jcHAiPgorICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4K
KyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxl
bEpvYnNHZW5lcmljLmNwcCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xD
b21waWxlPgpAQCAtNTQ3LDYgKzU1MCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3
dGZcUGFnZVJlc2VydmF0aW9uLmgiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEhlbHBl
clBvb2wuaCI+CisgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9icy5oIj4KICAgICAgIDxG
aWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYg
KzI0LDcgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjMxNzIzNENCMTAw
MzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZCMDBBN0FFM0YgLyog
RGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291
bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyogRmxpcEJ5dGVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3
QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJCTBGMzUwMTY0MUJCMjU4RDUw
MEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICov
OyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGODI0QTY5MUI3NDQzQTAwMDJF
MzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9
OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBC
MEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKQEAgLTQ4LDYgKzQ5LDggQEAKIAkJMEZFNDQ3OUMx
QjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9j
ay5jcHAgKi87IH07CiAJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2
Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9
OworCQkwRkZGMTlEQzFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJC
MzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwICovOyB9OworCQkwRkZGMTlE
RDFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEg
LyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi87IH07CiAJCTE0MDIyRjQxMThGNUMzRkMwMDdGRjBF
QiAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovOyB9
OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRDE1NjVGMEY5MDBEQjUx
NEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBS
QU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKCk7IH07IH07CkBAIC0zMTIsNiArMzE1LDcgQEAKIAkJMEYyQjY2QTQxN0I2QjRG
NzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVy
cmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1
MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcy
RSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hNZXRob2QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5k
b20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5n
TG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAw
MkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQz
RjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzYsNiAr
MzQwLDggQEAKIAkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdvcmRMb2NrLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRy
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSGVscGVyUG9vbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxv
Yy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJj
aGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOCw2ICs4MjQsOCBAQAogCQkJCUE4QTQ3MkUzMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwICovLAogCQkJCUE4QTQ3MkU0MTUxQTgyNUIwMDQxMjNG
RiAvKiBQYWdlQmxvY2suaCAqLywKIAkJCQlBOEE0NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFn
ZVJlc2VydmF0aW9uLmggKi8sCisJCQkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFs
bGVsSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5oICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQ
YXJhbGxlbEpvYnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxs
ZWxKb2JzTGliZGlzcGF0Y2guaCAqLywKIAkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5jcHAgKi8sCkBAIC04OTIsNiArOTAwLDcgQEAKIAkJCQlBOEE0NzM3MTE1MUE4
MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8sCiAJCQkJQThBNDczNzIxNTFBODI1QjAw
NDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBX
ZWFrUHRyLmggKi8sCisJCQkJMEYzNTAxNjMxQkIyNThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20u
aCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suY3BwICovLAog
CQkJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovLAogCQkJCUU0QTBB
RDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUuY3BwICovLApAQCAtMTA2Myw2ICsxMDcy
LDcgQEAKIAkJCQlBOEE0NzM4NTE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlDVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MzQxNTFBODI1QjAwNDEyM0ZGIC8qIEFTQ0lJRmFzdFBhdGgu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzg3MTUxQTgyNUIwMDQxMjNGRiAvKiBBc3NlcnRp
b25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vh
a1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczODgxNTFBODI1QjAwNDEyM0ZGIC8q
IEF0b21pY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDM2MTUxQTgyNUIwMDQxMjNGRiAv
KiBBdG9taWNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDM3MTUxQTgyNUIwMDQx
MjNGRiAvKiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNzQsNiArMTA4
NCw3IEBACiAJCQkJODEzNDAxMzkxNUIwOTJGRDAwMUZGMEI4IC8qIEJhc2U2NC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEyM0ZGIC8qIGJpZ251bS1kdG9hLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkZGMTlERDFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxw
ZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyog
QmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0
MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0
MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTEzOTIsNiArMTQwMyw3IEBA
CiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFs
bGVsSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAy
NEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcx
NkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUE4QTQ3NDIxMTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDcgQEAgc2V0KFdU
Rl9TT1VSQ0VTCiAgICAgTnVtYmVyT2ZDb3Jlcy5jcHAKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAK
ICAgICBQYWdlQmxvY2suY3BwCisgICAgUGFyYWxsZWxIZWxwZXJQb29sLmNwcAogICAgIFBhcmFs
bGVsSm9ic0dlbmVyaWMuY3BwCiAgICAgUGFya2luZ0xvdC5jcHAKICAgICBQcmludFN0cmVhbS5j
cHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhcmFsbGVsSGVscGVyUG9v
bC5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFt
LmgiCisKK25hbWVzcGFjZSBXVEYgeworCitQYXJhbGxlbEhlbHBlckNsaWVudDo6UGFyYWxsZWxI
ZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gcG9vbCkKKyAgICA6IG1fcG9v
bChwb29sKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBS
RUxFQVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlpbmcpOworICAgIG1fcG9vbC0+bV9jbGllbnRz
LmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBl
ckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAg
IGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wtPm1f
Y2xpZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wb29sLT5tX2NsaWVudHNbaV0g
PT0gdGhpcykgeworICAgICAgICAgICAgbV9wb29sLT5tX2NsaWVudHNbaV0gPSBtX3Bvb2wtPm1f
Y2xpZW50cy5sYXN0KCk7CisgICAgICAgICAgICBtX3Bvb2wtPm1fY2xpZW50cy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBQYXJh
bGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNr
KQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghbV90YXNrKTsKKyAgICBtX3Rhc2sgPSB0YXNrOworICAgIG1fcG9vbC0+ZGlkTWFr
ZVdvcmtBdmFpbGFibGUobG9ja2VyKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6
ZmluaXNoKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAg
ZmluaXNoKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhl
bHBpbmcoKQoreworICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2s7CisgICAgewor
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1fbG9jayk7CisgICAgICAgIHRhc2sg
PSBjbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgaWYgKCF0YXNrKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHJ1blRhc2sodGFzayk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRh
c2spCit7CisgICAgc2V0VGFzayh0YXNrKTsKKyAgICBkb1NvbWVIZWxwaW5nKCk7CisgICAgZmlu
aXNoKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCBMb2Nr
SG9sZGVyJikKK3sKKyAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIHdoaWxlIChtX251bUFjdGl2
ZSkKKyAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+
bV9sb2NrKTsKK30KKworUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gUGFyYWxsZWxIZWxwZXJD
bGllbnQ6OmNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBpZiAoIW1fdGFzaykK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgbV9udW1BY3RpdmUrKzsKKyAgICBy
ZXR1cm4gbV90YXNrOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKFJl
ZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9u
dW1BY3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOworCisgICAgdGFzay0+cnVuKCk7
CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOworICAgICAgICAvLyBObyBuZXcgdGFz
ayBjb3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkLCBzaW5jZSB3ZSB3ZXJlIHN0aWxsIGFjdGl2ZS4K
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGFzayB8fCBtX3Rhc2sgPT0gdGFzayk7CisgICAg
ICAgIG1fdGFzayA9IG51bGxwdHI7CisgICAgICAgIG1fbnVtQWN0aXZlLS07CisgICAgICAgIGlm
ICghbV9udW1BY3RpdmUpCisgICAgICAgICAgICBtX3Bvb2wtPm1fd29ya0NvbXBsZXRlQ29uZGl0
aW9uLm5vdGlmeUFsbCgpOworICAgIH0KK30KKworUGFyYWxsZWxIZWxwZXJQb29sOjpQYXJhbGxl
bEhlbHBlclBvb2woKQoreworfQorCitQYXJhbGxlbEhlbHBlclBvb2w6On5QYXJhbGxlbEhlbHBl
clBvb2woKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1fY2xpZW50cy5pc0VtcHR5KCkpOworICAg
IAorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9p
c0R5aW5nID0gdHJ1ZTsKKyAgICAgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLm5vdGlmeUFs
bCgpOworICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVy
IDogbV90aHJlYWRzKQorICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJZGVu
dGlmaWVyKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmFkZFRocmVhZHModW5zaWdu
ZWQgbnVtVGhyZWFkcykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgIG1f
bnVtVGhyZWFkcyArPSBudW1UaHJlYWRzOworICAgIGlmIChnZXRDbGllbnRXaXRoVGFzayhsb2Nr
ZXIpKQorICAgICAgICBkaWRNYWtlV29ya0F2YWlsYWJsZShsb2NrZXIpOworfQorCit2b2lkIFBh
cmFsbGVsSGVscGVyUG9vbDo6ZW5zdXJlVGhyZWFkcyh1bnNpZ25lZCBudW1UaHJlYWRzKQorewor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG51bVRocmVhZHMgPCBtX251
bVRocmVhZHMpCisgICAgICAgIHJldHVybjsKKyAgICBtX251bVRocmVhZHMgPSBudW1UaHJlYWRz
OworICAgIGlmIChnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpKQorICAgICAgICBkaWRNYWtlV29y
a0F2YWlsYWJsZShsb2NrZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZG9Tb21l
SGVscGluZygpCit7CisgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKKyAgICBSZWZQ
dHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrOworICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAgICAgY2xpZW50ID0gZ2V0Q2xpZW50V2l0aFRhc2sobG9ja2Vy
KTsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHRh
c2sgPSBjbGllbnQtPmNsYWltVGFzayhsb2NrZXIpOworICAgIH0KKworICAgIGNsaWVudC0+cnVu
VGFzayh0YXNrKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRpZE1ha2VXb3JrQXZh
aWxhYmxlKGNvbnN0IExvY2tIb2xkZXImKQoreworICAgIHdoaWxlIChtX251bVRocmVhZHMgPiBt
X3RocmVhZHMuc2l6ZSgpKSB7CisgICAgICAgIFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRp
ZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICJQYXJhbGxlbCBIZWxwZXIgVGhyZWFk
IiwKKyAgICAgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAgICAgICAgaGVscGVyVGhyZWFk
Qm9keSgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fdGhyZWFkcy5hcHBlbmQodGhyZWFk
SWRlbnRpZmllcik7CisgICAgfQorICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi5ub3RpZnlB
bGwoKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZHkoKQor
eworICAgIGZvciAoOzspIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsK
KyAgICAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gdGFzazsKKworICAgICAgICB7Cisg
ICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgY2xpZW50
ID0gd2FpdEZvckNsaWVudFdpdGhUYXNrKGxvY2tlcik7CisgICAgICAgICAgICBpZiAoIWNsaWVu
dCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faXNEeWluZyk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXNrID0gY2xp
ZW50LT5jbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudC0+cnVu
VGFzayh0YXNrKTsKKyAgICB9Cit9CisKK2Jvb2wgUGFyYWxsZWxIZWxwZXJQb29sOjpoYXNDbGll
bnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit7CisgICAgcmV0dXJuICEhZ2V0
Q2xpZW50V2l0aFRhc2sobG9ja2VyKTsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFs
bGVsSGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpCit7Cisg
ICAgLy8gV2UgbG9hZC1iYWxhbmNlIGJ5IGJlaW5nIHJhbmRvbS4KKyAgICB1bnNpZ25lZCBzdGFy
dEluZGV4ID0gbV9yYW5kb20uZ2V0VWludDMyKG1fY2xpZW50cy5zaXplKCkpOworICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OyBpbmRleCA8IG1fY2xpZW50cy5zaXplKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50
c1tpbmRleF07CisgICAgICAgIGlmIChjbGllbnQtPm1fdGFzaykKKyAgICAgICAgICAgIHJldHVy
biBjbGllbnQ7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHN0
YXJ0SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVu
dCA9IG1fY2xpZW50c1tpbmRleF07CisgICAgICAgIGlmIChjbGllbnQtPm1fdGFzaykKKyAgICAg
ICAgICAgIHJldHVybiBjbGllbnQ7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K1BhcmFsbGVsSGVscGVyQ2xpZW50KiBQYXJhbGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRX
aXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit7CisgICAgZm9yICg7OykgeworICAg
ICAgICAvLyBJdCBtaWdodCBiZSBxdWl0dGluJyB0aW1lLgorICAgICAgICBpZiAobV9pc0R5aW5n
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKFBhcmFsbGVsSGVs
cGVyQ2xpZW50KiByZXN1bHQgPSBnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBXYWl0IHVudGlsIHdvcmsgYmVjb21lcyBh
dmFpbGFibGUuCisgICAgICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi53YWl0KG1fbG9jayk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYv
UGFyYWxsZWxIZWxwZXJQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxs
ZWxIZWxwZXJQb29sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhl
bHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSGVscGVy
UG9vbF9oCisjZGVmaW5lIFBhcmFsbGVsSGVscGVyUG9vbF9oCisKKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1Jh
bmRvbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gQSBQYXJhbGxlbEhlbHBlclBvb2wgaXMg
YSBzaGFyZWQgcG9vbCBvZiB0aHJlYWRzIHRoYXQgY2FuIGJlIGFza2VkIHRvIGhlbHAgd2l0aCBz
b21lIGZpbml0ZS10aW1lCisvLyBwYXJhbGxlbCBhY3Rpdml0eS4gSXQncyBkZXNpZ25lZCB0byB3
b3JrIHdlbGwgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgY29uY3VycmVudCB0YXNrcyB0aGF0IG1h
eQorLy8gYWxsIHdhbnQgcGFyYWxsZWwgaGVscC4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50
IGVhY2ggdGFzayB0byBzdGFydCBpdHMgb3duIHRocmVhZCBwb29sLiBJdCdzCisvLyBhbHNvIGRl
c2lnbmVkIHRvIHdvcmsgd2VsbCBmb3IgdGFza3MgdGhhdCBkbyB0aGVpciBvd24gbG9hZCBiYWxh
bmNpbmcgYW5kIGRvIG5vdCB3aXNoIHRvCisvLyBwYXJ0aWNpcGF0ZSBpbiBtaWNyb3Rhc2stc3R5
bGUgbG9hZCBiYWxhbmNpbmcuCisvLworLy8gQSBwb29sIGNhbiBoYXZlIG1hbnkgY2xpZW50cywg
YW5kIGVhY2ggY2xpZW50IG1heSBoYXZlIHplcm8gb3Igb25lIHRhc2tzLiBUaGUgcG9vbCB3aWxs
IGhhdmUgdXAKKy8vIHRvIHNvbWUgbnVtYmVyIG9mIHRocmVhZHMsIGNvbmZpZ3VyYWJsZSB3aXRo
IFBhcmFsbGVsSGVscGVyUG9vbDo6YWRkVGhyZWFkcygpOyB1c3VhbGx5IHlvdSBib3VuZAorLy8g
dGhpcyBieSB0aGUgbnVtYmVyIG9mIENQVXMuIFdoZW5ldmVyIGEgdGhyZWFkIGlzIGlkbGUgYW5k
IGl0IG5vdGljZXMgdGhhdCBzb21lIGNsaWVudCBoYXMgYQorLy8gdGFzaywgaXQgd2lsbCBydW4g
dGhlIHRhc2suIEEgdGFzayBtYXkgYmUgcnVuIG9uIGFueXdoZXJlIGJldHdlZW4gemVybyBhbmQg
TiB0aHJlYWRzLCB3aGVyZSBOIGlzCisvLyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgaW4gdGhlIHBv
b2wuIFRhc2tzIHJ1biB0byBjb21wbGV0aW9uLiBJdCdzIGV4cGVjdGVkIHRoYXQgYSB0YXNrIHdp
bGwgaGF2ZQorLy8gaXRzIG93biBjdXN0b20gaWRlYXMgYWJvdXQgaG93IHRvIHBhcnRpY2lwYXRl
IGluIHNvbWUgcGFyYWxsZWwgYWN0aXZpdHkncyBsb2FkIGJhbGFuY2luZywgYW5kIGl0CisvLyB3
aWxsIHJldHVybiB3aGVuIHRoZSBwYXJhbGxlbCBhY3Rpdml0eSBpcyBkb25lLiBGb3IgZXhhbXBs
ZSwgYSBwYXJhbGxlbCBtYXJraW5nIHRhc2sgd2lsbCByZXR1cm4KKy8vIHdoZW4gdGhlIG1hcmsg
cGhhc2UgaXMgZG9uZS4KKy8vCisvLyBUaHJlYWRzIG1heSBoYXZlIGEgY2hvaWNlIGJldHdlZW4g
bWFueSB0YXNrcywgc2luY2UgdGhlcmUgbWF5IGJlIG1hbnkgY2xpZW50cyBhbmQgZWFjaCBjbGll
bnQKKy8vIG1heSBoYXZlIGEgdGFzay4gRm9yIHRoZSBtYXJraW5nIGV4YW1wbGUsIHRoYXQgbWF5
IGhhcHBlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgVk0gaW5zdGFuY2VzIGFuZAorLy8gZWFjaCBp
bnN0YW5jZSBkZWNpZGVzIHRvIHN0YXJ0IHBhcmFsbGVsIG1hcmtpbmcgYXQgdGhlIHNhbWUgdGlt
ZS4gSW4gdGhhdCBjYXNlLCB0aHJlYWRzIGNob29zZQorLy8gYSB0YXNrIGF0IHJhbmRvbS4gU28g
bG9uZyBhcyBhbnkgY2xpZW50IGhhcyBhIHRhc2ssIGFsbCB0aHJlYWRzIGluIHRoZSBwb29sIHdp
bGwgY29udGludWUKKy8vIHJ1bm5pbmcgdGhlIGF2YWlsYWJsZSB0YXNrcy4gVGhyZWFkcyBnbyBp
ZGxlIHdoZW4gbm8gY2xpZW50IGhhcyB0YXNrcyB0byBydW4uCisKKy8vIEEgdGFzayBlbmNhcHN1
bGF0ZXMgb25lIHRocmVhZCdzIHdvcnRoIG9mIGFjdGl2aXR5IGluIHNvbWUgcGFyYWxsZWwgYWxn
b3JpdGhtLiBUaGUgcG9vbCB3aWxsCisvLyBydW4gdGhpcyB0YXNrIG9uIHBvdGVudGlhbGx5IG1h
bnkgdGhyZWFkcy4gVGhlIHBvb2wgbWF5IG5vdCBydW4gdGhlIHRhc2sgb24gYW55IHRocmVhZHMs
IG9mIGFsbAorLy8gdGhyZWFkcyBhcmUgYnVzeSBydW5uaW5nIG90aGVyIHRhc2tzLiBUYXNrcyBt
YXkgam9pbiBpbiBhdCBhbnkgdGltZS4KKy8vCisvLyBUYXNrcyBzaG91bGQgY29tcGxldGUgaW4g
ZmluaXRlIHRpbWUuIFBhcmFsbGVsSGVscGVyUG9vbCBhbmQgZnJpZW5kcyBhcmUgbWVhbnQgdG8g
YmUgdXNlZCBmb3IKKy8vIHBhcmFsbGVsIGFsZ29yaXRobXMgdGhhdCBydW4gdG8gY29tcGxldGlv
bi4gQSBnb29kIGV4YW1wbGUgaXMgc29tZXRoaW5nIGxpa2UgcGFyYWxsZWwgbWFya2luZywKKy8v
IHdoaWNoIGNhbiBiZSBsb25nLXJ1bm5pbmcgYnV0IGFsd2F5cyB0ZXJtaW5hdGVzLgorY2xhc3Mg
UGFyYWxsZWxIZWxwZXJUYXNrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBhcmFsbGVs
SGVscGVyVGFzaz4geworcHVibGljOgorICAgIFBhcmFsbGVsSGVscGVyVGFzaygpIHsgfQorICAg
IHZpcnR1YWwgflBhcmFsbGVsSGVscGVyVGFzaygpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHJ1
bigpID0gMDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBQYXJhbGxl
bEhlbHBlclRhc2tGdW5jdG9yIDogcHVibGljIFBhcmFsbGVsSGVscGVyVGFzayB7CitwdWJsaWM6
CisgICAgUGFyYWxsZWxIZWxwZXJUYXNrRnVuY3Rvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
ICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9mdW5jdG9yKCk7CisgICAg
fQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCisvLyBZb3UgY2FuIHVzZSB0aGlzIGxp
a2Ugc286CisvLworLy8gUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gdGFzayA9IGNyZWF0ZVBh
cmFsbGVsSGVscGVyVGFzaygKKy8vICAgICBbPV0gKCkgeworLy8gICAgICAgICBkbyB0aGluZ3M7
CisvLyAgICAgfSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorUmVmUHRyPFBhcmFsbGVs
SGVscGVyVGFzaz4gY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGFyYWxsZWxIZWxwZXJUYXNrRnVuY3Rv
cjxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKK2NsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKKwor
Ly8gQSBjbGllbnQgaXMgYSBwbGFjZWhvbGRlciBmb3IgYSBwYXJhbGxlbCBhbGdvcml0aG0uIEEg
cGFyYWxsZWwgYWxnb3JpdGhtIHdpbGwgaGF2ZSBhIHRhc2sgdGhhdAorLy8gY2FuIGJlIHJ1biBj
b25jdXJyZW50bHkuIFdoZW5ldmVyIGEgY2xpZW50IGhhcyBhIHRhc2sgc2V0ICh5b3UgaGF2ZSBj
YWxsZWQgc2V0VGFzaygpIG9yCisvLyBzZXRGdW5jdGlvbigpKSwgdGhyZWFkcyBpbiB0aGUgcG9v
bCBtYXkgcnVuIHRoYXQgdGFzay4gSWYgYSB0YXNrIHJldHVybnMgb24gYW55IHRocmVhZCwgdGhl
CisvLyBjbGllbnQgd2lsbCBhc3N1bWUgdGhhdCB0aGUgdGFzayBpcyBkb25lIGFuZCB3aWxsIGNs
ZWFyIHRoZSB0YXNrLiBJZiB0aGUgdGFzayBpcyBjbGVhcmVkICh0aGUKKy8vIHRhc2sgcnVucyB0
byBjb21wbGV0aW9uIG9uIGFueSB0aHJlYWQgb3IgeW91IGNhbGwgZmluaXNoKCkpLCBhbnkgdGhy
ZWFkcyBpbiB0aGUgcG9vbCBhbHJlYWR5CisvLyBydW5uaW5nIHRoZSBsYXN0IHNldCB0YXNrKHMp
IHdpbGwgY29udGludWUgdG8gcnVuIHRoZW0uIFlvdSBjYW4gd2FpdCBmb3IgYWxsIG9mIHRoZW0g
dG8gZmluaXNoCisvLyBieSBjYWxsaW5nIGZpbmlzaCgpLiBUaGF0IG1ldGhvZCB3aWxsIGNsZWFy
IHRoZSB0YXNrIGFuZCB3YWl0IGZvciBhbnkgdGhyZWFkcyBydW5uaW5nIHRoZSBsYXN0CisvLyBz
ZXQgdGFzayB0byBmaW5pc2guIFRoZXJlIGFyZSB0d28ga25vd24tZ29vZCBwYXR0ZXJucyBmb3Ig
dXNpbmcgYSBjbGllbnQ6CisvLworLy8gMSkgVGFza3MgaW50cmluc2ljYWxseSBrbm93IHdoZW4g
dGhlIGFsZ29yaXRobSByZWFjaGVzIHRlcm1pbmF0aW9uLCBhbmQgc2ltcGx5IHJldHVybnMgd2hl
bgorLy8gICAgdGhpcyBoYXBwZW5zLiBUaGUgbWFpbiB0aHJlYWQgcnVucyB0aGUgdGFzayBieSBk
b2luZzoKKy8vCisvLyAgICBjbGllbnQtPnNldEZ1bmN0aW9uKAorLy8gICAgICAgIFs9XSAoKSB7
CisvLyAgICAgICAgICAgIGRvIHRoaW5nczsKKy8vICAgICAgICB9KTsKKy8vICAgIGNsaWVudC0+
ZG9Tb21lSGVscGluZygpOworLy8gICAgY2xpZW50LT5maW5pc2goKTsKKy8vCisvLyAgICBDYWxs
aW5nIGRvU29tZUhlbHBpbmcoKSBlbnN1cmVzIHRoYXQgdGhlIGFsZ29yaXRobSBydW5zIG9uIGF0
IGxlYXN0IG9uZSB0aHJlYWQgKHRoaXMgb25lKS4KKy8vICAgIFRhc2tzIHdpbGwga25vdyB3aGVu
IHRvIGNvbXBsZXRlLCBhbmQgd2lsbCByZXR1cm4gd2hlbiB0aGV5IGFyZSBkb25lLiBUaGlzIHdp
bGwgY2xlYXIgdGhlCisvLyAgICB0YXNrIHRvIGVuc3VyZSB0aGF0IG5vIG5ldyB0aHJlYWRzIHdp
bGwgcnVuIHRoZSB0YXNrLiBUaGVuLCBmaW5pc2goKSBjbGVhcnMgdGhlIGN1cnJlbnQgdGFzawor
Ly8gICAgYW5kIHdhaXRzIGZvciBhbnkgcGFyYWxsZWwgdGFza3MgdG8gZmluaXNoIGFmdGVyIHRo
ZSBtYWluIHRocmVhZCBoYXMgZmluaXNoZWQuIEl0J3MgcG9zc2libGUKKy8vICAgIGZvciB0aHJl
YWRzIHRvIHN0aWxsIGJlIHJ1bm5pbmcgdGhlIGxhc3Qgc2V0IHRhc2sgKGkuZS4gdGhlIG9uZSBz
ZXQgYnkgc2V0RnVuY3Rpb24oKSkgZXZlbgorLy8gICAgYWZ0ZXIgdGhlIHRhc2sgaGFzIGJlZW4g
Y2xlYXJlZC4gV2FpdGluZyBmb3IgaWRsZSBlbnN1cmVzIHRoYXQgbm8gb2xkIHRhc2tzIGFyZSBy
dW5uaW5nCisvLyAgICBhbnltb3JlLgorLy8KKy8vICAgIFlvdSBjYW4gZG8gdGhpcyBtb3JlIGVh
c2lseSBieSB1c2luZyB0aGUgcnVuRnVuY3Rpb25JblBhcmFsbGVsKCkgaGVscGVyOgorLy8KKy8v
ICAgIGNsaWVudHMtPnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgKKy8vICAgICAgICBbPV0gKCkgewor
Ly8gICAgICAgICAgICBkbyB0aGluZ3M7CisvLyAgICAgICAgfSk7CisvLworLy8gMikgVGFza3Mg
a2VlcCBkb2luZyB0aGluZ3MgdW50aWwgdGhleSBhcmUgdG9sZCB0byBxdWl0IHVzaW5nIHNvbWUg
Y3VzdG9tIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20uCisvLyAgICBUaGUgbWFpbiB0aHJlYWQgcnVu
cyB0aGUgdGFzayBieSBkb2luZzoKKy8vCisvLyAgICBib29sIGtlZXBHb2luZyA9IHRydWU7Cisv
LyAgICBjbGllbnQtPnNldEZ1bmN0aW9uKAorLy8gICAgICAgIFs9XSAoKSB7CisvLyAgICAgICAg
ICAgIHdoaWxlIChrZWVwR29pbmcpIHsKKy8vICAgICAgICAgICAgICAgIGRvIHRoaW5nczsKKy8v
ICAgICAgICAgICAgfQorLy8gICAgICAgIH0pOworLy8KKy8vICAgIFdoZW4gd29yayBydW5zIG91
dCwgdGhlIG1haW4gdGhyZWFkIHdpbGwgaW5mb3JtIHRhc2tzIHRoYXQgdGhlcmUgaXMgbm8gbW9y
ZSB3b3JrLCBhbmQgdGhlbgorLy8gICAgd2FpdCB1bnRpbCBubyBtb3JlIHRhc2tzIGFyZSBydW5u
aW5nOgorLy8KKy8vICAgIGtlZXBHb2luZyA9IGZhbHNlOworLy8gICAgY2xpZW50LT5maW5pc2go
KTsKKy8vCisvLyAgICBUaGlzIHdvcmtzIGJlc3Qgd2hlbiB0aGUgbWFpbiB0aHJlYWQgZG9lc24n
dCBhY3R1YWxseSB3YW50IHRvIHJ1biB0aGUgdGFzayB0aGF0IGl0IHNldCBpbiB0aGUKKy8vICAg
IGNsaWVudC4gVGhpcyBoYXBwZW5zIGZvciBleGFtcGxlIGluIHBhcmFsbGVsIG1hcmtpbmcuIFRo
ZSBtYWluIHRocmVhZCB1c2VzIGEgc29tZXdoYXQKKy8vICAgIGRpZmZlcmVudCBtYXJraW5nIGFs
Z29yaXRobSB0aGFuIHRoZSBoZWxwZXJzLiBUaGUgbWFpbiB0aHJlYWQgbWF5IHByb3ZpZGUgd29y
ayB0aGF0IHRoZQorLy8gICAgaGVscGVycyBzdGVhbC4gVGhlIG1haW4gdGhyZWFkIGtub3dzIHdo
ZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZCwgYW5kIHNpbXBseSB0ZWxscyB0aGUKKy8vICAgIGhl
bHBlcnMgdG8gc3RvcCB1cG9uIHRlcm1pbmF0aW9uLgorLy8KKy8vIFRoZSBrbm93bi1nb29kIHN0
eWxlcyBvZiB1c2luZyBQYXJhbGxlbEhlbHBlckNsaWVudCBhbGwgaW52b2x2ZSBhIHBhcmFsbGVs
IGFsZ29yaXRobSB0aGF0IGhhcworLy8gaXRzIG93biB3b3JrIGRpc3RyaWJ1dGlvbiBhbmQgbG9h
ZCBiYWxhbmNpbmcuCisvLworLy8gTm90ZSB0aGF0IGl0IGlzIG5vdCB2YWxpZCB0byB1c2UgdGhl
IHNhbWUgUGFyYWxsZWxIZWxwZXJDbGllbnQgaW5zdGFuY2UgZnJvbSBtdWx0aXBsZSB0aHJlYWRz
LgorLy8gRWFjaCB0aHJlYWQgc2hvdWxkIGhhdmUgaXRzIG93biBQYXJhbGxlbEhlbHBlckNsaWVu
dCBpbiB0aGF0IGNhc2UuIEZhaWx1cmUgdG8gZm9sbG93IHRoaXMgYWR2aWNlCisvLyB3aWxsIGxl
YWQgdG8gUkVMRUFTRV9BU1NFUlQncyBvciB3b3JzZS4KK2NsYXNzIFBhcmFsbGVsSGVscGVyQ2xp
ZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXJhbGxlbEhlbHBlckNsaWVudCk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50
KFJlZlB0cjxQYXJhbGxlbEhlbHBlclBvb2w+KTsKKyAgICB+UGFyYWxsZWxIZWxwZXJDbGllbnQo
KTsKKworICAgIHZvaWQgc2V0VGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPik7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0RnVuY3Rpb24oY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHNldFRhc2soY3JlYXRlUGFyYWxsZWxI
ZWxwZXJUYXNrKGZ1bmN0b3IpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5pc2goKTsKKwor
ICAgIHZvaWQgZG9Tb21lSGVscGluZygpOworCisgICAgLy8gRXF1aXZhbGVudCB0bzoKKyAgICAv
LyBjbGllbnQtPnNldFRhc2sodGFzayk7CisgICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7
CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsKKyAgICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJl
ZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+KTsKKworICAgIC8vIEVxdWl2YWxlbnQgdG86CisgICAg
Ly8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKKyAgICAvLyBjbGllbnQtPmRvU29tZUhl
bHBpbmcoKTsKKyAgICAvLyBjbGllbnQtPmZpbmlzaCgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVBhcmFsbGVs
SGVscGVyVGFzayhmdW5jdG9yKSk7CisgICAgfQorCisgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBw
b29sKCkgeyByZXR1cm4gKm1fcG9vbDsgfQorICAgIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlVGhy
ZWFkcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQWN0aXZlOyB9CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKKworICAgIHZvaWQgZmluaXNoKGNvbnN0IExv
Y2tIb2xkZXImKTsKKyAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiBjbGFpbVRhc2soY29u
c3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJU
YXNrPik7CisgICAgCisgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29sOworICAg
IFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IG1fdGFzazsKKyAgICB1bnNpZ25lZCBtX251bUFj
dGl2ZSB7IDAgfTsKK307CisKK2NsYXNzIFBhcmFsbGVsSGVscGVyUG9vbCA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxQYXJhbGxlbEhlbHBlclBvb2w+IHsKK3B1YmxpYzoKKyAgICBQYXJh
bGxlbEhlbHBlclBvb2woKTsKKyAgICB+UGFyYWxsZWxIZWxwZXJQb29sKCk7CisKKyAgICB2b2lk
IGFkZFRocmVhZHModW5zaWduZWQgbnVtVGhyZWFkcyk7CisgICAgdm9pZCBlbnN1cmVUaHJlYWRz
KHVuc2lnbmVkIG51bVRocmVhZHMpOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZUaHJlYWRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1UaHJlYWRzOyB9CisgICAgCisgICAgdm9pZCBkb1NvbWVIZWxw
aW5nKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50
OworCisgICAgdm9pZCBkaWRNYWtlV29ya0F2YWlsYWJsZShjb25zdCBMb2NrSG9sZGVyJik7Cisg
ICAgdm9pZCBoZWxwZXJUaHJlYWRCb2R5KCk7CisKKyAgICBib29sIGhhc0NsaWVudFdpdGhUYXNr
KGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogZ2V0Q2xpZW50
V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiB3
YWl0Rm9yQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIAorICAgIExvY2sg
bV9sb2NrOworICAgIENvbmRpdGlvbiBtX3dvcmtBdmFpbGFibGVDb25kaXRpb247CisgICAgQ29u
ZGl0aW9uIG1fd29ya0NvbXBsZXRlQ29uZGl0aW9uOworCisgICAgV2Vha1JhbmRvbSBtX3JhbmRv
bTsKKyAgICAKKyAgICBWZWN0b3I8UGFyYWxsZWxIZWxwZXJDbGllbnQqPiBtX2NsaWVudHM7Cisg
ICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fdGhyZWFkczsKKyAgICB1bnNpZ25lZCBtX251
bVRocmVhZHMgeyAwIH07IC8vIFRoaXMgY2FuIGJlIGxhcmdlciB0aGFuIG1fdGhyZWFkcy5zaXpl
KCkgYmVjYXVzZSB3ZSBzdGFydCB0aHJlYWRzIG9ubHkgb25jZSB0aGVyZSBpcyB3b3JrLgorICAg
IGJvb2wgbV9pc0R5aW5nIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OmNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzazsKK3VzaW5nIFdURjo6UGFyYWxsZWxI
ZWxwZXJDbGllbnQ7Cit1c2luZyBXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDsKK3VzaW5nIFdURjo6
UGFyYWxsZWxIZWxwZXJUYXNrOwordXNpbmcgV1RGOjpQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9y
OworCisjZW5kaWYgLy8gUGFyYWxsZWxIZWxwZXJQb29sX2gKKwpJbmRleDogU291cmNlL1dURi93
dGYvV2Vha1JhbmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20u
aAkocmV2aXNpb24gMTkwMTUxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9X
ZWFrUmFuZG9tLmg6MTkwMTUxKQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSWFuIEMuIEJ1bGxhcmQK
KyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24KKyAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz
b2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFs
IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv
dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqIGNvcHksIG1vZGlmeSwgbWVyZ2Us
IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMg
b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNv
ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisg
KiBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp
cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv
ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZU
V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAor
ICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX
QVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s
IERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg
Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig
SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBE
RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBXZWFrUmFuZG9tX2gKKyNk
ZWZpbmUgV2Vha1JhbmRvbV9oCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrUmFuZG9tIHsK
K2ZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXpl
U2VlZCgpIGR1cmluZyByZXBsYXkuCitwdWJsaWM6CisgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBz
ZWVkKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVk
IGdldCgpIG9yIGdldFVpbnQzMigpLgorICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7
IHJldHVybiBtX2hpZ2g7IH0KKworICAgIGRvdWJsZSBnZXQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkdmFuY2UoKSAvIChVSU5UX01BWCArIDEuMCk7CisgICAgfQorCisgICAgdW5zaWduZWQg
Z2V0VWludDMyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgbV9oaWdoID0g
KG1faGlnaCA8PCAxNikgKyAobV9oaWdoID4+IDE2KTsKKyAgICAgICAgbV9oaWdoICs9IG1fbG93
OworICAgICAgICBtX2xvdyArPSBtX2hpZ2g7CisgICAgICAgIHJldHVybiBtX2hpZ2g7CisgICAg
fQorCisgICAgdm9pZCBpbml0aWFsaXplU2VlZCh1bnNpZ25lZCBzZWVkKQorICAgIHsKKyAgICAg
ICAgbV9sb3cgPSBzZWVkIF4gMHg0OTYxNkU0MjsKKyAgICAgICAgbV9oaWdoID0gc2VlZDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBtX2xvdzsKKyAgICB1bnNpZ25lZCBtX2hpZ2g7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdlYWtSYW5kb21faApJbmRleDogU291cmNl
L1dURi93dGYvV2Vha1JhbmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtS
YW5kb20uaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSwxOCArNTEsMjkgQEAKICNkZWZpbmUgV2Vha1JhbmRvbV9oCiAK
ICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi1uYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBX
VEYgewogCiBjbGFzcyBXZWFrUmFuZG9tIHsKLWZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsg
Ly8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmluZyByZXBsYXkuCiBwdWJsaWM6
CisgICAgV2Vha1JhbmRvbSgpCisgICAgeworICAgICAgICBpbml0aWFsaXplU2VlZChyYW5kb21O
dW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKTsK
KyAgICB9CisgICAgCiAgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQogICAgIHsKICAgICAg
ICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6
ZVNlZWQodW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2
MTZFNDI7CisgICAgICAgIG1faGlnaCA9IHNlZWQ7CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0
aGUgc2VlZCBwcm92aWRlZCB0aGF0IHlvdSd2ZSBuZXZlciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWlu
dDMyKCkuCiAgICAgdW5zaWduZWQgc2VlZFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsg
fQogCkBAIC03Niw2ICs4NywxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZHZhbmNlKCk7
CiAgICAgfQogCisgICAgdW5zaWduZWQgZ2V0VWludDMyKHVuc2lnbmVkIGxpbWl0KQorICAgIHsK
KyAgICAgICAgaWYgKGxpbWl0IDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
dWludDY0X3QgY3V0b2ZmID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihVSU5UX01BWCkgKyAxKSAv
IGxpbWl0ICogbGltaXQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ2NF90
IHZhbHVlID0gZ2V0VWludDMyKCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPj0gY3V0b2ZmKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlICUgbGlt
aXQ7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgYWR2YW5jZSgp
CiAgICAgewpAQCAtODUsMTYgKzEwOSwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9o
aWdoOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkKLSAg
ICB7Ci0gICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7Ci0gICAgICAgIG1faGlnaCA9
IHNlZWQ7Ci0gICAgfQotCiAgICAgdW5zaWduZWQgbV9sb3c7CiAgICAgdW5zaWduZWQgbV9oaWdo
OwogfTsKIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcg
V1RGOjpXZWFrUmFuZG9tOwogCiAjZW5kaWYgLy8gV2Vha1JhbmRvbV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261910</attachid>
            <date>2015-09-24 18:50:06 -0700</date>
            <delta_ts>2015-09-25 13:08:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>90013</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1IEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIEdDIHRvIHVzZSBhIG5ldyBXVEYg
YWJzdHJhY3Rpb24gZm9yIHBhcmFsbGVsaXNtIGNhbGxlZCBQYXJhbGxlbEhlbHBlclBvb2wuCisg
ICAgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHJlbW92ZSBHQ1RocmVhZCBhbmQgYWxsIG9mIHRoZSBH
Q1BoYXNlIG1hY2hpbmVyeS4gVGhpcyBraWxscyBhIGxvdCBvZgorICAgICAgICBjb2RlIGFuZCBh
bHNvIGdpdmVzIG91ciBHQyBtYWdpY2FsIHRocmVhZCBzaGFyaW5nIHBvd2Vycy4gSWYgdHdvIEdD
cyBpbiB0d28gZGlmZmVyZW50IFZNcworICAgICAgICBmaXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRo
ZW4gdGhleSB3aWxsIGJvdGggZ2V0IGEgcmFuZG9tIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHNo
YXJlZCBHQworICAgICAgICB0aHJlYWRzLiBJZiBvbmUgR0MgaGFwcGVucyBiZWZvcmUgdGhlIG90
aGVyLCB0aGVuIGl0IHdpbGwgcHJvYmFibHkgZ2V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlCisgICAg
ICAgIHRocmVhZHMuIElmIGEgR0MgaGFwcGVucyB3aGlsZSBhbm90aGVyIFZNIGFscmVhZHkgc3Rh
cnRlZCBHQ2luZywgdGhlbiBpdCB3aWxsIHByb2JhYmx5IG5vdAorICAgICAgICBnZXQgYW55IGhl
bHBlciB0aHJlYWRzLiBUaGlzIGlzIHByb2JhYmx5IGZpbmUsIHNpbmNlIGluIG11bHRpLVZNIHNj
ZW5hcmlvcyB3ZSBoYXZlIG5vCisgICAgICAgIHJlYXNvbiB0byBvcHRpbWl6ZSBmb3IgYW55dGhp
bmcgb3RoZXIgdGhhbiB0b3RhbCB0aHJvdWdocHV0LgorCisgICAgICAgIFRoZSBHQyBoYXMgb25l
IHN0YXRpYyBoZWxwZXIgcG9vbC4gVGhpcyBwb29sIGlzIGF2YWlsYWJsZSB2aWEgSlNDOjpoZWFw
SGVscGVyUG9vbCgpLiBJdAorICAgICAgICB3b3VsZCBiZSBPSyBmb3Igb3RoZXIgcGFydHMgb2Yg
SlNDIHRvIHVzZSBpdCBpbiB0aGUgZnV0dXJlIGZvciBwYXJhbGxlbCB0YXNrcy4gRWFjaCBIZWFw
CisgICAgICAgIGluc3RhbmNlIGhhcyBhIGhlbHBlciBjbGllbnQgYXR0YWNoZWQgdG8gdGhlIHBv
b2wuCisKKyAgICAgICAgVGhlIG1hcmtpbmcgcGhhc2UgdGVsbHMgdGhlIFBhcmFsbGVsSGVscGVy
Q2xpZW50IHRvIGFzeW5jaHJvbm91c2x5IHJ1biBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgam9p
bnMgcGFyYWxsZWwgbWFya2luZyBhbmQgZmluaXNoZXMgb25jZSBtYXJraW5nIHJlYWNoZXMgdGVy
bWluYXRpb24uIEl0IHVzZXMgdGhlCisgICAgICAgIGNsaWVudC5zZXRGdW5jdGlvbigpIGlkaW9t
IHdoZXJlIHRoZSB0aHJlYWRzIHNoYXJlIHdvcmsgd2l0aCBlYWNoIG90aGVyIHVzaW5nIGEgc3Bl
Y2lhbGl6ZWQKKyAgICAgICAgd29ya2xpc3QuIFRoZSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgbm90
IGludm9sdmVkIGluIGRlY2lkaW5nIHdoZW4gdGhyZWFkcyBzaG91bGQgdGVybWluYXRlLgorCisg
ICAgICAgIFRoZSBjb3B5aW5nIHBoYXNlIHRlbGxzIHRoZSBQYXJhbGxlbEhlbHBlckNsaWVudCB0
byBydW4gYSBjb3B5aW5nIGZ1bmN0aW9uIGluIHBhcmFsbGVsLiBJdAorICAgICAgICB1c2VzIHRo
ZSBjbGllbnQucnVuRnVuY3Rpb25JblBhcmFsbGVsKCkgaWRpb20uIFRoZSBjb3B5aW5nIGZ1bmN0
aW9uIGdldHMgd29yayBmcm9tIHRoZQorICAgICAgICBtX2Jsb2Nrc1RvQ29weSB3b3JrbGlzdCBp
bnNpZGUgSGVhcC4KKworICAgICAgICBUbyB0ZXN0IHRoYXQgbXVsdGlwbGUgVk1zIHdvcmsgcHJv
cGVybHksIHRoaXMgYWRkcyBhIG11bHRpLVZNIHRlc3QgdG8gdGVzdGFwaS5tbS4gVGhpcyB0ZXN0
CisgICAgICAgIGNyZWF0ZXMgZml2ZSBjb25jdXJyZW50IFZNcyBhbmQgaGFzIGVhY2ggb2YgdGhl
bSBhbGxvY2F0ZSBhYm91dCAzME1CIG9mIG1lbW9yeSBiZWZvcmUgZG9pbmcKKyAgICAgICAgYSBm
dWxsIEdDLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IHRoaXMgdGVzdHMgdXNlcyBvbmx5IDYgdG90YWwg
R0MgdGhyZWFkcyBvbiBteSA4LWNvcmUKKyAgICAgICAgY29tcHV0ZXIgKHRoaXMgaXMgY29ycmVj
dCBzaW5jZSB3ZSBhcmUgY3VycmVudGx5IGNvbmZpZ3VyZWQgZm9yIDctd2F5IHBhcmFsbGVsaXNt
KS4KKworICAgICAgICBUaGlzIHNob3VsZG4ndCBhZmZlY3QgcGVyZm9ybWFuY2Ugb24gYmVuY2ht
YXJrcywgYnV0IGl0IHdpbGwgc3VyZSBoZWxwIGFwcHMgd2l0aCBhIGxvdCBvZgorICAgICAgICBW
TSBpbnN0YW5jZXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGhlYXAvR0NU
aHJlYWQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGhlYXAvR0NUaHJlYWQuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6fkhlYXApOgorICAgICAgICAoSlNDOjpIZWFwOjppc1BhZ2VkT3V0
KToKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6
Y29weUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZXNldFZpc2l0b3JzKToK
KyAgICAgICAgKEpTQzo6SGVhcDo6dGhyZWFkVmlzaXRDb3VudCk6CisgICAgICAgIChKU0M6Okhl
YXA6OnRocmVhZEJ5dGVzVmlzaXRlZCk6CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZEJ5dGVz
Q29waWVkKToKKyAgICAgICAgKEpTQzo6SGVhcDo6c3RhcnROZXh0UGhhc2UpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpIZWFwOjplbmRDdXJyZW50UGhhc2UpOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvSGVhcC5oOgorICAgICAgICAqIGhlYXAvSGVhcEhlbHBlclBvb2wuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6aGVhcEhlbHBlclBvb2wpOgorICAgICAgICAqIGhlYXAvSGVhcEhlbHBl
clBvb2wuaDogQWRkZWQuCisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAo
SlNDOjpNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKToKKyAgICAgICAgKiBoZWFw
L1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFy
a2luZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21TaGFyZWQpOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0
Y2guaDoKKyAgICAgICAgKiBydW50aW1lL0NvZGVDYWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uaDoKKyAgICAgICAgKiBydW50aW1lL1dlYWtSYW5kb20uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBBUEkvdGVzdHMvdGVzdGFwaS5tbToKKwogMjAxNS0wOS0yMyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzcGVjaWFsIGNhc2UgY29kZSBmb3IgdGhl
IG5vLXBhcmFsbGVsLUdDIGNhc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDEwICsyOTQsMTAgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBoZWFwL0Z1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVh
cC9HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwCiAgICAgaGVhcC9HQ0xvZ2dpbmcuY3BwCi0gICAgaGVh
cC9HQ1RocmVhZC5jcHAKICAgICBoZWFwL0hhbmRsZVNldC5jcHAKICAgICBoZWFwL0hhbmRsZVN0
YWNrLmNwcAogICAgIGhlYXAvSGVhcC5jcHAKKyAgICBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAog
ICAgIGhlYXAvSGVhcFN0YXRpc3RpY3MuY3BwCiAgICAgaGVhcC9IZWFwVGltZXIuY3BwCiAgICAg
aGVhcC9IZWFwVmVyaWZpZXIuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rl
c3RzL3Rlc3RhcGkubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90
ZXN0cy90ZXN0YXBpLm1tCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbXBvcnQgIlJlZ3Jlc3MxNDE4MDkuaCIKIAogI2ltcG9ydCA8cHRocmVhZC5oPgorI2ltcG9y
dCA8dmVjdG9yPgogCiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91c0dhcmJhZ2VDb2xsZWN0
Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CiBleHRlcm4gIkMiIHZvaWQgSlNTeW5jaHJvbm91
c0VkZW5Db2xsZWN0Rm9yRGVidWdnaW5nKEpTQ29udGV4dFJlZik7CkBAIC00ODEsNyArNDgyLDMy
IEBAIHN0YXRpYyB2b2lkKiB0aHJlYWRNYWluKHZvaWQqIGNvbnRleHRQdHIKICAgICAvLyBEbyBz
b21ldGhpbmcgdG8gZW50ZXIgdGhlIFZNLgogICAgIFRlc3RPYmplY3QgKnRlc3RPYmplY3QgPSBb
VGVzdE9iamVjdCB0ZXN0T2JqZWN0XTsKICAgICBjb250ZXh0W0AidGVzdE9iamVjdCJdID0gdGVz
dE9iamVjdDsKLSAgICBwdGhyZWFkX2V4aXQobnVsbHB0cik7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3N0YXRpYyB2b2lkKiBtdWx0aVZNVGhyZWFkTWFpbih2b2lkKiBva1B0cikKK3sKKyAg
ICBib29sJiBvayA9ICpzdGF0aWNfY2FzdDxib29sKj4ob2tQdHIpOworICAgIEpTVmlydHVhbE1h
Y2hpbmUgKnZtID0gW1tKU1ZpcnR1YWxNYWNoaW5lIGFsbG9jXSBpbml0XTsKKyAgICBKU0NvbnRl
eHQqIGNvbnRleHQgPSBbW0pTQ29udGV4dCBhbGxvY10gaW5pdFdpdGhWaXJ0dWFsTWFjaGluZTp2
bV07CisgICAgW2NvbnRleHQgZXZhbHVhdGVTY3JpcHQ6CisgICAgICAgIEAidmFyIGFycmF5ID0g
W3t9XTtcbiIKKyAgICAgICAgICJmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHtcbiIKKyAg
ICAgICAgICIgICAgdmFyIG5ld0FycmF5ID0gbmV3IEFycmF5KGFycmF5Lmxlbmd0aCAqIDIpO1xu
IgorICAgICAgICAgIiAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5ld0FycmF5Lmxlbmd0aDsgKytq
KVxuIgorICAgICAgICAgIiAgICAgICAgbmV3QXJyYXlbal0gPSB7cGFyZW50OiBhcnJheVtqIC8g
Ml19O1xuIgorICAgICAgICAgIiAgICBhcnJheSA9IG5ld0FycmF5O1xuIgorICAgICAgICAgIn1c
biJdOworICAgIGlmIChjb250ZXh0LmV4Y2VwdGlvbikgeworICAgICAgICBOU0xvZyhAIlVuY2F1
Z2h0IGV4Y2VwdGlvbi5cbiIpOworICAgICAgICBvayA9IGZhbHNlOworICAgIH0KKyAgICBpZiAo
IVtjb250ZXh0Lmdsb2JhbE9iamVjdCB2YWx1ZUZvclByb3BlcnR5OkAiYXJyYXkiXS50b09iamVj
dCkgeworICAgICAgICBOU0xvZyhAIkRpZCBub3QgZmluZCBcImFycmF5XCIgdmFyaWFibGUuXG4i
KTsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICB9CisgICAgSlNTeW5jaHJvbm91c0dhcmJhZ2VD
b2xsZWN0Rm9yRGVidWdnaW5nKFtjb250ZXh0IEpTR2xvYmFsQ29udGV4dFJlZl0pOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiAvLyBUaGlzIHRlc3QgaXMgZmxha3kuIFNpbmNlIEdDIG1hcmtz
IEMgc3RhY2sgYW5kIHJlZ2lzdGVycyBhcyByb290cyBjb25zZXJ2YXRpdmVseSwKQEAgLTE0MTYs
NiArMTQ0MiwyMSBAQCBzdGF0aWMgdm9pZCB0ZXN0T2JqZWN0aXZlQ0FQSU1haW4oKQogICAgICAg
ICBjaGVja1Jlc3VsdChAIkRpZCBub3QgY3Jhc2ggYWZ0ZXIgZW50ZXJpbmcgdGhlIFZNIGZyb20g
YW5vdGhlciB0aHJlYWQiLCB0cnVlKTsKICAgICB9CiAgICAgCisgICAgQGF1dG9yZWxlYXNlcG9v
bCB7CisgICAgICAgIHN0ZDo6dmVjdG9yPHB0aHJlYWRfdD4gdGhyZWFkczsKKyAgICAgICAgYm9v
bCBvayA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1OyArK2kpIHsK
KyAgICAgICAgICAgIHB0aHJlYWRfdCB0aHJlYWRJRDsKKyAgICAgICAgICAgIHB0aHJlYWRfY3Jl
YXRlKCZ0aHJlYWRJRCwgbnVsbHB0ciwgbXVsdGlWTVRocmVhZE1haW4sICZvayk7CisgICAgICAg
ICAgICB0aHJlYWRzLnB1c2hfYmFjayh0aHJlYWRJRCk7CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKHB0aHJlYWRfdCB0aHJlYWQgOiB0aHJlYWRzKQorICAgICAgICAgICAgcHRocmVhZF9qb2lu
KHRocmVhZCwgbnVsbHB0cik7CisKKyAgICAgICAgY2hlY2tSZXN1bHQoQCJSYW4gY29kZSBpbiBm
aXZlIGNvbmN1cnJlbnQgVk1zIHRoYXQgR0MnZCIsIG9rKTsKKyAgICB9CisgICAgCiAgICAgY3Vy
cmVudFRoaXNJbnNpZGVCbG9ja0dldHRlclRlc3QoKTsKICAgICBydW5EYXRlVGVzdHMoKTsKICAg
ICBydW5KU0V4cG9ydFRlc3RzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTU2OSw2ICs1NjksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5k
bGVTZXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTdGFj
ay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIiAvPgor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSGVscGVyUG9vbC5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTdGF0aXN0aWNzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFRpbWVyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFZlcmlmaWVyLmNwcCIgLz4KQEAgLTEzNTAsNiAr
MTM1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVN0YWNrLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVR5cGVzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcSGVhcEhlbHBlclBvb2wuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcElubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcSGVhcE9wZXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxIZWFwUm9vdFZpc2l0b3IuaCIgLz4KQEAgLTE4MDksNyArMTgxMSw2IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBQcm90b3R5cGUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha1NldENvbnN0cnVjdG9yLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtTZXRQcm90b3R5cGUuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha1JhbmRvbS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXcml0ZUJhcnJpZXIuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV3JpdGVCYXJyaWVySW5saW5lcy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGUuaCIgLz4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJl
dmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAt
MjkxLDYgKzI5MSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSGVscGVyUG9vbC5jcHAiPgorICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxoZWFwXEhlYXBTdGF0aXN0aWNzLmNwcCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0Zp
bHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTIyODgsNiArMjI5MSw5IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVh
cEhlbHBlclBvb2wuaCI+CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcElubGluZXMuaCI+CiAg
ICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTMxNjcsOSAr
MzE3Myw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtHQ01hcC5o
Ij4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrUmFuZG9tLmgiPgotICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllci5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQs
NiArMjc0LDggQEAKIAkJMEYzMDBCNzgxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjc3
MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi87IH07CiAJCTBGMzAwQjdCMThB
QjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMwMEI3OTE4QUIxQjE0
MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovOyB9OwogCQkw
RjMwMEI3QzE4QUIxQjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzAwQjdB
MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICovOyB9
OworCQkwRjMyQkQxMDFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMkJEMEUxQkIzNEYx
OTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCAqLzsgfTsKKwkJMEYzMkJEMTExQkIzNEYx
OTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjMyQkQwRjFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBl
clBvb2wuaCAqLzsgfTsKIAkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIx
NDcxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuY3BwICovOyB9OwogCQkwRjM0QjE0QTE2
RDQyMDEzMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNEIxNDgxNkQ0MjAwRTAwMUNEQTVBIC8qIERGR1VzZUtp
bmQuaCAqLzsgfTsKIAkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2lu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4
QjAwRjE3Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLzsgfTsKQEAgLTc3
NSw3ICs3NzcsNiBAQAogCQkxNDE0NDhDQjEzQTE3NkVDMDBGNUJBMUEgLyogTWFya2VkQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTQ0
OENBMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MTQ0OENEMTNBMTc4MzcwMEY1QkEx
QSAvKiBUaW55Qmxvb21GaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDE1
MDEzMzE1NEJCMTNGMDA1RDhDOTggLyogV2Vha1NldElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAv
KiBXZWFrU2V0SW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIwQkU3QTEwQUE2
RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyMTM1
OUEwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgKi87IH07CiAJCTE0MjgwODIzMTA3RUMw
MkMwMDEzRTdCMiAvKiBEZWJ1Z2dlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNjkyQTg1ODAyNTU1OTdEMDFGRjYwRjcgLyogRGVidWdnZXIuY3Bw
ICovOyB9OwogCQkxNDI4MDgyRDEwN0VDMDU3MDAxM0U3QjIgLyogQ2FsbERhdGEuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBNjJERkUwRTI4MjYy
MzAwMDRGMzBEIC8qIENhbGxEYXRhLmNwcCAqLzsgfTsKQEAgLTE2NjUsOCArMTY2Niw2IEBACiAJ
CUMyMjM5RDE3MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxMjE2MjYyQkREMDA1QUM1
RkQgLyogQ29weVZpc2l0b3IuY3BwICovOyB9OwogCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQg
LyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyMjM5RDEzMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyMjM5RDE5MTYyNjJC
REQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5
VmlzaXRvcklubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQlDMjIzOUQxQTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTUxNjI2MkJE
RDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLzsgfTsKLQkJQzIyMzlEMUIxNjI2MkJERDAwNUFD
NUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMjIzOUQxNjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMjI1NDk0MzE1RjdEQkFB
MDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzIyNTQ5NDIxNUY3REJBQTAwNjVFODk4IC8qIFNsb3RWaXNpdG9y
LmNwcCAqLzsgfTsKIAkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAw
OEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMyNDAzMDU1MTRCNDA0RTYwMDc5RUI2
NCAvKiBDb3BpZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDMjQwMzA1MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICov
OyB9OwpAQCAtMjExOSw2ICsyMTE4LDggQEAKIAkJMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8q
IERGR05vZGVPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9k
ZU9yaWdpbi5oOyBwYXRoID0gZGZnL0RGR05vZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYzMDBCNzkxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVnZXJDaGVja0Nv
bWJpbmluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdJbnRlZ2VyQ2hl
Y2tDb21iaW5pbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzAw
QjdBMThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFw
SGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFw
SGVscGVyUG9vbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzJCRDBGMUJC
MzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZWFwSGVscGVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdVc2VLaW5kLmNwcDsgcGF0aCA9IGRmZy9ERkdV
c2VLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzNEIxNDgxNkQ0MjAw
RTAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVXNlS2luZC5oOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMEYxN0NGMDc3RjAwQjE0NEQzIC8qIExMSW50RW50cnlwb2lu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludEVudHJ5cG9pbnQuY3BwOyBwYXRoID0gbGxp
bnQvTExJbnRFbnRyeXBvaW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2
MTYsNyArMjYxNyw2IEBACiAJCTE0MTQ0OENBMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9j
a1NldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXJrZWRCbG9ja1NldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE0NDhDQzEzQTE3ODM3MDBGNUJBMUEg
LyogVGlueUJsb29tRmlsdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRp
bnlCbG9vbUZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE1MDEzMjE1
NEJCMTNGMDA1RDhDOTggLyogV2Vha1NldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vha1NldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMTQyMEJFN0ExMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MjcxMTM4MEE0NjBCQkIwMDgwRUVFQSAvKiBKU0Jhc2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MjlENzdCMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcnByZXRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzUzNyw4ICszNTM3LDYgQEAKIAkJQzIyMzlEMTIxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENvcHlWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIy
MzlEMTMxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENvcHlWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMjM5RDE0MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1Ro
cmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ1RocmVhZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMjM5RDE2MTYyNjJCREQwMDVBQzVG
RCAvKiBHQ1RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ1RocmVh
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjI1NDk0MjE1RjdEQkFBMDA2NUU4
OTggLyogU2xvdFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2xvdFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjQwMzA1
MzE0QjQwNEM5MDA3OUVCNjQgLyogQ29waWVkU3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29waWVkU3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFN0YXRpc3RpY3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1MSw4ICs0MjQ5LDYgQEAKIAkJCQkyQUFC
Q0RFNjE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggKi8sCiAJCQkJMkEzNDNGNzQxOEEx
NzQ4QjAwMzlCMDg1IC8qIEdDU2VnbWVudGVkQXJyYXkuaCAqLywKIAkJCQkyQTM0M0Y3NzE4QTE3
NDlEMDAzOUIwODUgLyogR0NTZWdtZW50ZWRBcnJheUlubGluZXMuaCAqLywKLQkJCQlDMjIzOUQx
NTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3BwICovLAotCQkJCUMyMjM5RDE2MTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oICovLAogCQkJCTE0MkUzMTJCMTM0RkYwQTYwMEFGQURC
NSAvKiBIYW5kbGUuaCAqLywKIAkJCQlDMjgzMThGRjE2RkU0QjdEMDAxNTdCRkQgLyogSGFuZGxl
QmxvY2suaCAqLywKIAkJCQlDMjgzMTkwMTE2RkU1MzNFMDAxNTdCRkQgLyogSGFuZGxlQmxvY2tJ
bmxpbmVzLmggKi8sCkBAIC00MjYzLDYgKzQyNTksOCBAQAogCQkJCTE0NkZBNUE4MTM3OEY2QjAw
MDM2MjdBMyAvKiBIYW5kbGVUeXBlcy5oICovLAogCQkJCTE0QkE3QTk1MTNBQURGRjgwMDVCN0My
QyAvKiBIZWFwLmNwcCAqLywKIAkJCQkxNEJBN0E5NjEzQUFERkY4MDA1QjdDMkMgLyogSGVhcC5o
ICovLAorCQkJCTBGMzJCRDBFMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAg
Ki8sCisJCQkJMEYzMkJEMEYxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmggKi8s
CiAJCQkJQzJEQTc3ODIxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggKi8sCiAJCQkJ
MkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovLAogCQkJ
CTJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi8sCkBAIC01MDky
LDcgKzUwOTAsNiBAQAogCQkJCUE3Q0EzQUVBMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0
YS5oICovLAogCQkJCUE3Q0EzQURGMTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBl
LmNwcCAqLywKIAkJCQlBN0NBM0FFMDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlw
ZS5oICovLAotCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8s
CiAJCQkJNzA5RkI4NjMxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAg
Ki8sCiAJCQkJNzA5RkI4NjQxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5o
ICovLAogCQkJCTcwOUZCODY1MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNw
cCAqLywKQEAgLTYxNTUsNiArNjE1Miw3IEBACiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMTYxNTFDNUQ0RjAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUQzMzk3MTdG
RkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMzJC
RDExMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTMxLDcgKzY5MjksNiBAQAogCQkJCUE3Q0EzQUU0
MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3Q0EzQUVDMTdEQTUxNjgwMDY1MzhBRiAvKiBXZWFrTWFwRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAotCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9t
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vha1Jl
ZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTExNEVFMUFDQzAw
RDZENUQ0IC8qIFdlYWtTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODZBMUFFMzM1QzYw
MDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA2Miw2
ICs4MDU5LDcgQEAKIAkJCQkwRkY0Mjc0MDE1OEVCRThCMDA0Q0I5RkYgLyogdWRpczg2X2RlY29k
ZS5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDMxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9pbnB1dC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NEQxNThFQkZFNjAwNENCOUZGIC8q
IHVkaXM4Nl9pdGFiX2hvbGRlci5jIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzMkJEMTAxQkIzNEYx
OTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQy
NzQ1MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLWF0dC5jIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNDI3NDYxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4taW50ZWwuYyBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjQyNzQ3MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfc3luLmMgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTAyMTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgogI2luY2x1ZGUgIk9wdGlvbnMu
aCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtSYW5kb20uaD4KIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1RocmVhZC5jcHAJKHJldmlzaW9uIDE5MDIxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJHQ1RocmVhZC5oIgotCi0jaW5jbHVkZSAiQ29weVZpc2l0b3IuaCIKLSNpbmNs
dWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotR0NUaHJlYWQ6OkdDVGhyZWFkKEhlYXAmIGhlYXAsIHN0ZDo6dW5pcXVl
X3B0cjxTbG90VmlzaXRvcj4gc2xvdFZpc2l0b3IpCi0gICAgOiBtX3RocmVhZElEKDApCi0gICAg
LCBtX2hlYXAoaGVhcCkKLSAgICAsIG1fc2xvdFZpc2l0b3IoV1RGOjptb3ZlKHNsb3RWaXNpdG9y
KSkKLXsKLX0KLQotVGhyZWFkSWRlbnRpZmllciBHQ1RocmVhZDo6dGhyZWFkSUQoKQotewotICAg
IEFTU0VSVChtX3RocmVhZElEKTsKLSAgICByZXR1cm4gbV90aHJlYWRJRDsKLX0KLQotdm9pZCBH
Q1RocmVhZDo6aW5pdGlhbGl6ZVRocmVhZElEKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQpCi17
Ci0gICAgQVNTRVJUKCFtX3RocmVhZElEKTsKLSAgICBtX3RocmVhZElEID0gdGhyZWFkSUQ7Ci19
Ci0KLVNsb3RWaXNpdG9yKiBHQ1RocmVhZDo6c2xvdFZpc2l0b3IoKQotewotICAgIEFTU0VSVCht
X3Nsb3RWaXNpdG9yKTsKLSAgICByZXR1cm4gbV9zbG90VmlzaXRvci5nZXQoKTsKLX0KLQotR0NQ
aGFzZSBHQ1RocmVhZDo6d2FpdEZvck5leHRQaGFzZSgpCi17Ci0gICAgc3RkOjp1bmlxdWVfbG9j
azxMb2NrPiBsb2NrKG1faGVhcC5tX3BoYXNlTXV0ZXgpOwotICAgIG1faGVhcC5tX3BoYXNlQ29u
ZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1faGVhcC5tX2djVGhy
ZWFkc1Nob3VsZFdhaXQ7IH0pOwotCi0gICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVh
ZHMtLTsKLSAgICBpZiAoIW1faGVhcC5tX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKQotICAgICAg
ICBtX2hlYXAubV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeU9uZSgpOwotCi0gICAg
bV9oZWFwLm1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ssIFt0aGlzXSB7IHJldHVy
biBtX2hlYXAubV9jdXJyZW50UGhhc2UgIT0gTm9QaGFzZTsgfSk7Ci0gICAgbV9oZWFwLm1fbnVt
YmVyT2ZBY3RpdmVHQ1RocmVhZHMrKzsKLSAgICByZXR1cm4gbV9oZWFwLm1fY3VycmVudFBoYXNl
OwotfQotCi12b2lkIEdDVGhyZWFkOjpnY1RocmVhZE1haW4oKQotewotICAgIEdDUGhhc2UgY3Vy
cmVudFBoYXNlOwotICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIC8vIFdhaXQgZm9y
IHRoZSBtYWluIHRocmVhZCB0byBmaW5pc2ggY3JlYXRpbmcgYW5kIGluaXRpYWxpemluZyB1cy4g
VGhlIG1haW4gdGhyZWFkIGdyYWJzIHRoaXMgbG9jayBiZWZvcmUgCi0gICAgLy8gY3JlYXRpbmcg
dGhpcyB0aHJlYWQuIFdlIGFyZW4ndCBndWFyYW50ZWVkIHRvIGhhdmUgYSB2YWxpZCB0aHJlYWRJ
RCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgcmVsZWFzZXMgdGhpcyBsb2NrLgotICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9oZWFwLm1fcGhhc2VNdXRleCk7Ci0gICAg
fQotICAgIHsKLSAgICAgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCptX3Nsb3RWaXNp
dG9yKTsKLSAgICAgICAgd2hpbGUgKChjdXJyZW50UGhhc2UgPSB3YWl0Rm9yTmV4dFBoYXNlKCkp
ICE9IEV4aXQpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IEVhY2ggcGhhc2UgaXMgcmVzcG9uc2li
bGUgZm9yIGl0cyBvd24gdGVybWluYXRpb24gY29uZGl0aW9ucy4gVGhlIGNvbW1lbnRzIGJlbG93
IGRlc2NyaWJlIAotICAgICAgICAgICAgLy8gaG93IGVhY2ggcGhhc2UgcmVhY2hlcyB0ZXJtaW5h
dGlvbi4KLSAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudFBoYXNlKSB7Ci0gICAgICAgICAgICBj
YXNlIE1hcms6Ci0gICAgICAgICAgICAgICAgbV9zbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVk
KFNsb3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKLSAgICAgICAgICAgICAgICAvLyBHQ1RocmVhZHMg
b25seSByZXR1cm4gZnJvbSBkcmFpbkZyb21TaGFyZWQoKSBpZiB0aGUgbWFpbiB0aHJlYWQgc2V0
cyB0aGUgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0IAotICAgICAgICAgICAgICAgIC8vIGZs
YWcgaW4gdGhlIEdDVGhyZWFkU2hhcmVkRGF0YS4gVGhlIG9ubHkgd2F5IHRoZSBtYWluIHRocmVh
ZCBzZXRzIHRoYXQgZmxhZyBpcyBpZiBpdCByZWFsaXplcyAKLSAgICAgICAgICAgICAgICAvLyB0
aGF0IGFsbCBvZiB0aGUgdmFyaW91cyBzdWJwaGFzZXMgaW4gSGVhcDo6bWFya1Jvb3RzKCkgaGF2
ZSBiZWVuIGZ1bGx5IGZpbmlzaGVkIGFuZCB0aGVyZSBpcyAKLSAgICAgICAgICAgICAgICAvLyBu
byBtb3JlIG1hcmtpbmcgd29yayB0byBkbyBhbmQgYWxsIG9mIHRoZSBHQ1RocmVhZHMgYXJlIGlk
bGUsIG1lYW5pbmcgbm8gbW9yZSB3b3JrIGNhbiBiZSBnZW5lcmF0ZWQuCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENvcHk6IHsKLSAgICAgICAgICAgICAgICBDb3B5
VmlzaXRvciBjb3B5VmlzaXRvcihtX2hlYXApOwotICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9y
LnN0YXJ0Q29weWluZygpOwotICAgICAgICAgICAgICAgIGNvcHlWaXNpdG9yLmNvcHlGcm9tU2hh
cmVkKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2Uga25vdyB3ZSdyZSBkb25lIGNvcHlpbmcgd2hl
biB3ZSByZXR1cm4gZnJvbSBjb3B5RnJvbVNoYXJlZCgpIGJlY2F1c2Ugd2Ugd291bGQgCi0gICAg
ICAgICAgICAgICAgLy8gb25seSBkbyBzbyBpZiB0aGVyZSB3ZXJlIG5vIG1vcmUgY2h1bmtzIG9m
IGNvcHlpbmcgd29yayBsZWZ0IHRvIGRvLiBXaGVuIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAg
ICAgIC8vIG1vcmUgY29weWluZyB3b3JrIHRvIGRvLCB0aGUgbWFpbiB0aHJlYWQgd2lsbCB3YWl0
IGluIENvcGllZFNwYWNlOjpkb25lQ29weWluZygpIHVudGlsIAotICAgICAgICAgICAgICAgIC8v
IGFsbCBvZiB0aGUgYmxvY2tzIHRoYXQgdGhlIEdDVGhyZWFkcyBib3Jyb3dlZCBoYXZlIGJlZW4g
cmV0dXJuZWQuIGRvbmVDb3B5aW5nKCkgCi0gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvdXIg
Ym9ycm93ZWQgQ29waWVkQmxvY2ssIGFsbG93aW5nIHRoZSBjb3B5aW5nIHBoYXNlIHRvIGZpbmlz
aC4KLSAgICAgICAgICAgICAgICBjb3B5VmlzaXRvci5kb25lQ29weWluZygpOwotCi0gICAgICAg
ICAgICAgICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7
Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNh
c2UgTm9QaGFzZToKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFeGl0OgotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR0NUaHJl
YWQ6OmdjVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGRhdGEpCi17Ci0gICAgR0NUaHJlYWQqIHRocmVh
ZCA9IHN0YXRpY19jYXN0PEdDVGhyZWFkKj4oZGF0YSk7Ci0gICAgdGhyZWFkLT5nY1RocmVhZE1h
aW4oKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9HQ1RocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0dDVGhyZWFkLmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0dDVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgR0NUaHJlYWRfaAotI2RlZmluZSBHQ1RocmVhZF9oCi0KLSNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBIZWFwOwotY2xhc3MgU2xvdFZpc2l0b3I7Ci0KLWVudW0gR0NQaGFzZSB7
Ci0gICAgTm9QaGFzZSwKLSAgICBNYXJrLAotICAgIENvcHksCi0gICAgRXhpdAotfTsKLQotY2xh
c3MgR0NUaHJlYWQgewotcHVibGljOgotICAgIEdDVGhyZWFkKEhlYXAmLCBzdGQ6OnVuaXF1ZV9w
dHI8U2xvdFZpc2l0b3I+KTsKLQotICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcigpOwotICAg
IFRocmVhZElkZW50aWZpZXIgdGhyZWFkSUQoKTsKLSAgICB2b2lkIGluaXRpYWxpemVUaHJlYWRJ
RChUaHJlYWRJZGVudGlmaWVyKTsKLQotICAgIHN0YXRpYyB2b2lkIGdjVGhyZWFkU3RhcnRGdW5j
KHZvaWQqKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGdjVGhyZWFkTWFpbigpOwotICAgIEdDUGhh
c2Ugd2FpdEZvck5leHRQaGFzZSgpOwotCi0gICAgVGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElE
OwotICAgIEhlYXAmIG1faGVhcDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG1f
c2xvdFZpc2l0b3I7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDksIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2Vp
ZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NBY3Rpdml0eUNh
bGxiYWNrLmgiCiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSGVhcEhlbHBlclBvb2wuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9uU2NvcGUu
aCIKICNpbmNsdWRlICJIZWFwUm9vdFZpc2l0b3IuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGlj
cy5oIgpAQCAtMzM2LDcgKzMzNyw2IEBAIEhlYXA6OkhlYXAoVk0qIHZtLCBIZWFwVHlwZSBoZWFw
VHlwZSkKICAgICAsIG1fZGVwcmVjYXRlZEV4dHJhTWVtb3J5U2l6ZSgwKQogICAgICwgbV9tYWNo
aW5lVGhyZWFkcyh0aGlzKQogICAgICwgbV9zbG90VmlzaXRvcigqdGhpcykKLSAgICAsIG1fY29w
eVZpc2l0b3IoKnRoaXMpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAsIG1faXNTYWZlVG9D
b2xsZWN0KGZhbHNlKQogICAgICwgbV93cml0ZUJhcnJpZXJCdWZmZXIoMjU2KQpAQCAtMzU2LDIy
ICszNTYsOCBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgVVNF
KENGKQogICAgICwgbV9kZWxheWVkUmVsZWFzZVJlY3Vyc2lvbkNvdW50KDApCiAjZW5kaWYKKyAg
ICAsIG1faGVscGVyQ2xpZW50KCZoZWFwSGVscGVyUG9vbCgpKQogewotICAgIHsKLSAgICAgICAg
Ly8gR3JhYiB0aGUgbG9jayBzbyB0aGUgbmV3IEdDIHRocmVhZHMgY2FuIGJlIHByb3Blcmx5IGlu
aXRpYWxpemVkIGJlZm9yZSB0aGV5IHN0YXJ0IHJ1bm5pbmcuCi0gICAgICAgIHN0ZDo6dW5pcXVl
X2xvY2s8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgT3B0aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzKys7Ci0gICAgICAgICAgICBHQ1RocmVhZCogbmV3
VGhyZWFkID0gbmV3IEdDVGhyZWFkKCp0aGlzLCBzdGQ6Om1ha2VfdW5pcXVlPFNsb3RWaXNpdG9y
PigqdGhpcykpOwotICAgICAgICAgICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCA9IGNyZWF0
ZVRocmVhZChHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmMsIG5ld1RocmVhZCwgIkphdmFTY3Jp
cHRDb3JlOjpNYXJraW5nIik7Ci0gICAgICAgICAgICBuZXdUaHJlYWQtPmluaXRpYWxpemVUaHJl
YWRJRCh0aHJlYWRJRCk7Ci0gICAgICAgICAgICBtX2djVGhyZWFkcy5hcHBlbmQobmV3VGhyZWFk
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV2FpdCBmb3IgYWxsIHRoZSBHQ1Ro
cmVhZHMgdG8gZ2V0IHRvIHRoZSByaWdodCBwbGFjZS4KLSAgICAgICAgbV9hY3Rpdml0eUNvbmRp
dGlvblZhcmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0aXZl
R0NUaHJlYWRzOyB9KTsKLSAgICB9Ci0gICAgCiAgICAgbV9zdG9yYWdlU3BhY2UuaW5pdCgpOwog
ICAgIGlmIChPcHRpb25zOjp2ZXJpZnlIZWFwKCkpCiAgICAgICAgIG1fdmVyaWZpZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPEhlYXBWZXJpZmllcj4odGhpcywgT3B0aW9uczo6bnVtYmVyT2ZHQ0N5Y2xl
c1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uKCkpOwpAQCAtMzgxLDIxICszNjcsNiBAQCBIZWFwOjp+
SGVhcCgpCiB7CiAgICAgZm9yIChXZWFrQmxvY2sqIGJsb2NrIDogbV9sb2dpY2FsbHlFbXB0eVdl
YWtCbG9ja3MpCiAgICAgICAgIFdlYWtCbG9jazo6ZGVzdHJveShibG9jayk7Ci0KLSAgICAvLyBE
ZXN0cm95IG91ciBtYXJraW5nIHRocmVhZHMuCi0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8TG9jaz4gbWFya2luZ0xvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBzdGQ6OmxvY2tf
Z3VhcmQ8TG9jaz4gcGhhc2VMb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgICAgIEFTU0VSVChtX2N1
cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKLSAgICAgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRF
eGl0ID0gdHJ1ZTsKLSAgICAgICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gZmFsc2U7Ci0gICAg
ICAgIG1fY3VycmVudFBoYXNlID0gRXhpdDsKLSAgICAgICAgbV9waGFzZUNvbmRpdGlvblZhcmlh
YmxlLm5vdGlmeUFsbCgpOwotICAgIH0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9n
Y1RocmVhZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
bV9nY1RocmVhZHNbaV0tPnRocmVhZElEKCkpOwotICAgICAgICBkZWxldGUgbV9nY1RocmVhZHNb
aV07Ci0gICAgfQogfQogCiBib29sIEhlYXA6OmlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKQpA
QCAtNTcwLDEyICs1NDEsMzkgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRU
aW1lLAogCiAgICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikK
ICAgICAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwotICAgIHsKLSAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5nTXV0ZXgpOwotICAgICAgICBtX3BhcmFsbGVsTWFy
a2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKLSAgICAgICAgc3RhcnROZXh0UGhhc2UoTWFyayk7Ci0g
ICAgfQorCisgICAgbV9zaG91bGRIYXNoQ29ucyA9IG1fdm0tPmhhdmVFbm91Z2hOZXdTdHJpbmdz
VG9IYXNoQ29ucygpOworCisgICAgbV9wYXJhbGxlbE1hcmtlcnNTaG91bGRFeGl0ID0gZmFsc2U7
CisKKyAgICBtX2hlbHBlckNsaWVudC5zZXRGdW5jdGlvbigKKyAgICAgICAgW3RoaXNdICgpIHsK
KyAgICAgICAgICAgIFNsb3RWaXNpdG9yKiBzbG90VmlzaXRvcjsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3BhcmFsbGVsU2xvdFZpc2l0b3JMb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAobV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNp
dG9yPiBuZXdWaXNpdG9yID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlx
dWU8U2xvdFZpc2l0b3I+KCp0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvdFZpc2l0b3Ig
PSBuZXdWaXNpdG9yLmdldCgpOworICAgICAgICAgICAgICAgICAgICBtX3BhcmFsbGVsU2xvdFZp
c2l0b3JzLmFwcGVuZChXVEY6Om1vdmUobmV3VmlzaXRvcikpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG1fYXZhaWxhYmxlUGFyYWxs
ZWxTbG90VmlzaXRvcnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFBhcmFsbGVsTW9kZUVuYWJsZXIgcGFyYWxsZWxNb2RlRW5hYmxl
cigqc2xvdFZpc2l0b3IpOworICAgICAgICAgICAgICAgIHNsb3RWaXNpdG9yLT5kaWRTdGFydE1h
cmtpbmcoKTsKKyAgICAgICAgICAgICAgICBzbG90VmlzaXRvci0+ZHJhaW5Gcm9tU2hhcmVkKFNs
b3RWaXNpdG9yOjpTbGF2ZURyYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxv
Y2spOworICAgICAgICAgICAgICAgIG1fYXZhaWxhYmxlUGFyYWxsZWxTbG90VmlzaXRvcnMuYXBw
ZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKICAgICBtX3Ns
b3RWaXNpdG9yLmRpZFN0YXJ0TWFya2luZygpOworICAgIAogICAgIEhlYXBSb290VmlzaXRvciBo
ZWFwUm9vdFZpc2l0b3IobV9zbG90VmlzaXRvcik7CiAKICAgICB7CkBAIC02MDMsOCArNjAxLDcg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91YmxlIGdjU3RhcnRUaW1lLAogICAgICAgICBtX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwogICAgICAgICBtX21hcmtpbmdDb25kaXRp
b25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKICAgICB9Ci0gICAgQVNTRVJUKG1fY3VycmVudFBoYXNl
ID09IE1hcmspOwotICAgIGVuZEN1cnJlbnRQaGFzZSgpOworICAgIG1faGVscGVyQ2xpZW50LmZp
bmlzaCgpOwogICAgIHVwZGF0ZU9iamVjdENvdW50cyhnY1N0YXJ0VGltZSk7CiAgICAgcmVzZXRW
aXNpdG9ycygpOwogfQpAQCAtNjMzLDE1ICs2MzAsMTUgQEAgdm9pZCBIZWFwOjpjb3B5QmFja2lu
Z1N0b3JlcygpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX2NvcHlJbmRleCA9IDA7CiAg
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0YXJ0TmV4dFBoYXNlKENvcHkpOwotICAgICAg
ICAKLSAgICAgICAgbV9jb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKLSAgICAgICAgbV9jb3B5
VmlzaXRvci5jb3B5RnJvbVNoYXJlZCgpOwotICAgICAgICBtX2NvcHlWaXNpdG9yLmRvbmVDb3B5
aW5nKCk7CiAKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IENvcHkpOwotICAgICAg
ICBlbmRDdXJyZW50UGhhc2UoKTsKKyAgICAgICAgbV9oZWxwZXJDbGllbnQucnVuRnVuY3Rpb25J
blBhcmFsbGVsKAorICAgICAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBDb3B5
VmlzaXRvciBjb3B5VmlzaXRvcigqdGhpcyk7CisgICAgICAgICAgICAgICAgY29weVZpc2l0b3Iu
c3RhcnRDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgY29weVZpc2l0b3IuY29weUZyb21TaGFy
ZWQoKTsKKyAgICAgICAgICAgICAgICBjb3B5VmlzaXRvci5kb25lQ29weWluZygpOworICAgICAg
ICAgICAgICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5Rm9yVGhpc1RocmVhZCgp
OworICAgICAgICAgICAgfSk7CiAgICAgfQogICAgIAogICAgIG1fc3RvcmFnZVNwYWNlLmRvbmVD
b3B5aW5nKCk7CkBAIC04NzAsOCArODY3LDggQEAgdm9pZCBIZWFwOjpyZXNldFZpc2l0b3JzKCkK
IHsKICAgICBtX3Nsb3RWaXNpdG9yLnJlc2V0KCk7CiAKLSAgICBmb3IgKEdDVGhyZWFkKiB0aHJl
YWQgOiBtX2djVGhyZWFkcykKLSAgICAgICAgdGhyZWFkLT5zbG90VmlzaXRvcigpLT5yZXNldCgp
OworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJhbGxlbFNsb3RWaXNpdG9y
cykKKyAgICAgICAgcGFyYWxsZWxWaXNpdG9yLT5yZXNldCgpOwogCiAgICAgQVNTRVJUKG1fc2hh
cmVkTWFya1N0YWNrLmlzRW1wdHkoKSk7CiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5y
ZW1vdmVBbGwoKTsKQEAgLTE1MzIsNDUgKzE1MjksMjUgQEAgYm9vbCBIZWFwOjpzd2VlcE5leHRM
b2dpY2FsbHlFbXB0eVdlYWtCbAogc2l6ZV90IEhlYXA6OnRocmVhZFZpc2l0Q291bnQoKQogeyAg
ICAgICAKICAgICB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9n
Y1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPnZpc2l0Q291bnQoKTsKKyAgICBmb3IgKGF1dG8m
IHBhcmFsbGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJlc3Vs
dCArPSBwYXJhbGxlbFZpc2l0b3ItPnZpc2l0Q291bnQoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBzaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXNWaXNpdGVkKCkKIHsgICAgICAgCiAgICAgc2l6
ZV90IHJlc3VsdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRz
LnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNp
dG9yKCktPmJ5dGVzVmlzaXRlZCgpOworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDog
bV9wYXJhbGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlzaXRv
ci0+Ynl0ZXNWaXNpdGVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc2l6ZV90IEhlYXA6
OnRocmVhZEJ5dGVzQ29waWVkKCkKIHsgICAgICAgCiAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ2NUaHJlYWRzLnNpemUoKTsgKytpKQotICAg
ICAgICByZXN1bHQgKz0gbV9nY1RocmVhZHNbaV0tPnNsb3RWaXNpdG9yKCktPmJ5dGVzQ29waWVk
KCk7CisgICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0
b3JzKQorICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc0NvcGllZCgpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSGVhcDo6c3RhcnROZXh0UGhhc2UoR0NQaGFz
ZSBwaGFzZSkKLXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX3BoYXNlTXV0ZXgp
OwotICAgIEFTU0VSVCghbV9nY1RocmVhZHNTaG91bGRXYWl0KTsKLSAgICBBU1NFUlQobV9jdXJy
ZW50UGhhc2UgPT0gTm9QaGFzZSk7Ci0gICAgbV9nY1RocmVhZHNTaG91bGRXYWl0ID0gdHJ1ZTsK
LSAgICBtX2N1cnJlbnRQaGFzZSA9IHBoYXNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJs
ZS5ub3RpZnlBbGwoKTsKLX0KLQotdm9pZCBIZWFwOjplbmRDdXJyZW50UGhhc2UoKQotewotICAg
IEFTU0VSVChtX2djVGhyZWFkc1Nob3VsZFdhaXQpOwotICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9j
az4gbG9jayhtX3BoYXNlTXV0ZXgpOwotICAgIG1fY3VycmVudFBoYXNlID0gTm9QaGFzZTsKLSAg
ICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSBmYWxzZTsKLSAgICBtX3BoYXNlQ29uZGl0aW9uVmFy
aWFibGUubm90aWZ5QWxsKCk7Ci0gICAgbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlLndhaXQo
bG9jaywgW3RoaXNdIHsgcmV0dXJuICFtX251bWJlck9mQWN0aXZlR0NUaHJlYWRzOyB9KTsKLX0K
LQogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIK
ICNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgogI2luY2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVk
U2V0LmgiCi0jaW5jbHVkZSAiR0NUaHJlYWQuaCIKICNpbmNsdWRlICJIYW5kbGVTZXQuaCIKICNp
bmNsdWRlICJIYW5kbGVTdGFjay5oIgogI2luY2x1ZGUgIkhlYXBPcGVyYXRpb24uaCIKQEAgLTQ2
LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJXcml0ZUJhcnJpZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFyYWxsZWxIZWxwZXJQb29sLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNDcs
OCArMzQ3LDYgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkRHVwU3RyaW5ncygpOwogCiAg
ICAgdm9pZCBnZXROZXh0QmxvY2tzVG9Db3B5KHNpemVfdCYsIHNpemVfdCYpOwotICAgIHZvaWQg
c3RhcnROZXh0UGhhc2UoR0NQaGFzZSk7Ci0gICAgdm9pZCBlbmRDdXJyZW50UGhhc2UoKTsKIAog
ICAgIGNvbnN0IEhlYXBUeXBlIG1faGVhcFR5cGU7CiAgICAgY29uc3Qgc2l6ZV90IG1fcmFtU2l6
ZTsKQEAgLTM4Myw3ICszODEsMTQgQEAgcHJpdmF0ZToKICAgICBNYWNoaW5lVGhyZWFkcyBtX21h
Y2hpbmVUaHJlYWRzOwogICAgIAogICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7Ci0gICAg
Q29weVZpc2l0b3IgbV9jb3B5VmlzaXRvcjsKKworICAgIC8vIFdlIHBvb2wgdGhlIHNsb3Qgdmlz
aXRvcnMgdXNlZCBieSBwYXJhbGxlbCBtYXJraW5nIHRocmVhZHMuIEl0J3MgdXNlZnVsIHRvIGJl
IGFibGUgdG8KKyAgICAvLyBlbnVtZXJhdGUgb3ZlciB0aGVtLCBhbmQgaXQncyB1c2VmdWwgdG8g
aGF2ZSB0aGVtIGNhY2hlIHNvbWUgc21hbGwgYW1vdW50IG9mIG1lbW9yeSBmcm9tCisgICAgLy8g
b25lIEdDIHRvIHRoZSBuZXh0LiBHQyBtYXJraW5nIHRocmVhZHMgY2xhaW0gdGhlc2UgYXQgdGhl
IHN0YXJ0IG9mIG1hcmtpbmcsIGFuZCByZXR1cm4KKyAgICAvLyB0aGVtIGF0IHRoZSBlbmQuCisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4+IG1fcGFyYWxsZWxTbG90Vmlz
aXRvcnM7CisgICAgVmVjdG9yPFNsb3RWaXNpdG9yKj4gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RW
aXNpdG9yczsKKyAgICBMb2NrIG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2s7CiAKICAgICBIYW5k
bGVTZXQgbV9oYW5kbGVTZXQ7CiAgICAgSGFuZGxlU3RhY2sgbV9oYW5kbGVTdGFjazsKQEAgLTQy
Miw4ICs0MjcsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zIHsgZmFs
c2UgfTsKIAotICAgIFZlY3RvcjxHQ1RocmVhZCo+IG1fZ2NUaHJlYWRzOwotCiAgICAgTG9jayBt
X21hcmtpbmdNdXRleDsKICAgICBDb25kaXRpb24gbV9tYXJraW5nQ29uZGl0aW9uVmFyaWFibGU7
CiAgICAgTWFya1N0YWNrQXJyYXkgbV9zaGFyZWRNYXJrU3RhY2s7CkBAIC00MzksMTUgKzQ0Miwx
MCBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2NvcHlJbmRleCB7IDAgfTsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNfYmxvY2tGcmFnbWVudExlbmd0aCA9IDMyOwogCi0gICAgTG9jayBtX3Bo
YXNlTXV0ZXg7Ci0gICAgQ29uZGl0aW9uIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZTsKLSAgICBD
b25kaXRpb24gbV9hY3Rpdml0eUNvbmRpdGlvblZhcmlhYmxlOwotICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZBY3RpdmVHQ1RocmVhZHMgeyAwIH07Ci0gICAgYm9vbCBtX2djVGhyZWFkc1Nob3VsZFdh
aXQgeyBmYWxzZSB9OwotICAgIEdDUGhhc2UgbV9jdXJyZW50UGhhc2UgeyBOb1BoYXNlIH07Ci0K
ICAgICBMaXN0YWJsZUhhbmRsZXI8V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcj46Okxpc3QgbV93ZWFr
UmVmZXJlbmNlSGFydmVzdGVyczsKICAgICBMaXN0YWJsZUhhbmRsZXI8VW5jb25kaXRpb25hbEZp
bmFsaXplcj46Okxpc3QgbV91bmNvbmRpdGlvbmFsRmluYWxpemVyczsKKworICAgIFBhcmFsbGVs
SGVscGVyQ2xpZW50IG1faGVscGVyQ2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkhlYXBIZWxwZXJQb29sLmgiCisKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlICJPcHRpb25z
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitQYXJhbGxlbEhlbHBlclBvb2wmIGhlYXBIZWxwZXJQ
b29sKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUhlbHBlclBvb2xP
bmNlRmxhZzsKKyAgICBzdGF0aWMgUGFyYWxsZWxIZWxwZXJQb29sKiBoZWxwZXJQb29sOworICAg
IHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBpbml0aWFsaXplSGVscGVyUG9vbE9uY2VGbGFnLAor
ICAgICAgICBbXSB7CisgICAgICAgICAgICBoZWxwZXJQb29sID0gbmV3IFBhcmFsbGVsSGVscGVy
UG9vbCgpOworICAgICAgICAgICAgaGVscGVyUG9vbC0+ZW5zdXJlVGhyZWFkcyhPcHRpb25zOjpu
dW1iZXJPZkdDTWFya2VycygpIC0gMSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqaGVscGVy
UG9vbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEhlYXBIZWxwZXJQb29sX2gKKyNkZWZpbmUgSGVhcEhlbHBlclBvb2xfaAorCisjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworUGFy
YWxsZWxIZWxwZXJQb29sJiBoZWFwSGVscGVyUG9vbCgpOworCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIEhlYXBIZWxwZXJQb29sX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3
LDggQEAgdm9pZCBNYXJrU3RhY2tBcnJheTo6c3RlYWxTb21lQ2VsbHNGcm9tKAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc2l6ZV90IG51bWJlck9mQ2VsbHNUb1N0ZWFsID0gKG90aGVy
LnNpemUoKSArIGlkbGVUaHJlYWRDb3VudCAtIDEpIC8gaWRsZVRocmVhZENvdW50OyAvLyBSb3Vu
ZCB1cCB0byBzdGVhbCAxIC8gMS4KKyAgICAvLyBTdGVhbCBjZWlsKG90aGVyLnNpemUoKSAvIGlk
bGVUaHJlYWRDb3VudCkgdGhpbmdzLgorICAgIHNpemVfdCBudW1iZXJPZkNlbGxzVG9TdGVhbCA9
IChvdGhlci5zaXplKCkgKyBpZGxlVGhyZWFkQ291bnQgLSAxKSAvIGlkbGVUaHJlYWRDb3VudDsK
ICAgICB3aGlsZSAobnVtYmVyT2ZDZWxsc1RvU3RlYWwtLSA+IDAgJiYgb3RoZXIuY2FuUmVtb3Zl
TGFzdCgpKQogICAgICAgICBhcHBlbmQob3RoZXIucmVtb3ZlTGFzdCgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAJKHJldmlzaW9uIDE5MDIx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgi
CiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMu
aCIKLSNpbmNsdWRlICJHQ1RocmVhZC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRl
ICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIlZNLmgiCkBAIC02NywxMCArNjYs
NyBAQCB2b2lkIFNsb3RWaXNpdG9yOjpkaWRTdGFydE1hcmtpbmcoKQogICAgIGlmIChoZWFwKCkt
Pm9wZXJhdGlvbkluUHJvZ3Jlc3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJU
KG1fb3BhcXVlUm9vdHMuaXNFbXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4K
IAotICAgIG1faGVhcC5tX3Nob3VsZEhhc2hDb25zID0gbV9oZWFwLm1fdm0tPmhhdmVFbm91Z2hO
ZXdTdHJpbmdzVG9IYXNoQ29ucygpOwogICAgIG1fc2hvdWxkSGFzaENvbnMgPSBtX2hlYXAubV9z
aG91bGRIYXNoQ29uczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9oZWFwLm1fZ2NU
aHJlYWRzLnNpemUoKTsgKytpKQotICAgICAgICBtX2hlYXAubV9nY1RocmVhZHNbaV0tPnNsb3RW
aXNpdG9yKCktPm1fc2hvdWxkSGFzaENvbnMgPSBtX2hlYXAubV9zaG91bGRIYXNoQ29uczsKIH0K
IAogdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQpAQCAtMjIxLDcgKzIxNyw3IEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmRyYWluRnJvbVNoYXJlZChTaGFyZWQKICAgICAgICAgICAgICAgICBpZiAobV9o
ZWFwLm1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAKKwogICAgICAgICAgICAgbV9zdGFjay5z
dGVhbFNvbWVDZWxsc0Zyb20oCiAgICAgICAgICAgICAgICAgbV9oZWFwLm1fc2hhcmVkTWFya1N0
YWNrLCBtX2hlYXAubV9udW1iZXJPZldhaXRpbmdQYXJhbGxlbE1hcmtlcnMpOwogICAgICAgICAg
ICAgbV9oZWFwLm1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMrKzsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQmluYXJ5U3dpdGNoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkocmV2aXNpb24gMTkwMjE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5hcnlTd2l0Y2guaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCi0jaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgorI2luY2x1ZGUgPHd0Zi9XZWFr
UmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db2RlQ2FjaGUuaAkocmV2aXNpb24gMTkwMjE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICsz
MSwxMSBAQAogI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJTdHJvbmcuaCIKICNp
bmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAiV2Vha1JhbmRvbS5oIgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5MDIxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcg
KzU0LDYgQEAKICNpbmNsdWRlICJUeXBlZEFycmF5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlZN
RW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSAiV2Vha1Jh
bmRvbS5oIgogI2luY2x1ZGUgPHd0Zi9CYWcuaD4KICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJB
bGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KQEAgLTY2LDYgKzY1LDcgQEAK
ICNpbmNsdWRlIDx3dGYvU3RhY2tCb3VuZHMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU3BlY2lmaWMuaD4KKyNpbmNsdWRlIDx3
dGYvV2Vha1JhbmRvbS5oPgogI2luY2x1ZGUgPHd0Zi9XVEZUaHJlYWREYXRhLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3ltYm9sUmVnaXN0cnkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmgJ
KHJldmlzaW9uIDE5MDIxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dlYWtS
YW5kb20uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA5IElh
biBDLiBCdWxsYXJkCi0gKiAKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg
b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCi0gKiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29m
dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgotICogZmlsZXMgKHRoZSAiU29mdHdh
cmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAotICogcmVzdHJpY3Rpb24sIGlu
Y2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCi0gKiBjb3B5LCBt
b2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs
bAotICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdo
b20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl
IGZvbGxvd2luZwotICogY29uZGl0aW9uczoKLSAqIAotICogVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLSAqIGluY2x1ZGVkIGlu
IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotICog
Ci0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP
RiBBTlkgS0lORCwKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN
SVRFRCBUTyBUSEUgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKLSAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCi0gKiBIT0xERVJTIEJFIExJQUJMRSBG
T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKLSAqIFdIRVRIRVIgSU4g
QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJP
TSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP
UgotICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgV2Vh
a1JhbmRvbV9oCi0jZGVmaW5lIFdlYWtSYW5kb21faAotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0j
aW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
V2Vha1JhbmRvbSB7Ci1mcmllbmQgY2xhc3MgSlNHbG9iYWxPYmplY3Q7IC8vIEZvciBhY2Nlc3Mg
dG8gaW5pdGlhbGl6ZVNlZWQoKSBkdXJpbmcgcmVwbGF5LgotcHVibGljOgotICAgIFdlYWtSYW5k
b20odW5zaWduZWQgc2VlZCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVTZWVkKHNlZWQpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIHRoZSBzZWVkIHByb3ZpZGVkIHRoYXQgeW91J3Zl
IG5ldmVyIGNhbGxlZCBnZXQoKSBvciBnZXRVaW50MzIoKS4KLSAgICB1bnNpZ25lZCBzZWVkVW5z
YWZlKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoOyB9Ci0KLSAgICBkb3VibGUgZ2V0KCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZHZhbmNlKCkgLyAoVUlOVF9NQVggKyAxLjApOwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGdldFVpbnQzMigpCi0gICAgewotICAgICAgICByZXR1cm4gYWR2YW5jZSgp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBhZHZhbmNlKCkKLSAgICB7Ci0gICAg
ICAgIG1faGlnaCA9IChtX2hpZ2ggPDwgMTYpICsgKG1faGlnaCA+PiAxNik7Ci0gICAgICAgIG1f
aGlnaCArPSBtX2xvdzsKLSAgICAgICAgbV9sb3cgKz0gbV9oaWdoOwotICAgICAgICByZXR1cm4g
bV9oaWdoOwotICAgIH0KLQotICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkK
LSAgICB7Ci0gICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7Ci0gICAgICAgIG1faGln
aCA9IHNlZWQ7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9sb3c7Ci0gICAgdW5zaWduZWQgbV9o
aWdoOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBXZWFrUmFuZG9tX2gK
SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxOTAyMTgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDk4IEBACisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CisKKyAgICAgICAgVk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgdHdv
IG1ham9yIHRoaW5ncyB0byBXVEY6IFdlYWtSYW5kb20gYW5kIFBhcmFsbGVsSGVscGVyUG9vbC4g
V2Vha1JhbmRvbSB3YXMKKyAgICAgICAgYWxyZWFkeSBpbiBKU0M7IHdlJ3JlIGp1c3QgaG9pc3Rp
bmcgaXQgaW50byBXVEYuIEl0J3MganVzdCBhIHdlYWsgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IK
KyAgICAgICAgdGhhdCdzIHN1aXRhYmxlIGZvciBwbGFjZXMgd2hlcmUgeW91IG5lZWQganVzdCBh
IHRpbnkgYml0IG9mIHJhbmRvbW5lc3MuCisKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJQb29sIGlz
IGEgbmV3IEFQSSB0aGF0IHNpbXBsaWZpZXMgZGF0YS1wYXJhbGxlbCBhbGdvcml0aG1zIGxpa2Ug
dGhlIEpTQyBHQy4KKyAgICAgICAgSW4gYSBkYXRhLXBhcmFsbGVsIGFsZ29yaXRobSwgd2Ugd2Fu
dCB0byBydW4gb25lIHRhc2sgb24gYXMgbWFueSBjb3JlcyBhcyBwb3NzaWJsZSBhbmQgbGV0Cisg
ICAgICAgIHRoZSB0YXNrIHdvcnJ5IGFib3V0IHdoaWNoIHN1YnNldCBvZiB0aGUgaW5wdXQgZGF0
YSB0byB3b3JrIG9uLiBJbiBzb21lIGNhc2VzLCB0aGUKKyAgICAgICAgYWxnb3JpdGhtIHdpbGwg
bm90IG5lZWQgdG8gZG8gYW55IGxvYWQgYmFsYW5jaW5nIC0gYW5kIGlmIGxvYWQgYmFsYW5jaW5n
IGlzIHJlcXVpcmVkLCBpdCdzCisgICAgICAgIHVwIHRvIHRoZSB1c2VyLiBUaGlzIGlzIGFwcHJv
cHJpYXRlIGluIGNvbnRleHRzIHdoZXJlIHRoZSBsb2FkIGJhbGFuY2luZyBuZWVkcyB0byBiZQor
ICAgICAgICBjdXN0b20tdHVuZWQgZm9yIHBlcmZvcm1hbmNlLCBsaWtlIHRoZSBHQydzIG1hcmtp
bmcgcGhhc2UuCisKKyAgICAgICAgVGhpcyBuZXcgQVBJIGhhcyB0aHJlZSBjb25jZXB0czogdGFz
aywgY2xpZW50LCBhbmQgcG9vbC4gQSB0YXNrIGlzIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAg
ICAgb2JqZWN0IHdpdGggYSBydW4oKSBtZXRob2QsIHdoaWNoIG1heSBiZSBydW4gaW4gcGFyYWxs
ZWwuIEl0IGlzIHVzdWFsbHkgdXNlZCB0byB3cmFwIGEKKyAgICAgICAgZnVuY3Rvci4gQSBwb29s
IGlzIGEgcG9vbCBvZiB0aHJlYWRzIHRoYXQgY2FuIHJ1biB0aGluZ3MuIEEgY2xpZW50IGlzIGEg
cGxhY2Vob2xkZXIgZm9yIGEKKyAgICAgICAgdGFzay4gQSBjbGllbnQgY2FuIGhhdmUgemVybyBv
ciBvbmUgdGFza3MuIEEgY2xpZW50IG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIGEgcG9vbC4gV2hl
biBhCisgICAgICAgIGNsaWVudCBoYXMgYSB0YXNrLCB0aGUgcG9vbCdzIHRocmVhZHMgbWF5IGNo
b29zZSB0byBydW4gaXQuIElmIGEgdGhyZWFkIHN0YXJ0cyBydW5uaW5nIGEKKyAgICAgICAgdGFz
aywgaXQgd2lsbCBydW4gaXQgdG8gY29tcGxldGlvbi4gV2hlbiB0aGUgdGFzayByZXR1cm5zIG9u
IGFueSB0aHJlYWQsIHRoZSBjbGllbnQgdGFrZXMKKyAgICAgICAgaXQgdG8gbWVhbiB0aGF0IHRo
ZSB0YXNrIHNob3VsZCBiZSByZW1vdmVkLiBUaGF0IG1lYW5zIHRoYXQgYW55IGN1cnJlbnRseSBy
dW5uaW5nIGluc3RhbmNlcworICAgICAgICBvZiB0aGUgdGFzayB3aWxsIGZpbmlzaCBidXQgbm8g
bmV3IHRocmVhZHMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgdGFzay4gWW91IGNhbiBlYXNpbHkg
YXNrCisgICAgICAgIGEgY2xpZW50IHRvIHdhaXQgdW50aWwgYSB0YXNrIGZpbmlzaGVzLiBZb3Ug
Y2FuIGFsc28gZWFzaWx5IGFzayBhIGNsaWVudCB0byBydW4gYSB0YXNrIG9uCisgICAgICAgIHRo
ZSBjdXJyZW50IHRocmVhZCBpbiBhZGRpdGlvbiB0byBwb3NzaWJseSBzb21lIGhlbHBlciB0aHJl
YWRzIGZyb20gdGhlIHBvb2wuCisKKyAgICAgICAgRm9yIHNvbWUgZGF0YS1wYXJhbGxlbCBhbGdv
cml0aG1zLCBwcm9ncmFtbWluZyB3aXRoIFBhcmFsbGVsSGVscGVyUG9vbCBpcyBhcyBlYXN5IGFz
OgorCisgICAgICAgIGNsaWVudC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBb
PV0gKCkgeworICAgICAgICAgICAgICAgIGRvIHRoaW5nczsKKyAgICAgICAgICAgIH0pOworCisg
ICAgICAgIE5vdGUgdGhhdCB5b3UgY2Fubm90IHRlbGwgYWhlYWQgb2YgdGltZSBob3cgbWFueSB0
aHJlYWRzIHdpbGwgam9pbiB0byBoZWxwIHRoZSB0YXNrLgorICAgICAgICBUaHJlYWRzIG1heSBi
ZWNvbWUgYXZhaWxhYmxlIGFmdGVyIHRoZSB0YXNrIGhhcyBhbHJlYWR5IHN0YXJ0ZWQgcnVubmlu
Zy4gVGhvc2UgdGhyZWFkcyBtYXkKKyAgICAgICAgam9pbiBhZnRlciB0aGUgb3RoZXIgdGhyZWFk
cyBoYXZlIGFscmVhZHkgc3RhcnRlZC4gaXQncyBub3QgYWR2aXNhYmxlIHRvIG1ha2UgYWxnb3Jp
dGhtaWMKKyAgICAgICAgZGVjaXNpb25zIGJhc2VkIG9uIGNsaWVudC5udW1iZXJPZkFjdGl2ZVRo
cmVhZHMoKSwgc2luY2UgdGhhdCBudW1iZXIgbWF5IGNoYW5nZS4gVXN1YWxseQorICAgICAgICB0
aGUgYmVzdCB3YXkgdG8gdXNlIFBhcmFsbGVsSGVscGVyUG9vbCBpcyB3aXRoIGFuIGFsZ29yaXRo
bSB0aGF0IGhhcyBpdHMgb3duIGN1c3RvbQorICAgICAgICB3b3JrbGlzdC4gQW4gZXhhbXBsZSBv
ZiBhIHZlcnkgc2ltcGxlIGN1c3RvbSB3b3JrbGlzdCBpcyB0aGUgb25lIGluIHRoZSBKU0MgR0Mn
cyBjb3B5aW5nCisgICAgICAgIHBoYXNlIC0gaXQncyBqdXN0IGEgVmVjdG9yIGFuZCBhbiBpbmRl
eCB0aGF0IGluZGljYXRlcyB0aGUgbmV4dCBzZXQgb2YgZWxlbWVudHMgdG8gcHJvY2Vzcy4KKwor
ICAgICAgICBUaGlzIG5ldyBBUEkgd2FzIGluaXRpYWxseSBkZXNpZ25lZCB0byBzaW1wbGlmeSBo
b3cgR0NUaHJlYWQgd29ya3MsIGJ5IHJlcGxhY2luZyBQaGFzZSB3aXRoCisgICAgICAgIGEgY2Fs
bGJhY2sgdGhhdCBjb250YWlucyB0aGUgcGhhc2UncyB3b3JrbG9hZC4gSSB0aGVuIHJlYWxpemVk
IHRoYXQgd2l0aCBhIGZldyB0d2Vha3MsIEkKKyAgICAgICAgY291bGQgbWFrZSB0aGlzIHNvbWV3
aGF0IGdlbmVyYWwgZW5vdWdoIHRoYXQgaXQgbWlnaHQgYmVjb21lIGludGVyZXN0aW5nIG91dHNp
ZGUgR0MuIEkgYWxzbworICAgICAgICByZWFsaXplZCB0aGF0IEkgY291bGQgdXNlIHRoaXMgdG8g
ZW5hYmxlIHRocmVhZCBzaGFyaW5nLiBTbywgYWx0aG91Z2ggdGhlIEFQSSBpcyBraW5kYQorICAg
ICAgICBxdWlya3ksIGl0J3MgZ3JvdW5kZWQgaW4gdGhlIHJlYWxpdHkgb2YgaG93IHRoZSBKU0Mg
R0MgZG9lcyBwYXJhbGxlbGlzbS4KKworICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9q
OgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OlBhcmFsbGVsSGVscGVyQ2xpZW50KToKKyAg
ICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaWVudCk6
CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCk6CisgICAgICAgIChXVEY6OlBhcmFs
bGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxI
ZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxI
ZWxwZXJDbGllbnQ6OmNsYWltVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xp
ZW50OjpydW5UYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpQYXJhbGxl
bEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6On5QYXJhbGxl
bEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmFkZFRocmVh
ZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVhZHMpOgor
ICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29tZUhlbHBpbmcpOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmRpZE1ha2VXb3JrQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpoZWxwZXJUaHJlYWRCb2R5KToKKyAgICAgICAg
KFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpoYXNDbGllbnRXaXRoVGFzayk6CisgICAgICAgIChX
VEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2spOgorICAgICAgICAoV1RG
OjpQYXJhbGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRoVGFzayk6CisgICAgICAgICog
d3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxI
ZWxwZXJUYXNrOjpQYXJhbGxlbEhlbHBlclRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhl
bHBlclRhc2s6On5QYXJhbGxlbEhlbHBlclRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhl
bHBlclRhc2tGdW5jdG9yOjpQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yKToKKyAgICAgICAgKFdU
Rjo6Y3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGll
bnQ6OnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVy
Q2xpZW50Ojpwb29sKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6Om51bWJl
ck9mQWN0aXZlVGhyZWFkcyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6bnVt
YmVyT2ZUaHJlYWRzKToKKyAgICAgICAgKiB3dGYvV2Vha1JhbmRvbS5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmguCisgICAgICAgIChXVEY6
OldlYWtSYW5kb206OldlYWtSYW5kb20pOgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjppbml0
aWFsaXplU2VlZCk6CisgICAgICAgIChXVEY6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOgorICAg
ICAgICAoV1RGOjpXZWFrUmFuZG9tOjpnZXRVaW50MzIpOgorICAgICAgICAoV1RGOjpXZWFrUmFu
ZG9tOjphZHZhbmNlKToKKyAgICAgICAgKEpTQzo6V2Vha1JhbmRvbTo6V2Vha1JhbmRvbSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OldlYWtSYW5kb206OnNlZWRVbnNhZmUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpXZWFrUmFuZG9tOjpnZXRVaW50MzIpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpXZWFrUmFuZG9tOjphZHZhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha1Jh
bmRvbTo6aW5pdGlhbGl6ZVNlZWQpOiBEZWxldGVkLgorCiAyMDE1LTA5LTI0ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJhbiBzb3J0LVhjb2RlLXByb2plY3Qt
ZmlsZS4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTkwMjE3
KQorKysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTE1LDYgKzExNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcT1NBbGxv
Y2F0b3JXaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXE9TUmFuZG9t
U291cmNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2su
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSGVscGVyUG9v
bC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzR2Vu
ZXJpYy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFya2luZ0xvdC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUHJpbnRTdHJlYW0uY3BwIiAv
PgpAQCAtMjQ2LDYgKzI0Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFn
ZUFsbG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxv
Y2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlUmVzZXJ2YXRpb24u
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEhlbHBlclBvb2wu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnMuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNHZW5lcmljLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2gu
aCIgLz4KQEAgLTMxMyw2ICszMTUsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XFZNVGFncy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHdpblxHRElPYmpl
Y3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0Zlx3aW5cV29ya0l0ZW1XaW4u
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxXZWFrUmFuZG9tLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcV29yZExvY2suaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxXb3JrUXVldWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxXVEZUaHJlYWREYXRhLmgiIC8+CkluZGV4OiBTb3VyY2UvV1RGL1dURi52Y3hw
cm9qL1dURi52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYudmN4
cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCShyZXZpc2lvbiAxOTAyMTcpCisrKyBTb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTEsNCAr
MSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0i
NC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWls
ZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9ImR0b2EiPgpAQCAt
MTc0LDYgKzE3NCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFnZUJsb2Nr
LmNwcCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSGVscGVyUG9vbC5jcHAiPgorICAg
ICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNHZW5lcmljLmNwcCI+CiAgICAgICA8RmlsdGVy
Pnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNTQ3LDYgKzU1MCw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFnZVJlc2VydmF0aW9uLmgiPgogICAgICAgPEZp
bHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxQYXJhbGxlbEhlbHBlclBvb2wuaCI+CisgICAgICA8RmlsdGVyPnd0ZjwvRmls
dGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBh
cmFsbGVsSm9icy5oIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MDIxNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4
MjEwIC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJC
NjZBNjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3
QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZE
MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87
IH07CisJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM1MDE2MzFCQjI1OEM4MDBG
MEEyQTMgLyogV2Vha1JhbmRvbS5oICovOyB9OwogCQkwRjgyNEE2ODFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi87IH07
CiAJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0M0EwMDAyRTM0
NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsgfTsKQEAgLTQ4
LDYgKzQ5LDggQEAKIAkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlBMUI3
QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi87IH07CiAJCTBGRTQ0NzlEMUI3QUFBMDMw
MDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi87IH07
CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNF
MTUgLyogVGlueVB0clNldC5oICovOyB9OworCQkwRkZGMTlEQzFCQjMzNEVCMDA4ODZEOTEgLyog
UGFyYWxsZWxIZWxwZXJQb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkYxOURBMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBv
b2wuY3BwICovOyB9OworCQkwRkZGMTlERDFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxw
ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi87IH07CiAJ
CTE0MDIyRjQxMThGNUMzRkMwMDdGRjBFQiAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAyMkY0MDE4RjVDM0ZDMDA3RkYw
RUIgLyogbGliYm1hbGxvYy5hICovOyB9OwogCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDNGNjExRDE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgKi87IH07CiAJCTE0M0Y2
MTIwMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNGNjExRTE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CkBAIC0zMTIsNiArMzE1
LDcgQEAKIAkJMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERlZmVycmFibGVSZWZDb3VudGVkLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMkI2NkE1MTdCNkI0RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmxpcEJ5dGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMzAwQjdEMThBQjQ4QjQwMEE2RDcyRSAvKiBIYXNoTWV0aG9kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhhc2hNZXRob2QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzNTAxNjMxQkIy
NThDODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2Vha1JhbmRvbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgyNEE2
NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zMzYsNiArMzQwLDggQEAKIAkJMEZFNDQ3OUExQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdvcmRMb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIy
MkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRjE5
REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxs
ZWxIZWxwZXJQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVs
SGVscGVyUG9vbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0MDE4RjVD
M0ZDMDA3RkYwRUIgLyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYw
RjkwMERCNTE0QSAvKiBSQU1TaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJBTVNpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOCw2ICs4MjQsOCBA
QAogCQkJCUE4QTQ3MkUzMTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwICovLAogCQkJ
CUE4QTQ3MkU0MTUxQTgyNUIwMDQxMjNGRiAvKiBQYWdlQmxvY2suaCAqLywKIAkJCQlBOEE0NzJF
NTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCisJCQkJMEZGRjE5REEx
QkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEZGRjE5
REIxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovLAogCQkJCUE4QTQ3
MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1
MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCAqLywKIAkJCQkwRjgy
NEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8sCkBAIC04OTIsNiArOTAw
LDcgQEAKIAkJCQlBOEE0NzM3MTE1MUE4MjVCMDA0MTIzRkYgLyogVmVjdG9yVHJhaXRzLmggKi8s
CiAJCQkJQThBNDczNzIxNTFBODI1QjAwNDEyM0ZGIC8qIFZNVGFncy5oICovLAogCQkJCTk3NENG
QzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCisJCQkJMEYzNTAxNjMxQkIyNThD
ODAwRjBBMkEzIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQkwRkU0NDc5QTFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suY3BwICovLAogCQkJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBX
b3JkTG9jay5oICovLAogCQkJCUU0QTBBRDM3MUE5NjI0NTUwMDUzNkRGNiAvKiBXb3JrUXVldWUu
Y3BwICovLApAQCAtMTA2Myw2ICsxMDcyLDcgQEAKIAkJCQlBOEE0NzM4NTE1MUE4MjVCMDA0MTIz
RkYgLyogQVNDSUlDVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzQxNTFBODI1QjAw
NDEyM0ZGIC8qIEFTQ0lJRmFzdFBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3Mzg3MTUx
QTgyNUIwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjM1MDE2
NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczODgxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDM2MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDM3MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmdIYXNoLmggaW4gSGVh
ZGVycyAqLywKQEAgLTEwNzQsNiArMTA4NCw3IEBACiAJCQkJODEzNDAxMzkxNUIwOTJGRDAwMUZG
MEI4IC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczQTkxNTFBODI1QjAwNDEy
M0ZGIC8qIGJpZ251bS1kdG9hLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNBQjE1MUE4MjVC
MDA0MTIzRkYgLyogYmlnbnVtLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGMTlERDFCQjMzNEVC
MDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ1MjE1MUE4MjVCMDA0MTIzRkYgLyogQmluYXJ5U2VtYXBob3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QTE1MUE4MjVCMDA0MTIzRkYgLyogQml0bWFwLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzM4QzE1MUE4MjVCMDA0MTIzRkYgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTEzOTIsNiArMTQwMyw3IEBACiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8q
IFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcw
IC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2RUFBRjZEMDAy
NEUxNDYgLyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGRjE5REMx
QkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDIxMTUxQTgyNUIwMDQxMjNGRiAvKiBTSEEx
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5
MDIxNykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xNjcsNiArMTY3LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgTnVtYmVyT2ZDb3Jlcy5jcHAK
ICAgICBPU1JhbmRvbVNvdXJjZS5jcHAKICAgICBQYWdlQmxvY2suY3BwCisgICAgUGFyYWxsZWxI
ZWxwZXJQb29sLmNwcAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCiAgICAgUGFya2luZ0xv
dC5jcHAKICAgICBQcmludFN0cmVhbS5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVs
SGVscGVyUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxw
ZXJQb29sLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVy
UG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBhcmFsbGVsSGVscGVyUG9vbC5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2lu
Y2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitQYXJhbGxl
bEhlbHBlckNsaWVudDo6UGFyYWxsZWxIZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVscGVy
UG9vbD4gcG9vbCkKKyAgICA6IG1fcG9vbChwb29sKQoreworICAgIExvY2tIb2xkZXIgbG9ja2Vy
KG1fcG9vbC0+bV9sb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlpbmcp
OworICAgIG1fcG9vbC0+bV9jbGllbnRzLmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9wb29sLT5tX2xvY2spOworICAgIGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3Bvb2wtPm1fY2xpZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9wb29sLT5tX2NsaWVudHNbaV0gPT0gdGhpcykgeworICAgICAgICAgICAgbV9wb29sLT5t
X2NsaWVudHNbaV0gPSBtX3Bvb2wtPm1fY2xpZW50cy5sYXN0KCk7CisgICAgICAgICAgICBtX3Bv
b2wtPm1fY2xpZW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8
UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9v
bC0+bV9sb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV90YXNrKTsKKyAgICBtX3Rhc2sgPSB0
YXNrOworICAgIG1fcG9vbC0+ZGlkTWFrZVdvcmtBdmFpbGFibGUobG9ja2VyKTsKK30KKwordm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKCkKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX3Bvb2wtPm1fbG9jayk7CisgICAgZmluaXNoKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBpbmcoKQoreworICAgIFJlZlB0cjxQYXJhbGxlbEhl
bHBlclRhc2s+IHRhc2s7CisgICAgeworICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wt
Pm1fbG9jayk7CisgICAgICAgIHRhc2sgPSBjbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgaWYg
KCF0YXNrKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJ1blRhc2sodGFzayk7
Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0
cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7CisgICAgc2V0VGFzayh0YXNrKTsKKyAgICBk
b1NvbWVIZWxwaW5nKCk7CisgICAgZmluaXNoKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJD
bGllbnQ6OmZpbmlzaChjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICBtX3Rhc2sgPSBudWxscHRy
OworICAgIHdoaWxlIChtX251bUFjdGl2ZSkKKyAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0
ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKK30KKworUmVmUHRyPFBhcmFsbGVsSGVs
cGVyVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVy
JikKK3sKKyAgICBpZiAoIW1fdGFzaykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgbV9udW1BY3RpdmUrKzsKKyAgICByZXR1cm4gbV90YXNrOworfQorCit2b2lkIFBhcmFsbGVs
SGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IHRhc2spCit7
CisgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOworICAgIFJFTEVBU0VfQVNTRVJUKHRh
c2spOworCisgICAgdGFzay0+cnVuKCk7CisKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUp
OworICAgICAgICAvLyBObyBuZXcgdGFzayBjb3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkLCBzaW5j
ZSB3ZSB3ZXJlIHN0aWxsIGFjdGl2ZS4KKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGFzayB8
fCBtX3Rhc2sgPT0gdGFzayk7CisgICAgICAgIG1fdGFzayA9IG51bGxwdHI7CisgICAgICAgIG1f
bnVtQWN0aXZlLS07CisgICAgICAgIGlmICghbV9udW1BY3RpdmUpCisgICAgICAgICAgICBtX3Bv
b2wtPm1fd29ya0NvbXBsZXRlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgIH0KK30KKworUGFy
YWxsZWxIZWxwZXJQb29sOjpQYXJhbGxlbEhlbHBlclBvb2woKQoreworfQorCitQYXJhbGxlbEhl
bHBlclBvb2w6On5QYXJhbGxlbEhlbHBlclBvb2woKQoreworICAgIFJFTEVBU0VfQVNTRVJUKG1f
Y2xpZW50cy5pc0VtcHR5KCkpOworICAgIAorICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKKyAgICAgICAgbV9pc0R5aW5nID0gdHJ1ZTsKKyAgICAgICAgbV93b3JrQXZh
aWxhYmxlQ29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgIH0KKworICAgIGZvciAoVGhyZWFkSWRl
bnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogbV90aHJlYWRzKQorICAgICAgICB3YWl0Rm9yVGhy
ZWFkQ29tcGxldGlvbih0aHJlYWRJZGVudGlmaWVyKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBl
clBvb2w6OmFkZFRocmVhZHModW5zaWduZWQgbnVtVGhyZWFkcykKK3sKKyAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX2xvY2spOworICAgIG1fbnVtVGhyZWFkcyArPSBudW1UaHJlYWRzOworICAgIGlm
IChnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpKQorICAgICAgICBkaWRNYWtlV29ya0F2YWlsYWJs
ZShsb2NrZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZW5zdXJlVGhyZWFkcyh1
bnNpZ25lZCBudW1UaHJlYWRzKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgaWYgKG51bVRocmVhZHMgPCBtX251bVRocmVhZHMpCisgICAgICAgIHJldHVybjsKKyAgICBt
X251bVRocmVhZHMgPSBudW1UaHJlYWRzOworICAgIGlmIChnZXRDbGllbnRXaXRoVGFzayhsb2Nr
ZXIpKQorICAgICAgICBkaWRNYWtlV29ya0F2YWlsYWJsZShsb2NrZXIpOworfQorCit2b2lkIFBh
cmFsbGVsSGVscGVyUG9vbDo6ZG9Tb21lSGVscGluZygpCit7CisgICAgUGFyYWxsZWxIZWxwZXJD
bGllbnQqIGNsaWVudDsKKyAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPiB0YXNrOworICAg
IHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgY2xpZW50ID0g
Z2V0Q2xpZW50V2l0aFRhc2sobG9ja2VyKTsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHRhc2sgPSBjbGllbnQtPmNsYWltVGFzayhsb2NrZXIpOwor
ICAgIH0KKworICAgIGNsaWVudC0+cnVuVGFzayh0YXNrKTsKK30KKwordm9pZCBQYXJhbGxlbEhl
bHBlclBvb2w6OmRpZE1ha2VXb3JrQXZhaWxhYmxlKGNvbnN0IExvY2tIb2xkZXImKQoreworICAg
IHdoaWxlIChtX251bVRocmVhZHMgPiBtX3RocmVhZHMuc2l6ZSgpKSB7CisgICAgICAgIFRocmVh
ZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAg
ICJQYXJhbGxlbCBIZWxwZXIgVGhyZWFkIiwKKyAgICAgICAgICAgIFt0aGlzXSAoKSB7CisgICAg
ICAgICAgICAgICAgaGVscGVyVGhyZWFkQm9keSgpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IG1fdGhyZWFkcy5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisgICAgfQorICAgIG1fd29ya0F2
YWlsYWJsZUNvbmRpdGlvbi5ub3RpZnlBbGwoKTsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlclBv
b2w6OmhlbHBlclRocmVhZEJvZHkoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgUGFyYWxs
ZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKKyAgICAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFz
az4gdGFzazsKKworICAgICAgICB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xv
Y2spOworICAgICAgICAgICAgY2xpZW50ID0gd2FpdEZvckNsaWVudFdpdGhUYXNrKGxvY2tlcik7
CisgICAgICAgICAgICBpZiAoIWNsaWVudCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1faXNEeWluZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB0YXNrID0gY2xpZW50LT5jbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNsaWVudC0+cnVuVGFzayh0YXNrKTsKKyAgICB9Cit9CisKK2Jvb2wgUGFy
YWxsZWxIZWxwZXJQb29sOjpoYXNDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2Nr
ZXIpCit7CisgICAgcmV0dXJuICEhZ2V0Q2xpZW50V2l0aFRhc2sobG9ja2VyKTsKK30KKworUGFy
YWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVsSGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2so
Y29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgLy8gV2UgbG9hZC1iYWxhbmNlIGJ5IGJlaW5nIHJh
bmRvbS4KKyAgICB1bnNpZ25lZCBzdGFydEluZGV4ID0gbV9yYW5kb20uZ2V0VWludDMyKG1fY2xp
ZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBzdGFydEluZGV4OyBpbmRl
eCA8IG1fY2xpZW50cy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJD
bGllbnQqIGNsaWVudCA9IG1fY2xpZW50c1tpbmRleF07CisgICAgICAgIGlmIChjbGllbnQtPm1f
dGFzaykKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQ7CisgICAgfQorICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgUGFy
YWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50c1tpbmRleF07CisgICAgICAgIGlm
IChjbGllbnQtPm1fdGFzaykKKyAgICAgICAgICAgIHJldHVybiBjbGllbnQ7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1BhcmFsbGVsSGVscGVyQ2xpZW50KiBQYXJhbGxlbEhl
bHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIp
Cit7CisgICAgZm9yICg7OykgeworICAgICAgICAvLyBJdCBtaWdodCBiZSBxdWl0dGluJyB0aW1l
LgorICAgICAgICBpZiAobV9pc0R5aW5nKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgaWYgKFBhcmFsbGVsSGVscGVyQ2xpZW50KiByZXN1bHQgPSBnZXRDbGllbnRXaXRo
VGFzayhsb2NrZXIpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBX
YWl0IHVudGlsIHdvcmsgYmVjb21lcyBhdmFpbGFibGUuCisgICAgICAgIG1fd29ya0F2YWlsYWJs
ZUNvbmRpdGlvbi53YWl0KG1fbG9jayk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwpJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIFBhcmFsbGVsSGVscGVyUG9vbF9oCisjZGVmaW5lIFBhcmFsbGVsSGVscGVyUG9v
bF9oCisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
QSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgYSBzaGFyZWQgcG9vbCBvZiB0aHJlYWRzIHRoYXQgY2Fu
IGJlIGFza2VkIHRvIGhlbHAgd2l0aCBzb21lIGZpbml0ZS10aW1lCisvLyBwYXJhbGxlbCBhY3Rp
dml0eS4gSXQncyBkZXNpZ25lZCB0byB3b3JrIHdlbGwgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUg
Y29uY3VycmVudCB0YXNrcyB0aGF0IG1heQorLy8gYWxsIHdhbnQgcGFyYWxsZWwgaGVscC4gSW4g
dGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IGVhY2ggdGFzayB0byBzdGFydCBpdHMgb3duIHRocmVh
ZCBwb29sLiBJdCdzCisvLyBhbHNvIGRlc2lnbmVkIHRvIHdvcmsgd2VsbCBmb3IgdGFza3MgdGhh
dCBkbyB0aGVpciBvd24gbG9hZCBiYWxhbmNpbmcgYW5kIGRvIG5vdCB3aXNoIHRvCisvLyBwYXJ0
aWNpcGF0ZSBpbiBtaWNyb3Rhc2stc3R5bGUgbG9hZCBiYWxhbmNpbmcuCisvLworLy8gQSBwb29s
IGNhbiBoYXZlIG1hbnkgY2xpZW50cywgYW5kIGVhY2ggY2xpZW50IG1heSBoYXZlIHplcm8gb3Ig
b25lIHRhc2tzLiBUaGUgcG9vbCB3aWxsIGhhdmUgdXAKKy8vIHRvIHNvbWUgbnVtYmVyIG9mIHRo
cmVhZHMsIGNvbmZpZ3VyYWJsZSB3aXRoIFBhcmFsbGVsSGVscGVyUG9vbDo6YWRkVGhyZWFkcygp
OyB1c3VhbGx5IHlvdSBib3VuZAorLy8gdGhpcyBieSB0aGUgbnVtYmVyIG9mIENQVXMuIFdoZW5l
dmVyIGEgdGhyZWFkIGlzIGlkbGUgYW5kIGl0IG5vdGljZXMgdGhhdCBzb21lIGNsaWVudCBoYXMg
YQorLy8gdGFzaywgaXQgd2lsbCBydW4gdGhlIHRhc2suIEEgdGFzayBtYXkgYmUgcnVuIG9uIGFu
eXdoZXJlIGJldHdlZW4gemVybyBhbmQgTiB0aHJlYWRzLCB3aGVyZSBOIGlzCisvLyB0aGUgbnVt
YmVyIG9mIHRocmVhZHMgaW4gdGhlIHBvb2wuIFRhc2tzIHJ1biB0byBjb21wbGV0aW9uLiBJdCdz
IGV4cGVjdGVkIHRoYXQgYSB0YXNrIHdpbGwgaGF2ZQorLy8gaXRzIG93biBjdXN0b20gaWRlYXMg
YWJvdXQgaG93IHRvIHBhcnRpY2lwYXRlIGluIHNvbWUgcGFyYWxsZWwgYWN0aXZpdHkncyBsb2Fk
IGJhbGFuY2luZywgYW5kIGl0CisvLyB3aWxsIHJldHVybiB3aGVuIHRoZSBwYXJhbGxlbCBhY3Rp
dml0eSBpcyBkb25lLiBGb3IgZXhhbXBsZSwgYSBwYXJhbGxlbCBtYXJraW5nIHRhc2sgd2lsbCBy
ZXR1cm4KKy8vIHdoZW4gdGhlIG1hcmsgcGhhc2UgaXMgZG9uZS4KKy8vCisvLyBUaHJlYWRzIG1h
eSBoYXZlIGEgY2hvaWNlIGJldHdlZW4gbWFueSB0YXNrcywgc2luY2UgdGhlcmUgbWF5IGJlIG1h
bnkgY2xpZW50cyBhbmQgZWFjaCBjbGllbnQKKy8vIG1heSBoYXZlIGEgdGFzay4gRm9yIHRoZSBt
YXJraW5nIGV4YW1wbGUsIHRoYXQgbWF5IGhhcHBlbiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgVk0g
aW5zdGFuY2VzIGFuZAorLy8gZWFjaCBpbnN0YW5jZSBkZWNpZGVzIHRvIHN0YXJ0IHBhcmFsbGVs
IG1hcmtpbmcgYXQgdGhlIHNhbWUgdGltZS4gSW4gdGhhdCBjYXNlLCB0aHJlYWRzIGNob29zZQor
Ly8gYSB0YXNrIGF0IHJhbmRvbS4gU28gbG9uZyBhcyBhbnkgY2xpZW50IGhhcyBhIHRhc2ssIGFs
bCB0aHJlYWRzIGluIHRoZSBwb29sIHdpbGwgY29udGludWUKKy8vIHJ1bm5pbmcgdGhlIGF2YWls
YWJsZSB0YXNrcy4gVGhyZWFkcyBnbyBpZGxlIHdoZW4gbm8gY2xpZW50IGhhcyB0YXNrcyB0byBy
dW4uCisKKy8vIEEgdGFzayBlbmNhcHN1bGF0ZXMgb25lIHRocmVhZCdzIHdvcnRoIG9mIGFjdGl2
aXR5IGluIHNvbWUgcGFyYWxsZWwgYWxnb3JpdGhtLiBUaGUgcG9vbCB3aWxsCisvLyBydW4gdGhp
cyB0YXNrIG9uIHBvdGVudGlhbGx5IG1hbnkgdGhyZWFkcy4gVGhlIHBvb2wgbWF5IG5vdCBydW4g
dGhlIHRhc2sgb24gYW55IHRocmVhZHMsIG9mIGFsbAorLy8gdGhyZWFkcyBhcmUgYnVzeSBydW5u
aW5nIG90aGVyIHRhc2tzLiBUYXNrcyBtYXkgam9pbiBpbiBhdCBhbnkgdGltZS4KKy8vCisvLyBU
YXNrcyBzaG91bGQgY29tcGxldGUgaW4gZmluaXRlIHRpbWUuIFBhcmFsbGVsSGVscGVyUG9vbCBh
bmQgZnJpZW5kcyBhcmUgbWVhbnQgdG8gYmUgdXNlZCBmb3IKKy8vIHBhcmFsbGVsIGFsZ29yaXRo
bXMgdGhhdCBydW4gdG8gY29tcGxldGlvbi4gQSBnb29kIGV4YW1wbGUgaXMgc29tZXRoaW5nIGxp
a2UgcGFyYWxsZWwgbWFya2luZywKKy8vIHdoaWNoIGNhbiBiZSBsb25nLXJ1bm5pbmcgYnV0IGFs
d2F5cyB0ZXJtaW5hdGVzLgorY2xhc3MgUGFyYWxsZWxIZWxwZXJUYXNrIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFBhcmFsbGVsSGVscGVyVGFzaz4geworcHVibGljOgorICAgIFBhcmFs
bGVsSGVscGVyVGFzaygpIHsgfQorICAgIHZpcnR1YWwgflBhcmFsbGVsSGVscGVyVGFzaygpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIHJ1bigpID0gMDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CitjbGFzcyBQYXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yIDogcHVibGljIFBhcmFs
bGVsSGVscGVyVGFzayB7CitwdWJsaWM6CisgICAgUGFyYWxsZWxIZWxwZXJUYXNrRnVuY3Rvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQorICAg
IHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBydW4oKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgbV9mdW5jdG9yKCk7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9Owor
CisvLyBZb3UgY2FuIHVzZSB0aGlzIGxpa2Ugc286CisvLworLy8gUmVmUHRyPFBhcmFsbGVsSGVs
cGVyVGFzaz4gdGFzayA9IGNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzaygKKy8vICAgICBbPV0gKCkg
eworLy8gICAgICAgICBkbyB0aGluZ3M7CisvLyAgICAgfSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorUmVmUHRyPFBhcmFsbGVsSGVscGVyVGFzaz4gY3JlYXRlUGFyYWxsZWxIZWxwZXJU
YXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UGFyYWxsZWxIZWxwZXJUYXNrRnVuY3RvcjxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKK2NsYXNz
IFBhcmFsbGVsSGVscGVyUG9vbDsKKworLy8gQSBjbGllbnQgaXMgYSBwbGFjZWhvbGRlciBmb3Ig
YSBwYXJhbGxlbCBhbGdvcml0aG0uIEEgcGFyYWxsZWwgYWxnb3JpdGhtIHdpbGwgaGF2ZSBhIHRh
c2sgdGhhdAorLy8gY2FuIGJlIHJ1biBjb25jdXJyZW50bHkuIFdoZW5ldmVyIGEgY2xpZW50IGhh
cyBhIHRhc2sgc2V0ICh5b3UgaGF2ZSBjYWxsZWQgc2V0VGFzaygpIG9yCisvLyBzZXRGdW5jdGlv
bigpKSwgdGhyZWFkcyBpbiB0aGUgcG9vbCBtYXkgcnVuIHRoYXQgdGFzay4gSWYgYSB0YXNrIHJl
dHVybnMgb24gYW55IHRocmVhZCwgdGhlCisvLyBjbGllbnQgd2lsbCBhc3N1bWUgdGhhdCB0aGUg
dGFzayBpcyBkb25lIGFuZCB3aWxsIGNsZWFyIHRoZSB0YXNrLiBJZiB0aGUgdGFzayBpcyBjbGVh
cmVkICh0aGUKKy8vIHRhc2sgcnVucyB0byBjb21wbGV0aW9uIG9uIGFueSB0aHJlYWQgb3IgeW91
IGNhbGwgZmluaXNoKCkpLCBhbnkgdGhyZWFkcyBpbiB0aGUgcG9vbCBhbHJlYWR5CisvLyBydW5u
aW5nIHRoZSBsYXN0IHNldCB0YXNrKHMpIHdpbGwgY29udGludWUgdG8gcnVuIHRoZW0uIFlvdSBj
YW4gd2FpdCBmb3IgYWxsIG9mIHRoZW0gdG8gZmluaXNoCisvLyBieSBjYWxsaW5nIGZpbmlzaCgp
LiBUaGF0IG1ldGhvZCB3aWxsIGNsZWFyIHRoZSB0YXNrIGFuZCB3YWl0IGZvciBhbnkgdGhyZWFk
cyBydW5uaW5nIHRoZSBsYXN0CisvLyBzZXQgdGFzayB0byBmaW5pc2guIFRoZXJlIGFyZSB0d28g
a25vd24tZ29vZCBwYXR0ZXJucyBmb3IgdXNpbmcgYSBjbGllbnQ6CisvLworLy8gMSkgVGFza3Mg
aW50cmluc2ljYWxseSBrbm93IHdoZW4gdGhlIGFsZ29yaXRobSByZWFjaGVzIHRlcm1pbmF0aW9u
LCBhbmQgc2ltcGx5IHJldHVybnMgd2hlbgorLy8gICAgdGhpcyBoYXBwZW5zLiBUaGUgbWFpbiB0
aHJlYWQgcnVucyB0aGUgdGFzayBieSBkb2luZzoKKy8vCisvLyAgICBjbGllbnQtPnNldEZ1bmN0
aW9uKAorLy8gICAgICAgIFs9XSAoKSB7CisvLyAgICAgICAgICAgIGRvIHRoaW5nczsKKy8vICAg
ICAgICB9KTsKKy8vICAgIGNsaWVudC0+ZG9Tb21lSGVscGluZygpOworLy8gICAgY2xpZW50LT5m
aW5pc2goKTsKKy8vCisvLyAgICBDYWxsaW5nIGRvU29tZUhlbHBpbmcoKSBlbnN1cmVzIHRoYXQg
dGhlIGFsZ29yaXRobSBydW5zIG9uIGF0IGxlYXN0IG9uZSB0aHJlYWQgKHRoaXMgb25lKS4KKy8v
ICAgIFRhc2tzIHdpbGwga25vdyB3aGVuIHRvIGNvbXBsZXRlLCBhbmQgd2lsbCByZXR1cm4gd2hl
biB0aGV5IGFyZSBkb25lLiBUaGlzIHdpbGwgY2xlYXIgdGhlCisvLyAgICB0YXNrIHRvIGVuc3Vy
ZSB0aGF0IG5vIG5ldyB0aHJlYWRzIHdpbGwgcnVuIHRoZSB0YXNrLiBUaGVuLCBmaW5pc2goKSBj
bGVhcnMgdGhlIGN1cnJlbnQgdGFzaworLy8gICAgYW5kIHdhaXRzIGZvciBhbnkgcGFyYWxsZWwg
dGFza3MgdG8gZmluaXNoIGFmdGVyIHRoZSBtYWluIHRocmVhZCBoYXMgZmluaXNoZWQuIEl0J3Mg
cG9zc2libGUKKy8vICAgIGZvciB0aHJlYWRzIHRvIHN0aWxsIGJlIHJ1bm5pbmcgdGhlIGxhc3Qg
c2V0IHRhc2sgKGkuZS4gdGhlIG9uZSBzZXQgYnkgc2V0RnVuY3Rpb24oKSkgZXZlbgorLy8gICAg
YWZ0ZXIgdGhlIHRhc2sgaGFzIGJlZW4gY2xlYXJlZC4gV2FpdGluZyBmb3IgaWRsZSBlbnN1cmVz
IHRoYXQgbm8gb2xkIHRhc2tzIGFyZSBydW5uaW5nCisvLyAgICBhbnltb3JlLgorLy8KKy8vICAg
IFlvdSBjYW4gZG8gdGhpcyBtb3JlIGVhc2lseSBieSB1c2luZyB0aGUgcnVuRnVuY3Rpb25JblBh
cmFsbGVsKCkgaGVscGVyOgorLy8KKy8vICAgIGNsaWVudHMtPnJ1bkZ1bmN0aW9uSW5QYXJhbGxl
bCgKKy8vICAgICAgICBbPV0gKCkgeworLy8gICAgICAgICAgICBkbyB0aGluZ3M7CisvLyAgICAg
ICAgfSk7CisvLworLy8gMikgVGFza3Mga2VlcCBkb2luZyB0aGluZ3MgdW50aWwgdGhleSBhcmUg
dG9sZCB0byBxdWl0IHVzaW5nIHNvbWUgY3VzdG9tIG5vdGlmaWNhdGlvbiBtZWNoYW5pc20uCisv
LyAgICBUaGUgbWFpbiB0aHJlYWQgcnVucyB0aGUgdGFzayBieSBkb2luZzoKKy8vCisvLyAgICBi
b29sIGtlZXBHb2luZyA9IHRydWU7CisvLyAgICBjbGllbnQtPnNldEZ1bmN0aW9uKAorLy8gICAg
ICAgIFs9XSAoKSB7CisvLyAgICAgICAgICAgIHdoaWxlIChrZWVwR29pbmcpIHsKKy8vICAgICAg
ICAgICAgICAgIGRvIHRoaW5nczsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0pOworLy8K
Ky8vICAgIFdoZW4gd29yayBydW5zIG91dCwgdGhlIG1haW4gdGhyZWFkIHdpbGwgaW5mb3JtIHRh
c2tzIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSB3b3JrLCBhbmQgdGhlbgorLy8gICAgd2FpdCB1bnRp
bCBubyBtb3JlIHRhc2tzIGFyZSBydW5uaW5nOgorLy8KKy8vICAgIGtlZXBHb2luZyA9IGZhbHNl
OworLy8gICAgY2xpZW50LT5maW5pc2goKTsKKy8vCisvLyAgICBUaGlzIHdvcmtzIGJlc3Qgd2hl
biB0aGUgbWFpbiB0aHJlYWQgZG9lc24ndCBhY3R1YWxseSB3YW50IHRvIHJ1biB0aGUgdGFzayB0
aGF0IGl0IHNldCBpbiB0aGUKKy8vICAgIGNsaWVudC4gVGhpcyBoYXBwZW5zIGZvciBleGFtcGxl
IGluIHBhcmFsbGVsIG1hcmtpbmcuIFRoZSBtYWluIHRocmVhZCB1c2VzIGEgc29tZXdoYXQKKy8v
ICAgIGRpZmZlcmVudCBtYXJraW5nIGFsZ29yaXRobSB0aGFuIHRoZSBoZWxwZXJzLiBUaGUgbWFp
biB0aHJlYWQgbWF5IHByb3ZpZGUgd29yayB0aGF0IHRoZQorLy8gICAgaGVscGVycyBzdGVhbC4g
VGhlIG1haW4gdGhyZWFkIGtub3dzIHdoZW4gdGVybWluYXRpb24gaXMgcmVhY2hlZCwgYW5kIHNp
bXBseSB0ZWxscyB0aGUKKy8vICAgIGhlbHBlcnMgdG8gc3RvcCB1cG9uIHRlcm1pbmF0aW9uLgor
Ly8KKy8vIFRoZSBrbm93bi1nb29kIHN0eWxlcyBvZiB1c2luZyBQYXJhbGxlbEhlbHBlckNsaWVu
dCBhbGwgaW52b2x2ZSBhIHBhcmFsbGVsIGFsZ29yaXRobSB0aGF0IGhhcworLy8gaXRzIG93biB3
b3JrIGRpc3RyaWJ1dGlvbiBhbmQgbG9hZCBiYWxhbmNpbmcuCisvLworLy8gTm90ZSB0aGF0IGl0
IGlzIG5vdCB2YWxpZCB0byB1c2UgdGhlIHNhbWUgUGFyYWxsZWxIZWxwZXJDbGllbnQgaW5zdGFu
Y2UgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorLy8gRWFjaCB0aHJlYWQgc2hvdWxkIGhhdmUgaXRz
IG93biBQYXJhbGxlbEhlbHBlckNsaWVudCBpbiB0aGF0IGNhc2UuIEZhaWx1cmUgdG8gZm9sbG93
IHRoaXMgYWR2aWNlCisvLyB3aWxsIGxlYWQgdG8gUkVMRUFTRV9BU1NFUlQncyBvciB3b3JzZS4K
K2NsYXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
YXJhbGxlbEhlbHBlckNsaWVudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KFJlZlB0cjxQYXJhbGxlbEhlbHBlclBvb2w+KTsKKyAg
ICB+UGFyYWxsZWxIZWxwZXJDbGllbnQoKTsKKworICAgIHZvaWQgc2V0VGFzayhSZWZQdHI8UGFy
YWxsZWxIZWxwZXJUYXNrPik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgc2V0RnVuY3Rpb24oY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IHNldFRhc2soY3JlYXRlUGFyYWxsZWxIZWxwZXJUYXNrKGZ1bmN0b3IpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHZvaWQgZG9Tb21lSGVscGluZygpOworCisgICAg
Ly8gRXF1aXZhbGVudCB0bzoKKyAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7CisgICAgLy8g
Y2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsKKyAgICB2
b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+KTsKKworICAg
IC8vIEVxdWl2YWxlbnQgdG86CisgICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsK
KyAgICAvLyBjbGllbnQtPmRvU29tZUhlbHBpbmcoKTsKKyAgICAvLyBjbGllbnQtPmZpbmlzaCgp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBydW5GdW5jdGlvbklu
UGFyYWxsZWwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJ1blRhc2tJ
blBhcmFsbGVsKGNyZWF0ZVBhcmFsbGVsSGVscGVyVGFzayhmdW5jdG9yKSk7CisgICAgfQorCisg
ICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4gKm1fcG9vbDsgfQorICAgIHVu
c2lnbmVkIG51bWJlck9mQWN0aXZlVGhyZWFkcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQWN0aXZl
OyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKKwor
ICAgIHZvaWQgZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBSZWZQdHI8UGFyYWxsZWxI
ZWxwZXJUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFz
ayhSZWZQdHI8UGFyYWxsZWxIZWxwZXJUYXNrPik7CisgICAgCisgICAgUmVmUHRyPFBhcmFsbGVs
SGVscGVyUG9vbD4gbV9wb29sOworICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclRhc2s+IG1fdGFz
azsKKyAgICB1bnNpZ25lZCBtX251bUFjdGl2ZSB7IDAgfTsKK307CisKK2NsYXNzIFBhcmFsbGVs
SGVscGVyUG9vbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQYXJhbGxlbEhlbHBlclBv
b2w+IHsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbEhlbHBlclBvb2woKTsKKyAgICB+UGFyYWxsZWxI
ZWxwZXJQb29sKCk7CisKKyAgICB2b2lkIGFkZFRocmVhZHModW5zaWduZWQgbnVtVGhyZWFkcyk7
CisgICAgdm9pZCBlbnN1cmVUaHJlYWRzKHVuc2lnbmVkIG51bVRocmVhZHMpOworCisgICAgdW5z
aWduZWQgbnVtYmVyT2ZUaHJlYWRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1UaHJlYWRzOyB9Cisg
ICAgCisgICAgdm9pZCBkb1NvbWVIZWxwaW5nKCk7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFBhcmFsbGVsSGVscGVyQ2xpZW50OworCisgICAgdm9pZCBkaWRNYWtlV29ya0F2YWlsYWJs
ZShjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBoZWxwZXJUaHJlYWRCb2R5KCk7CisKKyAg
ICBib29sIGhhc0NsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBQYXJhbGxl
bEhlbHBlckNsaWVudCogZ2V0Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpOworICAg
IFBhcmFsbGVsSGVscGVyQ2xpZW50KiB3YWl0Rm9yQ2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hv
bGRlciYpOworICAgIAorICAgIExvY2sgbV9sb2NrOworICAgIENvbmRpdGlvbiBtX3dvcmtBdmFp
bGFibGVDb25kaXRpb247CisgICAgQ29uZGl0aW9uIG1fd29ya0NvbXBsZXRlQ29uZGl0aW9uOwor
CisgICAgV2Vha1JhbmRvbSBtX3JhbmRvbTsKKyAgICAKKyAgICBWZWN0b3I8UGFyYWxsZWxIZWxw
ZXJDbGllbnQqPiBtX2NsaWVudHM7CisgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IG1fdGhy
ZWFkczsKKyAgICB1bnNpZ25lZCBtX251bVRocmVhZHMgeyAwIH07IC8vIFRoaXMgY2FuIGJlIGxh
cmdlciB0aGFuIG1fdGhyZWFkcy5zaXplKCkgYmVjYXVzZSB3ZSBzdGFydCB0aHJlYWRzIG9ubHkg
b25jZSB0aGVyZSBpcyB3b3JrLgorICAgIGJvb2wgbV9pc0R5aW5nIHsgZmFsc2UgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OmNyZWF0ZVBhcmFsbGVsSGVscGVyVGFz
azsKK3VzaW5nIFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ7Cit1c2luZyBXVEY6OlBhcmFsbGVs
SGVscGVyUG9vbDsKK3VzaW5nIFdURjo6UGFyYWxsZWxIZWxwZXJUYXNrOwordXNpbmcgV1RGOjpQ
YXJhbGxlbEhlbHBlclRhc2tGdW5jdG9yOworCisjZW5kaWYgLy8gUGFyYWxsZWxIZWxwZXJQb29s
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkocmV2aXNpb24gMTkwMTUxKQkoZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmg6MTkwMTUxKQorKysgU291cmNlL1dU
Ri93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDkgSWFuIEMuIEJ1bGxhcmQKKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh
bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqIG9idGFpbmluZyBhIGNvcHkg
b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKiBmaWxlcyAo
dGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgKiByZXN0
cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwK
KyAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl
cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi
amVjdCB0byB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICog
aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29m
dHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5U
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAqIEhPTERFUlMg
QkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICog
V0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT
SU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP
UiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKwor
I2lmbmRlZiBXZWFrUmFuZG9tX2gKKyNkZWZpbmUgV2Vha1JhbmRvbV9oCisKKyNpbmNsdWRlIDxs
aW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBXZWFrUmFuZG9tIHsKK2ZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8g
Rm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmluZyByZXBsYXkuCitwdWJsaWM6Cisg
ICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZVNl
ZWQoc2VlZCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgdGhlIHNlZWQgcHJvdmlkZWQg
dGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdldFVpbnQzMigpLgorICAgIHVuc2ln
bmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hpZ2g7IH0KKworICAgIGRvdWJsZSBn
ZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkdmFuY2UoKSAvIChVSU5UX01BWCArIDEuMCk7
CisgICAgfQorCisgICAgdW5zaWduZWQgZ2V0VWludDMyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZHZhbmNlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGFkdmFuY2UoKQor
ICAgIHsKKyAgICAgICAgbV9oaWdoID0gKG1faGlnaCA8PCAxNikgKyAobV9oaWdoID4+IDE2KTsK
KyAgICAgICAgbV9oaWdoICs9IG1fbG93OworICAgICAgICBtX2xvdyArPSBtX2hpZ2g7CisgICAg
ICAgIHJldHVybiBtX2hpZ2g7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplU2VlZCh1bnNp
Z25lZCBzZWVkKQorICAgIHsKKyAgICAgICAgbV9sb3cgPSBzZWVkIF4gMHg0OTYxNkU0MjsKKyAg
ICAgICAgbV9oaWdoID0gc2VlZDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2xvdzsKKyAgICB1
bnNpZ25lZCBtX2hpZ2g7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdl
YWtSYW5kb21faApJbmRleDogU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29ya2luZyBjb3B5KQorKysgU291cmNl
L1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxOCArNTEsMjkgQEAK
ICNkZWZpbmUgV2Vha1JhbmRvbV9oCiAKICNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3
dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCi1uYW1l
c3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBXZWFrUmFuZG9tIHsKLWZyaWVu
ZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgp
IGR1cmluZyByZXBsYXkuCiBwdWJsaWM6CisgICAgV2Vha1JhbmRvbSgpCisgICAgeworICAgICAg
ICBpbml0aWFsaXplU2VlZChyYW5kb21OdW1iZXIoKSAqIChzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkgKyAxLjApKTsKKyAgICB9CisgICAgCiAgICAgV2Vha1JhbmRvbSh1bnNp
Z25lZCBzZWVkKQogICAgIHsKICAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkKKyAgICB7CisgICAg
ICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7CisgICAgICAgIG1faGlnaCA9IHNlZWQ7Cisg
ICAgfQorCiAgICAgLy8gUmV0dXJucyB0aGUgc2VlZCBwcm92aWRlZCB0aGF0IHlvdSd2ZSBuZXZl
ciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWludDMyKCkuCiAgICAgdW5zaWduZWQgc2VlZFVuc2FmZSgp
IGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQogCkBAIC03Niw2ICs4NywxOSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgfQogCisgICAgdW5zaWduZWQgZ2V0VWludDMy
KHVuc2lnbmVkIGxpbWl0KQorICAgIHsKKyAgICAgICAgaWYgKGxpbWl0IDw9IDEpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgdWludDY0X3QgY3V0b2ZmID0gKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihVSU5UX01BWCkgKyAxKSAvIGxpbWl0ICogbGltaXQ7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZ2V0VWludDMyKCk7CisgICAgICAgICAg
ICBpZiAodmFsdWUgPj0gY3V0b2ZmKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlICUgbGltaXQ7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6
CiAgICAgdW5zaWduZWQgYWR2YW5jZSgpCiAgICAgewpAQCAtODUsMTYgKzEwOSwxMiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbV9oaWdoOwogICAgIH0KIAotICAgIHZvaWQgaW5pdGlhbGl6
ZVNlZWQodW5zaWduZWQgc2VlZCkKLSAgICB7Ci0gICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2
MTZFNDI7Ci0gICAgICAgIG1faGlnaCA9IHNlZWQ7Ci0gICAgfQotCiAgICAgdW5zaWduZWQgbV9s
b3c7CiAgICAgdW5zaWduZWQgbV9oaWdoOwogfTsKIAotfSAvLyBuYW1lc3BhY2UgSlNDCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXZWFrUmFuZG9tOwogCiAjZW5kaWYgLy8gV2Vh
a1JhbmRvbV9oCg==
</data>
<flag name="review"
          id="287104"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261934</attachid>
            <date>2015-09-25 13:08:56 -0700</date>
            <delta_ts>2015-09-25 13:08:56 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>94024</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTI4NTkz
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlz
IGNoYW5nZXMgdGhlIEdDIHRvIHVzZSBhIG5ldyBXVEYgYWJzdHJhY3Rpb24gZm9yIHBhcmFsbGVs
aXNtIGNhbGxlZCBQYXJhbGxlbEhlbHBlclBvb2wuCisgICAgICAgIFRoaXMgYWxsb3dzIHVzIHRv
IHJlbW92ZSBHQ1RocmVhZCBhbmQgYWxsIG9mIHRoZSBHQ1BoYXNlIG1hY2hpbmVyeS4gVGhpcyBr
aWxscyBhIGxvdCBvZgorICAgICAgICBjb2RlIGFuZCBhbHNvIGdpdmVzIG91ciBHQyBtYWdpY2Fs
IHRocmVhZCBzaGFyaW5nIHBvd2Vycy4gSWYgdHdvIEdDcyBpbiB0d28gZGlmZmVyZW50IFZNcwor
ICAgICAgICBmaXJlIGF0IHRoZSBzYW1lIHRpbWUsIHRoZW4gdGhleSB3aWxsIGJvdGggZ2V0IGEg
cmFuZG9tIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHNoYXJlZCBHQworICAgICAgICB0aHJlYWRz
LiBJZiBvbmUgR0MgaGFwcGVucyBiZWZvcmUgdGhlIG90aGVyLCB0aGVuIGl0IHdpbGwgcHJvYmFi
bHkgZ2V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlCisgICAgICAgIHRocmVhZHMuIElmIGEgR0MgaGFw
cGVucyB3aGlsZSBhbm90aGVyIFZNIGFscmVhZHkgc3RhcnRlZCBHQ2luZywgdGhlbiBpdCB3aWxs
IHByb2JhYmx5IG5vdAorICAgICAgICBnZXQgYW55IGhlbHBlciB0aHJlYWRzLiBUaGlzIGlzIHBy
b2JhYmx5IGZpbmUsIHNpbmNlIGluIG11bHRpLVZNIHNjZW5hcmlvcyB3ZSBoYXZlIG5vCisgICAg
ICAgIHJlYXNvbiB0byBvcHRpbWl6ZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhbiB0b3RhbCB0aHJv
dWdocHV0LgorCisgICAgICAgIFRoZSBHQyBoYXMgb25lIHN0YXRpYyBoZWxwZXIgcG9vbC4gVGhp
cyBwb29sIGlzIGF2YWlsYWJsZSB2aWEgSlNDOjpoZWFwSGVscGVyUG9vbCgpLiBJdAorICAgICAg
ICB3b3VsZCBiZSBPSyBmb3Igb3RoZXIgcGFydHMgb2YgSlNDIHRvIHVzZSBpdCBpbiB0aGUgZnV0
dXJlIGZvciBwYXJhbGxlbCB0YXNrcy4gRWFjaCBIZWFwCisgICAgICAgIGluc3RhbmNlIGhhcyBh
IGhlbHBlciBjbGllbnQgYXR0YWNoZWQgdG8gdGhlIHBvb2wuCisKKyAgICAgICAgVGhlIG1hcmtp
bmcgcGhhc2UgdGVsbHMgdGhlIFBhcmFsbGVsSGVscGVyQ2xpZW50IHRvIGFzeW5jaHJvbm91c2x5
IHJ1biBhIGZ1bmN0aW9uIHRoYXQKKyAgICAgICAgam9pbnMgcGFyYWxsZWwgbWFya2luZyBhbmQg
ZmluaXNoZXMgb25jZSBtYXJraW5nIHJlYWNoZXMgdGVybWluYXRpb24uIEl0IHVzZXMgdGhlCisg
ICAgICAgIGNsaWVudC5zZXRGdW5jdGlvbigpIGlkaW9tIHdoZXJlIHRoZSB0aHJlYWRzIHNoYXJl
IHdvcmsgd2l0aCBlYWNoIG90aGVyIHVzaW5nIGEgc3BlY2lhbGl6ZWQKKyAgICAgICAgd29ya2xp
c3QuIFRoZSBQYXJhbGxlbEhlbHBlclBvb2wgaXMgbm90IGludm9sdmVkIGluIGRlY2lkaW5nIHdo
ZW4gdGhyZWFkcyBzaG91bGQgdGVybWluYXRlLgorCisgICAgICAgIFRoZSBjb3B5aW5nIHBoYXNl
IHRlbGxzIHRoZSBQYXJhbGxlbEhlbHBlckNsaWVudCB0byBydW4gYSBjb3B5aW5nIGZ1bmN0aW9u
IGluIHBhcmFsbGVsLiBJdAorICAgICAgICB1c2VzIHRoZSBjbGllbnQucnVuRnVuY3Rpb25JblBh
cmFsbGVsKCkgaWRpb20uIFRoZSBjb3B5aW5nIGZ1bmN0aW9uIGdldHMgd29yayBmcm9tIHRoZQor
ICAgICAgICBtX2Jsb2Nrc1RvQ29weSB3b3JrbGlzdCBpbnNpZGUgSGVhcC4KKworICAgICAgICBU
byB0ZXN0IHRoYXQgbXVsdGlwbGUgVk1zIHdvcmsgcHJvcGVybHksIHRoaXMgYWRkcyBhIG11bHRp
LVZNIHRlc3QgdG8gdGVzdGFwaS5tbS4gVGhpcyB0ZXN0CisgICAgICAgIGNyZWF0ZXMgZml2ZSBj
b25jdXJyZW50IFZNcyBhbmQgaGFzIGVhY2ggb2YgdGhlbSBhbGxvY2F0ZSBhYm91dCAzME1CIG9m
IG1lbW9yeSBiZWZvcmUgZG9pbmcKKyAgICAgICAgYSBmdWxsIEdDLiBJJ3ZlIGNvbmZpcm1lZCB0
aGF0IHRoaXMgdGVzdHMgdXNlcyBvbmx5IDYgdG90YWwgR0MgdGhyZWFkcyBvbiBteSA4LWNvcmUK
KyAgICAgICAgY29tcHV0ZXIgKHRoaXMgaXMgY29ycmVjdCBzaW5jZSB3ZSBhcmUgY3VycmVudGx5
IGNvbmZpZ3VyZWQgZm9yIDctd2F5IHBhcmFsbGVsaXNtKS4KKworICAgICAgICBUaGlzIHNob3Vs
ZG4ndCBhZmZlY3QgcGVyZm9ybWFuY2Ugb24gYmVuY2htYXJrcywgYnV0IGl0IHdpbGwgc3VyZSBo
ZWxwIGFwcHMgd2l0aCBhIGxvdCBvZgorICAgICAgICBWTSBpbnN0YW5jZXMuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oOgorICAgICAgICAqIGhlYXAvR0NUaHJlYWQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGhlYXAvR0NUaHJlYWQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3Bw
OgorICAgICAgICAoSlNDOjpIZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6fkhlYXAp
OgorICAgICAgICAoSlNDOjpIZWFwOjppc1BhZ2VkT3V0KToKKyAgICAgICAgKEpTQzo6SGVhcDo6
bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhY2tpbmdTdG9yZXMpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpyZXNldFZpc2l0b3JzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6dGhy
ZWFkVmlzaXRDb3VudCk6CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZEJ5dGVzVmlzaXRlZCk6
CisgICAgICAgIChKU0M6OkhlYXA6OnRocmVhZEJ5dGVzQ29waWVkKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6c3RhcnROZXh0UGhhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpIZWFwOjplbmRD
dXJyZW50UGhhc2UpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAq
IGhlYXAvSGVhcEhlbHBlclBvb2wuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6aGVhcEhlbHBl
clBvb2wpOgorICAgICAgICAqIGhlYXAvSGVhcEhlbHBlclBvb2wuaDogQWRkZWQuCisgICAgICAg
ICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tBcnJheTo6c3Rl
YWxTb21lQ2VsbHNGcm9tKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2luZyk6CisgICAgICAgIChKU0M6OlNs
b3RWaXNpdG9yOjpyZXNldCk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkZyb21T
aGFyZWQpOgorICAgICAgICAqIGppdC9CaW5hcnlTd2l0Y2guaDoKKyAgICAgICAgKiBydW50aW1l
L0NvZGVDYWNoZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiBydW50aW1l
L1dlYWtSYW5kb20uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBBUEkvdGVzdHMvdGVzdGFwaS5tbToK
KwogMjAxNS0wOS0yNCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVtb3ZlIHRoZSB1c2Ugb2YgIkltbWVkaWF0ZSIgaW4gSklUIGZ1bmN0aW9uIG5hbWVzLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTkwMjUwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
OTQsMTAgKzI5NCwxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5jcHAKICAgICBoZWFwL0dDQWN0aXZpdHlDYWxsYmFjay5jcHAK
ICAgICBoZWFwL0dDTG9nZ2luZy5jcHAKLSAgICBoZWFwL0dDVGhyZWFkLmNwcAogICAgIGhlYXAv
SGFuZGxlU2V0LmNwcAogICAgIGhlYXAvSGFuZGxlU3RhY2suY3BwCiAgICAgaGVhcC9IZWFwLmNw
cAorICAgIGhlYXAvSGVhcEhlbHBlclBvb2wuY3BwCiAgICAgaGVhcC9IZWFwU3RhdGlzdGljcy5j
cHAKICAgICBoZWFwL0hlYXBUaW1lci5jcHAKICAgICBoZWFwL0hlYXBWZXJpZmllci5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL3Rlc3RhcGkubW0JKHJldmlzaW9u
IDE5MDI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvdGVzdGFwaS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2ltcG9ydCAiUmVncmVzczE0MTgwOS5o
IgogCiAjaW1wb3J0IDxwdGhyZWFkLmg+CisjaW1wb3J0IDx2ZWN0b3I+CiAKIGV4dGVybiAiQyIg
dm9pZCBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoSlNDb250ZXh0UmVm
KTsKIGV4dGVybiAiQyIgdm9pZCBKU1N5bmNocm9ub3VzRWRlbkNvbGxlY3RGb3JEZWJ1Z2dpbmco
SlNDb250ZXh0UmVmKTsKQEAgLTQ4MSw3ICs0ODIsMzIgQEAgc3RhdGljIHZvaWQqIHRocmVhZE1h
aW4odm9pZCogY29udGV4dFB0cgogICAgIC8vIERvIHNvbWV0aGluZyB0byBlbnRlciB0aGUgVk0u
CiAgICAgVGVzdE9iamVjdCAqdGVzdE9iamVjdCA9IFtUZXN0T2JqZWN0IHRlc3RPYmplY3RdOwog
ICAgIGNvbnRleHRbQCJ0ZXN0T2JqZWN0Il0gPSB0ZXN0T2JqZWN0OwotICAgIHB0aHJlYWRfZXhp
dChudWxscHRyKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHZvaWQqIG11bHRp
Vk1UaHJlYWRNYWluKHZvaWQqIG9rUHRyKQoreworICAgIGJvb2wmIG9rID0gKnN0YXRpY19jYXN0
PGJvb2wqPihva1B0cik7CisgICAgSlNWaXJ0dWFsTWFjaGluZSAqdm0gPSBbW0pTVmlydHVhbE1h
Y2hpbmUgYWxsb2NdIGluaXRdOworICAgIEpTQ29udGV4dCogY29udGV4dCA9IFtbSlNDb250ZXh0
IGFsbG9jXSBpbml0V2l0aFZpcnR1YWxNYWNoaW5lOnZtXTsKKyAgICBbY29udGV4dCBldmFsdWF0
ZVNjcmlwdDoKKyAgICAgICAgQCJ2YXIgYXJyYXkgPSBbe31dO1xuIgorICAgICAgICAgImZvciAo
dmFyIGkgPSAwOyBpIDwgMjA7ICsraSkge1xuIgorICAgICAgICAgIiAgICB2YXIgbmV3QXJyYXkg
PSBuZXcgQXJyYXkoYXJyYXkubGVuZ3RoICogMik7XG4iCisgICAgICAgICAiICAgIGZvciAodmFy
IGogPSAwOyBqIDwgbmV3QXJyYXkubGVuZ3RoOyArK2opXG4iCisgICAgICAgICAiICAgICAgICBu
ZXdBcnJheVtqXSA9IHtwYXJlbnQ6IGFycmF5W2ogLyAyXX07XG4iCisgICAgICAgICAiICAgIGFy
cmF5ID0gbmV3QXJyYXk7XG4iCisgICAgICAgICAifVxuIl07CisgICAgaWYgKGNvbnRleHQuZXhj
ZXB0aW9uKSB7CisgICAgICAgIE5TTG9nKEAiVW5jYXVnaHQgZXhjZXB0aW9uLlxuIik7CisgICAg
ICAgIG9rID0gZmFsc2U7CisgICAgfQorICAgIGlmICghW2NvbnRleHQuZ2xvYmFsT2JqZWN0IHZh
bHVlRm9yUHJvcGVydHk6QCJhcnJheSJdLnRvT2JqZWN0KSB7CisgICAgICAgIE5TTG9nKEAiRGlk
IG5vdCBmaW5kIFwiYXJyYXlcIiB2YXJpYWJsZS5cbiIpOworICAgICAgICBvayA9IGZhbHNlOwor
ICAgIH0KKyAgICBKU1N5bmNocm9ub3VzR2FyYmFnZUNvbGxlY3RGb3JEZWJ1Z2dpbmcoW2NvbnRl
eHQgSlNHbG9iYWxDb250ZXh0UmVmXSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIC8vIFRo
aXMgdGVzdCBpcyBmbGFreS4gU2luY2UgR0MgbWFya3MgQyBzdGFjayBhbmQgcmVnaXN0ZXJzIGFz
IHJvb3RzIGNvbnNlcnZhdGl2ZWx5LApAQCAtMTQxNiw2ICsxNDQyLDIxIEBAIHN0YXRpYyB2b2lk
IHRlc3RPYmplY3RpdmVDQVBJTWFpbigpCiAgICAgICAgIGNoZWNrUmVzdWx0KEAiRGlkIG5vdCBj
cmFzaCBhZnRlciBlbnRlcmluZyB0aGUgVk0gZnJvbSBhbm90aGVyIHRocmVhZCIsIHRydWUpOwog
ICAgIH0KICAgICAKKyAgICBAYXV0b3JlbGVhc2Vwb29sIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8
cHRocmVhZF90PiB0aHJlYWRzOworICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDU7ICsraSkgeworICAgICAgICAgICAgcHRocmVhZF90IHRo
cmVhZElEOworICAgICAgICAgICAgcHRocmVhZF9jcmVhdGUoJnRocmVhZElELCBudWxscHRyLCBt
dWx0aVZNVGhyZWFkTWFpbiwgJm9rKTsKKyAgICAgICAgICAgIHRocmVhZHMucHVzaF9iYWNrKHRo
cmVhZElEKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAocHRocmVhZF90IHRocmVhZCA6IHRo
cmVhZHMpCisgICAgICAgICAgICBwdGhyZWFkX2pvaW4odGhyZWFkLCBudWxscHRyKTsKKworICAg
ICAgICBjaGVja1Jlc3VsdChAIlJhbiBjb2RlIGluIGZpdmUgY29uY3VycmVudCBWTXMgdGhhdCBH
QydkIiwgb2spOworICAgIH0KKyAgICAKICAgICBjdXJyZW50VGhpc0luc2lkZUJsb2NrR2V0dGVy
VGVzdCgpOwogICAgIHJ1bkRhdGVUZXN0cygpOwogICAgIHJ1bkpTRXhwb3J0VGVzdHMoKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTkwMjUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTY5LDYgKzU2OSw3IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVNldC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXEhlYXBIZWxwZXJQb29sLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcFN0YXRpc3RpY3MuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxIZWFwVGltZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxI
ZWFwVmVyaWZpZXIuY3BwIiAvPgpAQCAtMTM1MCw2ICsxMzUxLDcgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU3RhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcSGFuZGxlVHlwZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSGVs
cGVyUG9vbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSW5saW5l
cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwT3BlcmF0aW9uLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBSb290VmlzaXRvci5oIiAv
PgpAQCAtMTgwOSw3ICsxODExLDYgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcV2Vha01hcFByb3RvdHlwZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxXZWFrU2V0Q29uc3RydWN0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcV2Vha1NldFByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxXZWFrUmFuZG9tLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFdyaXRlQmFycmllci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxXcml0ZUJhcnJpZXJJbmxpbmVzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llx0b29sc1xDb2RlUHJvZmlsZS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTkwMjUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yOTEsNiArMjkxLDkgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5jcHAiPgogICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFw
XEhlYXBIZWxwZXJQb29sLmNwcCI+CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8
L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0YXRpc3Rp
Y3MuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMjI4OCw2ICsyMjkxLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVh
cC5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSGVscGVyUG9vbC5oIj4KKyAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIZWFwSW5saW5lcy5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzE2Nyw5ICszMTczLDYgQEAKICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha0dDTWFwLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFdlYWtSYW5kb20uaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV3JpdGVC
YXJyaWVyLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkwMjUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NCw2ICsyNzQsOCBAQAogCQkwRjMwMEI3ODE4
QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8qIERGR05v
ZGVPcmlnaW4uaCAqLzsgfTsKIAkJMEYzMDBCN0IxOEFCMUIxNDAwQTZENzJFIC8qIERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMzAwQjc5MThBQjFCMTQwMEE2RDcyRSAvKiBERkdJbnRlZ2VyQ2hl
Y2tDb21iaW5pbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGMzAwQjdDMThBQjFCMTQwMEE2RDcyRSAv
KiBERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERGR0lu
dGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi87IH07CisJCTBGMzJCRDEwMUJCMzRGMTkwMDkz
QTU3RiAvKiBIZWFwSGVscGVyUG9vbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjMyQkQwRTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBv
b2wuY3BwICovOyB9OworCQkwRjMyQkQxMTFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBv
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzJC
RDBGMUJCMzRGMTkwMDkzQTU3RiAvKiBIZWFwSGVscGVyUG9vbC5oICovOyB9OwogCQkwRjM0QjE0
OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0QjE0NzE2RDQyMDBFMDAxQ0RBNUEgLyogREZH
VXNlS2luZC5jcHAgKi87IH07CiAJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VL
aW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM0
QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5oICovOyB9OwogCQkwRjM4QjAxMTE3
Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDBGMTdDRjA3N0YwMEIxNDREMyAvKiBM
TEludEVudHJ5cG9pbnQuY3BwICovOyB9OwpAQCAtNzc1LDcgKzc3Nyw2IEBACiAJCTE0MTQ0OENC
MTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDQ4Q0ExM0ExNzZFQzAwRjVCQTFBIC8qIE1h
cmtlZEJsb2NrU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQxNDQ4Q0QxM0ExNzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxNDQ4Q0MxM0Ex
NzgzNzAwRjVCQTFBIC8qIFRpbnlCbG9vbUZpbHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MTUwMTMzMTU0QkIxM0YwMDVEOEM5OCAvKiBX
ZWFrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQxNTAxMzIxNTRCQjEzRjAwNUQ4Qzk4IC8qIFdlYWtTZXRJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQyMEJFN0IxMEFB
NkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9t
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQy
MTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDIxMzU5QTBBNjc3RjRGMDBBODE5NUUgLyogSlNC
YXNlLmNwcCAqLzsgfTsKIAkJMTQyODA4MjMxMDdFQzAyQzAwMTNFN0IyIC8qIERlYnVnZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY2OTJBODU4
MDI1NTU5N0QwMUZGNjBGNyAvKiBEZWJ1Z2dlci5jcHAgKi87IH07CiAJCTE0MjgwODJEMTA3RUMw
NTcwMDEzRTdCMiAvKiBDYWxsRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0E2MkRGRTBFMjgyNjIzMDAwNEYzMEQgLyogQ2FsbERhdGEuY3Bw
ICovOyB9OwpAQCAtMTY2NSw4ICsxNjY2LDYgQEAKIAkJQzIyMzlEMTcxNjI2MkJERDAwNUFDNUZE
IC8qIENvcHlWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyMjM5RDEyMTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5jcHAgKi87
IH07CiAJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIyMzlEMTMxNjI2MkJERDAw
NUFDNUZEIC8qIENvcHlWaXNpdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQzIyMzlEMTkxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzIyMzlEMTQxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUMyMjM5RDFBMTYyNjJC
REQwMDVBQzVGRCAvKiBHQ1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDMjIzOUQxNTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuY3Bw
ICovOyB9OwotCQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMjM5RDE2MTYyNjJCREQw
MDVBQzVGRCAvKiBHQ1RocmVhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUMyMjU0OTQzMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMjI1NDk0
MjE1RjdEQkFBMDA2NUU4OTggLyogU2xvdFZpc2l0b3IuY3BwICovOyB9OwogCQlDMjJCMzFCOTE0
MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQzI0MDMwNTUxNEI0MDRFNjAwNzlFQjY0IC8qIENvcGllZFNwYWNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyNDAzMDUzMTRCNDA0
QzkwMDc5RUI2NCAvKiBDb3BpZWRTcGFjZS5jcHAgKi87IH07CkBAIC0yMTE5LDYgKzIxMTgsOCBA
QAogCQkwRjMwMEI3NzE4QUIwNTExMDBBNkQ3MkUgLyogREZHTm9kZU9yaWdpbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlT3JpZ2luLmg7IHBhdGggPSBkZmcvREZH
Tm9kZU9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3OTE4QUIx
QjE0MDBBNkQ3MkUgLyogREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0ExOEFCMUIxNDAwQTZENzJFIC8qIERG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHSW50
ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYzMkJEMEUxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBIZWxwZXJQb29sLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzMkJEMEYxQkIzNEYxOTAwOTNBNTdGIC8qIEhlYXBIZWxw
ZXJQb29sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBIZWxwZXJQb29s
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzRCMTQ3MTZENDIwMEUwMDFDREE1
QSAvKiBERkdVc2VLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR1VzZUtpbmQuY3BwOyBwYXRoID0gZGZnL0RGR1VzZUtpbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjM0QjE0ODE2RDQyMDBFMDAxQ0RBNUEgLyogREZHVXNlS2luZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdVc2VLaW5kLmg7IHBhdGggPSBk
ZmcvREZHVXNlS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAwRjE3
Q0YwNzdGMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IExMSW50RW50cnlwb2ludC5jcHA7IHBhdGggPSBsbGludC9MTEludEVudHJ5cG9pbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYxNiw3ICsyNjE3LDYgQEAKIAkJMTQxNDQ4
Q0ExM0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE1hcmtlZEJsb2NrU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MTQ0OENDMTNBMTc4MzcwMEY1QkExQSAvKiBUaW55Qmxvb21GaWx0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUJsb29tRmlsdGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTUwMTMyMTU0QkIxM0YwMDVEOEM5OCAvKiBXZWFrU2V0
SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrU2V0SW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDIwQkU3QTEwQUE2RERCMDBGNDU1
RDIgLyogV2Vha1JhbmRvbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFr
UmFuZG9tLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MjEzNTlBMEE2NzdGNEYw
MEE4MTk1RSAvKiBKU0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyNzExMzgwQTQ2
MEJCQjAwODBFRUVBIC8qIEpTQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyOUQ3N0IwRUQyMEQ3
MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludGVycHJldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTM3LDgg
KzM1MzcsNiBAQAogCQlDMjIzOUQxMjE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29weVZpc2l0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjIzOUQxMzE2MjYyQkREMDA1QUM1RkQgLyog
Q29weVZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29weVZpc2l0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIyMzlEMTQxNjI2MkJERDAwNUFD
NUZEIC8qIENvcHlWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb3B5VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QzIyMzlEMTUxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdDVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdDVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMjU0OTQyMTVGN0RCQUEwMDY1RTg5OCAvKiBTbG90VmlzaXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbG90VmlzaXRvci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNDAzMDUzMTRCNDA0QzkwMDc5RUI2NCAvKiBDb3Bp
ZWRTcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb3BpZWRT
cGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNEQzMUUwMTYxQ0Q2OTUw
MDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBIZWFwU3RhdGlzdGljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00MjUxLDggKzQyNDksNiBAQAogCQkJCTJBQUJDREU2MThFRjI5NDIwMDAwMjA5NiAvKiBH
Q0xvZ2dpbmcuaCAqLywKIAkJCQkyQTM0M0Y3NDE4QTE3NDhCMDAzOUIwODUgLyogR0NTZWdtZW50
ZWRBcnJheS5oICovLAogCQkJCTJBMzQzRjc3MThBMTc0OUQwMDM5QjA4NSAvKiBHQ1NlZ21lbnRl
ZEFycmF5SW5saW5lcy5oICovLAotCQkJCUMyMjM5RDE1MTYyNjJCREQwMDVBQzVGRCAvKiBHQ1Ro
cmVhZC5jcHAgKi8sCi0JCQkJQzIyMzlEMTYxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmgg
Ki8sCiAJCQkJMTQyRTMxMkIxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZS5oICovLAogCQkJCUMy
ODMxOEZGMTZGRTRCN0QwMDE1N0JGRCAvKiBIYW5kbGVCbG9jay5oICovLAogCQkJCUMyODMxOTAx
MTZGRTUzM0UwMDE1N0JGRCAvKiBIYW5kbGVCbG9ja0lubGluZXMuaCAqLywKQEAgLTQyNjMsNiAr
NDI1OSw4IEBACiAJCQkJMTQ2RkE1QTgxMzc4RjZCMDAwMzYyN0EzIC8qIEhhbmRsZVR5cGVzLmgg
Ki8sCiAJCQkJMTRCQTdBOTUxM0FBREZGODAwNUI3QzJDIC8qIEhlYXAuY3BwICovLAogCQkJCTE0
QkE3QTk2MTNBQURGRjgwMDVCN0MyQyAvKiBIZWFwLmggKi8sCisJCQkJMEYzMkJEMEUxQkIzNEYx
OTAwOTNBNTdGIC8qIEhlYXBIZWxwZXJQb29sLmNwcCAqLywKKwkJCQkwRjMyQkQwRjFCQjM0RjE5
MDA5M0E1N0YgLyogSGVhcEhlbHBlclBvb2wuaCAqLywKIAkJCQlDMkRBNzc4MjE4RTI1OTk5MDA2
NkZDQjYgLyogSGVhcElubGluZXMuaCAqLywKIAkJCQkyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYg
LyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi8sCiAJCQkJMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4
IC8qIEhlYXBPcGVyYXRpb24uaCAqLywKQEAgLTUwOTIsNyArNTA5MCw2IEBACiAJCQkJQTdDQTNB
RUExN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggKi8sCiAJCQkJQTdDQTNBREYxN0RB
NDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuY3BwICovLAogCQkJCUE3Q0EzQUUwMTdE
QTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggKi8sCi0JCQkJMTQyMEJFN0ExMEFB
NkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCAqLywKIAkJCQk3MDlGQjg2MzFBRTMzNUM2MDAz
OUQwNjkgLyogV2Vha1NldENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk3MDlGQjg2NDFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVjdG9yLmggKi8sCiAJCQkJNzA5RkI4NjUxQUUzMzVD
NjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwICovLApAQCAtNjE1NSw2ICs2MTUyLDcg
QEAKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzMkJEMTExQkIzNEYxOTAwOTNBNTdGIC8qIEhl
YXBIZWxwZXJQb29sLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNB
RDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4
QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUND
ODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY5MzEsNyArNjkyOSw2IEBACiAJCQkJQTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtN
YXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRUMxN0RBNTE2ODAwNjUz
OEFGIC8qIFdlYWtNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNjE3REE0MUFF
MDA2NTM4QUYgLyogV2Vha01hcFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQyMEJF
N0IxMEFBNkREQjAwRjQ1NUQyIC8qIFdlYWtSYW5kb20uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MjQyREE3MTNGM0IxRTgwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNEU4NEZBMTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha1NldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzA5RkI4NkExQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC04MDYyLDYgKzgwNTksNyBAQAogCQkJCTBGRjQyNzQw
MTU4RUJFOEIwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmMgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY0Mjc0MzE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmMgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc0RDE1OEVCRkU2MDA0Q0I5RkYgLyogdWRpczg2X2l0YWJfaG9sZGVyLmMgaW4g
U291cmNlcyAqLywKKwkJCQkwRjMyQkQxMDFCQjM0RjE5MDA5M0E1N0YgLyogSGVhcEhlbHBlclBv
b2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDUxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9zeW4tYXR0LmMgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc0NjE1OEVCRTkxMDA0Q0I5
RkYgLyogdWRpczg2X3N5bi1pbnRlbC5jIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NDcxNThF
QkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9zeW4uYyBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDE5MDI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICsz
MSw5IEBACiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIldlYWtSYW5kb20u
aCIKICNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
R0NUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
VGhyZWFkLmNwcAkocmV2aXNpb24gMTkwMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvR0NUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdDVGhyZWFkLmgiCi0K
LSNpbmNsdWRlICJDb3B5VmlzaXRvci5oIgotI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvci5oIgotI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1HQ1RocmVhZDo6
R0NUaHJlYWQoSGVhcCYgaGVhcCwgc3RkOjp1bmlxdWVfcHRyPFNsb3RWaXNpdG9yPiBzbG90Vmlz
aXRvcikKLSAgICA6IG1fdGhyZWFkSUQoMCkKLSAgICAsIG1faGVhcChoZWFwKQotICAgICwgbV9z
bG90VmlzaXRvcihXVEY6Om1vdmUoc2xvdFZpc2l0b3IpKQotewotfQotCi1UaHJlYWRJZGVudGlm
aWVyIEdDVGhyZWFkOjp0aHJlYWRJRCgpCi17Ci0gICAgQVNTRVJUKG1fdGhyZWFkSUQpOwotICAg
IHJldHVybiBtX3RocmVhZElEOwotfQotCi12b2lkIEdDVGhyZWFkOjppbml0aWFsaXplVGhyZWFk
SUQoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJRCkKLXsKLSAgICBBU1NFUlQoIW1fdGhyZWFkSUQp
OwotICAgIG1fdGhyZWFkSUQgPSB0aHJlYWRJRDsKLX0KLQotU2xvdFZpc2l0b3IqIEdDVGhyZWFk
OjpzbG90VmlzaXRvcigpCi17Ci0gICAgQVNTRVJUKG1fc2xvdFZpc2l0b3IpOwotICAgIHJldHVy
biBtX3Nsb3RWaXNpdG9yLmdldCgpOwotfQotCi1HQ1BoYXNlIEdDVGhyZWFkOjp3YWl0Rm9yTmV4
dFBoYXNlKCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9oZWFwLm1fcGhh
c2VNdXRleCk7Ci0gICAgbV9oZWFwLm1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS53YWl0KGxvY2ss
IFt0aGlzXSB7IHJldHVybiAhbV9oZWFwLm1fZ2NUaHJlYWRzU2hvdWxkV2FpdDsgfSk7Ci0KLSAg
ICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcy0tOwotICAgIGlmICghbV9oZWFwLm1f
bnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHMpCi0gICAgICAgIG1faGVhcC5tX2FjdGl2aXR5Q29uZGl0
aW9uVmFyaWFibGUubm90aWZ5T25lKCk7Ci0KLSAgICBtX2hlYXAubV9waGFzZUNvbmRpdGlvblZh
cmlhYmxlLndhaXQobG9jaywgW3RoaXNdIHsgcmV0dXJuIG1faGVhcC5tX2N1cnJlbnRQaGFzZSAh
PSBOb1BoYXNlOyB9KTsKLSAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcysrOwot
ICAgIHJldHVybiBtX2hlYXAubV9jdXJyZW50UGhhc2U7Ci19Ci0KLXZvaWQgR0NUaHJlYWQ6Omdj
VGhyZWFkTWFpbigpCi17Ci0gICAgR0NQaGFzZSBjdXJyZW50UGhhc2U7Ci0gICAgV1RGOjpyZWdp
c3RlckdDVGhyZWFkKCk7Ci0gICAgLy8gV2FpdCBmb3IgdGhlIG1haW4gdGhyZWFkIHRvIGZpbmlz
aCBjcmVhdGluZyBhbmQgaW5pdGlhbGl6aW5nIHVzLiBUaGUgbWFpbiB0aHJlYWQgZ3JhYnMgdGhp
cyBsb2NrIGJlZm9yZSAKLSAgICAvLyBjcmVhdGluZyB0aGlzIHRocmVhZC4gV2UgYXJlbid0IGd1
YXJhbnRlZWQgdG8gaGF2ZSBhIHZhbGlkIHRocmVhZElEIHVudGlsIHRoZSBtYWluIHRocmVhZCBy
ZWxlYXNlcyB0aGlzIGxvY2suCi0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2hlYXAubV9waGFzZU11dGV4KTsKLSAgICB9Ci0gICAgewotICAgICAgICBQYXJhbGxl
bE1vZGVFbmFibGVyIGVuYWJsZXIoKm1fc2xvdFZpc2l0b3IpOwotICAgICAgICB3aGlsZSAoKGN1
cnJlbnRQaGFzZSA9IHdhaXRGb3JOZXh0UGhhc2UoKSkgIT0gRXhpdCkgewotICAgICAgICAgICAg
Ly8gTm90ZTogRWFjaCBwaGFzZSBpcyByZXNwb25zaWJsZSBmb3IgaXRzIG93biB0ZXJtaW5hdGlv
biBjb25kaXRpb25zLiBUaGUgY29tbWVudHMgYmVsb3cgZGVzY3JpYmUgCi0gICAgICAgICAgICAv
LyBob3cgZWFjaCBwaGFzZSByZWFjaGVzIHRlcm1pbmF0aW9uLgotICAgICAgICAgICAgc3dpdGNo
IChjdXJyZW50UGhhc2UpIHsKLSAgICAgICAgICAgIGNhc2UgTWFyazoKLSAgICAgICAgICAgICAg
ICBtX3Nsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4p
OwotICAgICAgICAgICAgICAgIC8vIEdDVGhyZWFkcyBvbmx5IHJldHVybiBmcm9tIGRyYWluRnJv
bVNoYXJlZCgpIGlmIHRoZSBtYWluIHRocmVhZCBzZXRzIHRoZSBtX3BhcmFsbGVsTWFya2Vyc1No
b3VsZEV4aXQgCi0gICAgICAgICAgICAgICAgLy8gZmxhZyBpbiB0aGUgR0NUaHJlYWRTaGFyZWRE
YXRhLiBUaGUgb25seSB3YXkgdGhlIG1haW4gdGhyZWFkIHNldHMgdGhhdCBmbGFnIGlzIGlmIGl0
IHJlYWxpemVzIAotICAgICAgICAgICAgICAgIC8vIHRoYXQgYWxsIG9mIHRoZSB2YXJpb3VzIHN1
YnBoYXNlcyBpbiBIZWFwOjptYXJrUm9vdHMoKSBoYXZlIGJlZW4gZnVsbHkgZmluaXNoZWQgYW5k
IHRoZXJlIGlzIAotICAgICAgICAgICAgICAgIC8vIG5vIG1vcmUgbWFya2luZyB3b3JrIHRvIGRv
IGFuZCBhbGwgb2YgdGhlIEdDVGhyZWFkcyBhcmUgaWRsZSwgbWVhbmluZyBubyBtb3JlIHdvcmsg
Y2FuIGJlIGdlbmVyYXRlZC4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ29weTogewotICAgICAgICAgICAgICAgIENvcHlWaXNpdG9yIGNvcHlWaXNpdG9yKG1faGVh
cCk7Ci0gICAgICAgICAgICAgICAgY29weVZpc2l0b3Iuc3RhcnRDb3B5aW5nKCk7Ci0gICAgICAg
ICAgICAgICAgY29weVZpc2l0b3IuY29weUZyb21TaGFyZWQoKTsKLSAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHdlJ3JlIGRvbmUgY29weWluZyB3aGVuIHdlIHJldHVybiBmcm9tIGNvcHlGcm9t
U2hhcmVkKCkgYmVjYXVzZSB3ZSB3b3VsZCAKLSAgICAgICAgICAgICAgICAvLyBvbmx5IGRvIHNv
IGlmIHRoZXJlIHdlcmUgbm8gbW9yZSBjaHVua3Mgb2YgY29weWluZyB3b3JrIGxlZnQgdG8gZG8u
IFdoZW4gdGhlcmUgaXMgbm8gCi0gICAgICAgICAgICAgICAgLy8gbW9yZSBjb3B5aW5nIHdvcmsg
dG8gZG8sIHRoZSBtYWluIHRocmVhZCB3aWxsIHdhaXQgaW4gQ29waWVkU3BhY2U6OmRvbmVDb3B5
aW5nKCkgdW50aWwgCi0gICAgICAgICAgICAgICAgLy8gYWxsIG9mIHRoZSBibG9ja3MgdGhhdCB0
aGUgR0NUaHJlYWRzIGJvcnJvd2VkIGhhdmUgYmVlbiByZXR1cm5lZC4gZG9uZUNvcHlpbmcoKSAK
LSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG91ciBib3Jyb3dlZCBDb3BpZWRCbG9jaywgYWxs
b3dpbmcgdGhlIGNvcHlpbmcgcGhhc2UgdG8gZmluaXNoLgotICAgICAgICAgICAgICAgIGNvcHlW
aXNpdG9yLmRvbmVDb3B5aW5nKCk7Ci0KLSAgICAgICAgICAgICAgICBXVEY6OnJlbGVhc2VGYXN0
TWFsbG9jRnJlZU1lbW9yeUZvclRoaXNUaHJlYWQoKTsKLQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBOb1BoYXNlOgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIEV4aXQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHQ1RocmVhZDo6Z2NUaHJlYWRTdGFydEZ1bmModm9p
ZCogZGF0YSkKLXsKLSAgICBHQ1RocmVhZCogdGhyZWFkID0gc3RhdGljX2Nhc3Q8R0NUaHJlYWQq
PihkYXRhKTsKLSAgICB0aHJlYWQtPmdjVGhyZWFkTWFpbigpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDVGhyZWFkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkocmV2aXNpb24g
MTkwMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHQ1RocmVhZF9o
Ci0jZGVmaW5lIEdDVGhyZWFkX2gKLQotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEhlYXA7Ci1jbGFz
cyBTbG90VmlzaXRvcjsKLQotZW51bSBHQ1BoYXNlIHsKLSAgICBOb1BoYXNlLAotICAgIE1hcmss
Ci0gICAgQ29weSwKLSAgICBFeGl0Ci19OwotCi1jbGFzcyBHQ1RocmVhZCB7Ci1wdWJsaWM6Ci0g
ICAgR0NUaHJlYWQoSGVhcCYsIHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4pOwotCi0gICAg
U2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yKCk7Ci0gICAgVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJ
RCgpOwotICAgIHZvaWQgaW5pdGlhbGl6ZVRocmVhZElEKFRocmVhZElkZW50aWZpZXIpOwotCi0g
ICAgc3RhdGljIHZvaWQgZ2NUaHJlYWRTdGFydEZ1bmModm9pZCopOwotCi1wcml2YXRlOgotICAg
IHZvaWQgZ2NUaHJlYWRNYWluKCk7Ci0gICAgR0NQaGFzZSB3YWl0Rm9yTmV4dFBoYXNlKCk7Ci0K
LSAgICBUaHJlYWRJZGVudGlmaWVyIG1fdGhyZWFkSUQ7Ci0gICAgSGVhcCYgbV9oZWFwOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxTbG90VmlzaXRvcj4gbV9zbG90VmlzaXRvcjsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAxOTAyNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAwOSwgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkZ1bGxHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCIKICNpbmNsdWRlICJHQ0FjdGl2aXR5Q2FsbGJhY2suaCIKICNpbmNsdWRlICJHQ0lu
Y29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKKyNpbmNsdWRlICJIZWFwSGVscGVyUG9vbC5o
IgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgogI2luY2x1ZGUgIkhlYXBSb290Vmlz
aXRvci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCkBAIC0zMzYsNyArMzM3LDYgQEAg
SGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwgbV9kZXByZWNhdGVk
RXh0cmFNZW1vcnlTaXplKDApCiAgICAgLCBtX21hY2hpbmVUaHJlYWRzKHRoaXMpCiAgICAgLCBt
X3Nsb3RWaXNpdG9yKCp0aGlzKQotICAgICwgbV9jb3B5VmlzaXRvcigqdGhpcykKICAgICAsIG1f
aGFuZGxlU2V0KHZtKQogICAgICwgbV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCiAgICAgLCBtX3dy
aXRlQmFycmllckJ1ZmZlcigyNTYpCkBAIC0zNTYsMjIgKzM1Niw4IEBAIEhlYXA6OkhlYXAoVk0q
IHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBVU0UoQ0YpCiAgICAgLCBtX2RlbGF5ZWRSZWxl
YXNlUmVjdXJzaW9uQ291bnQoMCkKICNlbmRpZgorICAgICwgbV9oZWxwZXJDbGllbnQoJmhlYXBI
ZWxwZXJQb29sKCkpCiB7Ci0gICAgewotICAgICAgICAvLyBHcmFiIHRoZSBsb2NrIHNvIHRoZSBu
ZXcgR0MgdGhyZWFkcyBjYW4gYmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZXkgc3Rh
cnQgcnVubmluZy4KLSAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VN
dXRleCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBPcHRpb25zOjpudW1iZXJP
ZkdDTWFya2VycygpOyArK2kpIHsKLSAgICAgICAgICAgIG1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVh
ZHMrKzsKLSAgICAgICAgICAgIEdDVGhyZWFkKiBuZXdUaHJlYWQgPSBuZXcgR0NUaHJlYWQoKnRo
aXMsIHN0ZDo6bWFrZV91bmlxdWU8U2xvdFZpc2l0b3I+KCp0aGlzKSk7Ci0gICAgICAgICAgICBU
aHJlYWRJZGVudGlmaWVyIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKEdDVGhyZWFkOjpnY1RocmVh
ZFN0YXJ0RnVuYywgbmV3VGhyZWFkLCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKTsKLSAgICAg
ICAgICAgIG5ld1RocmVhZC0+aW5pdGlhbGl6ZVRocmVhZElEKHRocmVhZElEKTsKLSAgICAgICAg
ICAgIG1fZ2NUaHJlYWRzLmFwcGVuZChuZXdUaHJlYWQpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBXYWl0IGZvciBhbGwgdGhlIEdDVGhyZWFkcyB0byBnZXQgdG8gdGhlIHJpZ2h0
IHBsYWNlLgotICAgICAgICBtX2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBb
dGhpc10geyByZXR1cm4gIW1fbnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOwotICAgIH0KLSAg
ICAKICAgICBtX3N0b3JhZ2VTcGFjZS5pbml0KCk7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmlmeUhl
YXAoKSkKICAgICAgICAgbV92ZXJpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFZlcmlmaWVy
Pih0aGlzLCBPcHRpb25zOjpudW1iZXJPZkdDQ3ljbGVzVG9SZWNvcmRGb3JWZXJpZmljYXRpb24o
KSk7CkBAIC0zODEsMjEgKzM2Nyw2IEBAIEhlYXA6On5IZWFwKCkKIHsKICAgICBmb3IgKFdlYWtC
bG9jayogYmxvY2sgOiBtX2xvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcykKICAgICAgICAgV2Vha0Js
b2NrOjpkZXN0cm95KGJsb2NrKTsKLQotICAgIC8vIERlc3Ryb3kgb3VyIG1hcmtpbmcgdGhyZWFk
cy4KLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBtYXJraW5nTG9jayhtX21h
cmtpbmdNdXRleCk7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBwaGFzZUxvY2sobV9w
aGFzZU11dGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudFBoYXNlID09IE5vUGhhc2UpOwot
ICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSB0cnVlOwotICAgICAgICBtX2dj
VGhyZWFkc1Nob3VsZFdhaXQgPSBmYWxzZTsKLSAgICAgICAgbV9jdXJyZW50UGhhc2UgPSBFeGl0
OwotICAgICAgICBtX3BoYXNlQ29uZGl0aW9uVmFyaWFibGUubm90aWZ5QWxsKCk7Ci0gICAgfQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2djVGhyZWFkcy5zaXplKCk7ICsraSkgewot
ICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbihtX2djVGhyZWFkc1tpXS0+dGhyZWFkSUQo
KSk7Ci0gICAgICAgIGRlbGV0ZSBtX2djVGhyZWFkc1tpXTsKLSAgICB9CiB9CiAKIGJvb2wgSGVh
cDo6aXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpCkBAIC01NzAsMTIgKzU0MSwzOSBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAKICAgICBpZiAobV9vcGVyYXRp
b25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBtX29wYXF1ZVJvb3RzLmNs
ZWFyKCk7Ci0gICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX21hcmtp
bmdNdXRleCk7Ci0gICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9IGZhbHNlOwot
ICAgICAgICBzdGFydE5leHRQaGFzZShNYXJrKTsKLSAgICB9CisKKyAgICBtX3Nob3VsZEhhc2hD
b25zID0gbV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CisKKyAgICBtX3Bh
cmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKKworICAgIG1faGVscGVyQ2xpZW50LnNl
dEZ1bmN0aW9uKAorICAgICAgICBbdGhpc10gKCkgeworICAgICAgICAgICAgU2xvdFZpc2l0b3Iq
IHNsb3RWaXNpdG9yOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fcGFyYWxsZWxTbG90VmlzaXRvckxvY2spOworICAgICAgICAgICAgICAgIGlmICht
X2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvdFZpc2l0b3I+IG5ld1Zpc2l0b3IgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTbG90VmlzaXRvcj4oKnRoaXMpOwor
ICAgICAgICAgICAgICAgICAgICBzbG90VmlzaXRvciA9IG5ld1Zpc2l0b3IuZ2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fcGFyYWxsZWxTbG90VmlzaXRvcnMuYXBwZW5kKFdURjo6bW92ZShu
ZXdWaXNpdG9yKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHNsb3RWaXNpdG9yID0gbV9hdmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy50YWtlTGFzdCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUGFyYWxs
ZWxNb2RlRW5hYmxlciBwYXJhbGxlbE1vZGVFbmFibGVyKCpzbG90VmlzaXRvcik7CisgICAgICAg
ICAgICAgICAgc2xvdFZpc2l0b3ItPmRpZFN0YXJ0TWFya2luZygpOworICAgICAgICAgICAgICAg
IHNsb3RWaXNpdG9yLT5kcmFpbkZyb21TaGFyZWQoU2xvdFZpc2l0b3I6OlNsYXZlRHJhaW4pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBsb2NrZXIobV9wYXJhbGxlbFNsb3RWaXNpdG9yTG9jayk7CisgICAgICAgICAgICAgICAgbV9h
dmFpbGFibGVQYXJhbGxlbFNsb3RWaXNpdG9ycy5hcHBlbmQoc2xvdFZpc2l0b3IpOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKwogICAgIG1fc2xvdFZpc2l0b3IuZGlkU3RhcnRNYXJraW5n
KCk7CisgICAgCiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcihtX3Nsb3RWaXNp
dG9yKTsKIAogICAgIHsKQEAgLTYwMyw4ICs2MDEsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhk
b3VibGUgZ2NTdGFydFRpbWUsCiAgICAgICAgIG1fcGFyYWxsZWxNYXJrZXJzU2hvdWxkRXhpdCA9
IHRydWU7CiAgICAgICAgIG1fbWFya2luZ0NvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwog
ICAgIH0KLSAgICBBU1NFUlQobV9jdXJyZW50UGhhc2UgPT0gTWFyayk7Ci0gICAgZW5kQ3VycmVu
dFBoYXNlKCk7CisgICAgbV9oZWxwZXJDbGllbnQuZmluaXNoKCk7CiAgICAgdXBkYXRlT2JqZWN0
Q291bnRzKGdjU3RhcnRUaW1lKTsKICAgICByZXNldFZpc2l0b3JzKCk7CiB9CkBAIC02MzMsMTUg
KzYzMCwxNSBAQCB2b2lkIEhlYXA6OmNvcHlCYWNraW5nU3RvcmVzKCkKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1fY29weUluZGV4ID0gMDsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc3RhcnROZXh0UGhhc2UoQ29weSk7Ci0gICAgICAgIAotICAgICAgICBtX2NvcHlWaXNpdG9y
LnN0YXJ0Q29weWluZygpOwotICAgICAgICBtX2NvcHlWaXNpdG9yLmNvcHlGcm9tU2hhcmVkKCk7
Ci0gICAgICAgIG1fY29weVZpc2l0b3IuZG9uZUNvcHlpbmcoKTsKIAotICAgICAgICBBU1NFUlQo
bV9jdXJyZW50UGhhc2UgPT0gQ29weSk7Ci0gICAgICAgIGVuZEN1cnJlbnRQaGFzZSgpOworICAg
ICAgICBtX2hlbHBlckNsaWVudC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAgICAgICAgICBb
dGhpc10gKCkgeworICAgICAgICAgICAgICAgIENvcHlWaXNpdG9yIGNvcHlWaXNpdG9yKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBjb3B5VmlzaXRvci5zdGFydENvcHlpbmcoKTsKKyAgICAgICAg
ICAgICAgICBjb3B5VmlzaXRvci5jb3B5RnJvbVNoYXJlZCgpOworICAgICAgICAgICAgICAgIGNv
cHlWaXNpdG9yLmRvbmVDb3B5aW5nKCk7CisgICAgICAgICAgICAgICAgV1RGOjpyZWxlYXNlRmFz
dE1hbGxvY0ZyZWVNZW1vcnlGb3JUaGlzVGhyZWFkKCk7CisgICAgICAgICAgICB9KTsKICAgICB9
CiAgICAgCiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKQEAgLTg3MCw4ICs4Njcs
OCBAQCB2b2lkIEhlYXA6OnJlc2V0VmlzaXRvcnMoKQogewogICAgIG1fc2xvdFZpc2l0b3IucmVz
ZXQoKTsKIAotICAgIGZvciAoR0NUaHJlYWQqIHRocmVhZCA6IG1fZ2NUaHJlYWRzKQotICAgICAg
ICB0aHJlYWQtPnNsb3RWaXNpdG9yKCktPnJlc2V0KCk7CisgICAgZm9yIChhdXRvJiBwYXJhbGxl
bFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQorICAgICAgICBwYXJhbGxlbFZpc2l0
b3ItPnJlc2V0KCk7CiAKICAgICBBU1NFUlQobV9zaGFyZWRNYXJrU3RhY2suaXNFbXB0eSgpKTsK
ICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwpAQCAtMTUzMiw0NSAr
MTUyOSwyNSBAQCBib29sIEhlYXA6OnN3ZWVwTmV4dExvZ2ljYWxseUVtcHR5V2Vha0JsCiBzaXpl
X3QgSGVhcDo6dGhyZWFkVmlzaXRDb3VudCgpCiB7ICAgICAgIAogICAgIHVuc2lnbmVkIGxvbmcg
cmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3Io
KS0+dmlzaXRDb3VudCgpOworICAgIGZvciAoYXV0byYgcGFyYWxsZWxWaXNpdG9yIDogbV9wYXJh
bGxlbFNsb3RWaXNpdG9ycykKKyAgICAgICAgcmVzdWx0ICs9IHBhcmFsbGVsVmlzaXRvci0+dmlz
aXRDb3VudCgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHNpemVfdCBIZWFwOjp0aHJlYWRC
eXRlc1Zpc2l0ZWQoKQogeyAgICAgICAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJl
c3VsdCArPSBtX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNWaXNpdGVkKCk7Cisg
ICAgZm9yIChhdXRvJiBwYXJhbGxlbFZpc2l0b3IgOiBtX3BhcmFsbGVsU2xvdFZpc2l0b3JzKQor
ICAgICAgICByZXN1bHQgKz0gcGFyYWxsZWxWaXNpdG9yLT5ieXRlc1Zpc2l0ZWQoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCiBzaXplX3QgSGVhcDo6dGhyZWFkQnl0ZXNDb3BpZWQoKQogeyAg
ICAgICAKICAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdCArPSBtX2djVGhyZWFk
c1tpXS0+c2xvdFZpc2l0b3IoKS0+Ynl0ZXNDb3BpZWQoKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFs
bGVsVmlzaXRvciA6IG1fcGFyYWxsZWxTbG90VmlzaXRvcnMpCisgICAgICAgIHJlc3VsdCArPSBw
YXJhbGxlbFZpc2l0b3ItPmJ5dGVzQ29waWVkKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBIZWFwOjpzdGFydE5leHRQaGFzZShHQ1BoYXNlIHBoYXNlKQotewotICAgIHN0ZDo6bG9j
a19ndWFyZDxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0gICAgQVNTRVJUKCFtX2djVGhyZWFk
c1Nob3VsZFdhaXQpOwotICAgIEFTU0VSVChtX2N1cnJlbnRQaGFzZSA9PSBOb1BoYXNlKTsKLSAg
ICBtX2djVGhyZWFkc1Nob3VsZFdhaXQgPSB0cnVlOwotICAgIG1fY3VycmVudFBoYXNlID0gcGhh
c2U7Ci0gICAgbV9waGFzZUNvbmRpdGlvblZhcmlhYmxlLm5vdGlmeUFsbCgpOwotfQotCi12b2lk
IEhlYXA6OmVuZEN1cnJlbnRQaGFzZSgpCi17Ci0gICAgQVNTRVJUKG1fZ2NUaHJlYWRzU2hvdWxk
V2FpdCk7Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fcGhhc2VNdXRleCk7Ci0g
ICAgbV9jdXJyZW50UGhhc2UgPSBOb1BoYXNlOwotICAgIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCA9
IGZhbHNlOwotICAgIG1fcGhhc2VDb25kaXRpb25WYXJpYWJsZS5ub3RpZnlBbGwoKTsKLSAgICBt
X2FjdGl2aXR5Q29uZGl0aW9uVmFyaWFibGUud2FpdChsb2NrLCBbdGhpc10geyByZXR1cm4gIW1f
bnVtYmVyT2ZBY3RpdmVHQ1RocmVhZHM7IH0pOwotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE5MDI1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NiBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgogI2luY2x1ZGUgIkNvcHlWaXNpdG9yLmgi
CiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQuaCIKLSNpbmNsdWRlICJHQ1RocmVh
ZC5oIgogI2luY2x1ZGUgIkhhbmRsZVNldC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCiAj
aW5jbHVkZSAiSGVhcE9wZXJhdGlvbi5oIgpAQCAtNDYsNiArNDUsNyBAQAogI2luY2x1ZGUgIldy
aXRlQmFycmllclN1cHBvcnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wu
aD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM0Nyw4ICszNDcsNiBAQCBwcml2YXRlOgogICAg
IHNpemVfdCB0aHJlYWREdXBTdHJpbmdzKCk7CiAKICAgICB2b2lkIGdldE5leHRCbG9ja3NUb0Nv
cHkoc2l6ZV90Jiwgc2l6ZV90Jik7Ci0gICAgdm9pZCBzdGFydE5leHRQaGFzZShHQ1BoYXNlKTsK
LSAgICB2b2lkIGVuZEN1cnJlbnRQaGFzZSgpOwogCiAgICAgY29uc3QgSGVhcFR5cGUgbV9oZWFw
VHlwZTsKICAgICBjb25zdCBzaXplX3QgbV9yYW1TaXplOwpAQCAtMzgzLDcgKzM4MSwxNCBAQCBw
cml2YXRlOgogICAgIE1hY2hpbmVUaHJlYWRzIG1fbWFjaGluZVRocmVhZHM7CiAgICAgCiAgICAg
U2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKLSAgICBDb3B5VmlzaXRvciBtX2NvcHlWaXNpdG9y
OworCisgICAgLy8gV2UgcG9vbCB0aGUgc2xvdCB2aXNpdG9ycyB1c2VkIGJ5IHBhcmFsbGVsIG1h
cmtpbmcgdGhyZWFkcy4gSXQncyB1c2VmdWwgdG8gYmUgYWJsZSB0bworICAgIC8vIGVudW1lcmF0
ZSBvdmVyIHRoZW0sIGFuZCBpdCdzIHVzZWZ1bCB0byBoYXZlIHRoZW0gY2FjaGUgc29tZSBzbWFs
bCBhbW91bnQgb2YgbWVtb3J5IGZyb20KKyAgICAvLyBvbmUgR0MgdG8gdGhlIG5leHQuIEdDIG1h
cmtpbmcgdGhyZWFkcyBjbGFpbSB0aGVzZSBhdCB0aGUgc3RhcnQgb2YgbWFya2luZywgYW5kIHJl
dHVybgorICAgIC8vIHRoZW0gYXQgdGhlIGVuZC4KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFNsb3RWaXNpdG9yPj4gbV9wYXJhbGxlbFNsb3RWaXNpdG9yczsKKyAgICBWZWN0b3I8U2xvdFZp
c2l0b3IqPiBtX2F2YWlsYWJsZVBhcmFsbGVsU2xvdFZpc2l0b3JzOworICAgIExvY2sgbV9wYXJh
bGxlbFNsb3RWaXNpdG9yTG9jazsKIAogICAgIEhhbmRsZVNldCBtX2hhbmRsZVNldDsKICAgICBI
YW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOwpAQCAtNDIyLDggKzQyNyw2IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1fc2hvdWxkSGFzaENvbnMgeyBmYWxzZSB9OwogCi0gICAgVmVjdG9yPEdDVGhy
ZWFkKj4gbV9nY1RocmVhZHM7Ci0KICAgICBMb2NrIG1fbWFya2luZ011dGV4OwogICAgIENvbmRp
dGlvbiBtX21hcmtpbmdDb25kaXRpb25WYXJpYWJsZTsKICAgICBNYXJrU3RhY2tBcnJheSBtX3No
YXJlZE1hcmtTdGFjazsKQEAgLTQzOSwxNSArNDQyLDEwIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90
IG1fY29weUluZGV4IHsgMCB9OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc19ibG9ja0ZyYWdt
ZW50TGVuZ3RoID0gMzI7CiAKLSAgICBMb2NrIG1fcGhhc2VNdXRleDsKLSAgICBDb25kaXRpb24g
bV9waGFzZUNvbmRpdGlvblZhcmlhYmxlOwotICAgIENvbmRpdGlvbiBtX2FjdGl2aXR5Q29uZGl0
aW9uVmFyaWFibGU7Ci0gICAgdW5zaWduZWQgbV9udW1iZXJPZkFjdGl2ZUdDVGhyZWFkcyB7IDAg
fTsKLSAgICBib29sIG1fZ2NUaHJlYWRzU2hvdWxkV2FpdCB7IGZhbHNlIH07Ci0gICAgR0NQaGFz
ZSBtX2N1cnJlbnRQaGFzZSB7IE5vUGhhc2UgfTsKLQogICAgIExpc3RhYmxlSGFuZGxlcjxXZWFr
UmVmZXJlbmNlSGFydmVzdGVyPjo6TGlzdCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzOwogICAg
IExpc3RhYmxlSGFuZGxlcjxVbmNvbmRpdGlvbmFsRmluYWxpemVyPjo6TGlzdCBtX3VuY29uZGl0
aW9uYWxGaW5hbGl6ZXJzOworCisgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQgbV9oZWxwZXJDbGll
bnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcEhlbHBlclBvb2wuaCIKKworI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K1BhcmFsbGVsSGVscGVyUG9vbCYgaGVhcEhlbHBlclBvb2woKQoreworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBpbml0aWFsaXplSGVscGVyUG9vbE9uY2VGbGFnOworICAgIHN0YXRpYyBQYXJh
bGxlbEhlbHBlclBvb2wqIGhlbHBlclBvb2w7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAg
IGluaXRpYWxpemVIZWxwZXJQb29sT25jZUZsYWcsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAg
IGhlbHBlclBvb2wgPSBuZXcgUGFyYWxsZWxIZWxwZXJQb29sKCk7CisgICAgICAgICAgICBoZWxw
ZXJQb29sLT5lbnN1cmVUaHJlYWRzKE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzKCkgLSAxKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuICpoZWxwZXJQb29sOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBlclBvb2wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSGVscGVyUG9v
bC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcEhlbHBl
clBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcEhlbHBlclBvb2xfaAor
I2RlZmluZSBIZWFwSGVscGVyUG9vbF9oCisKKyNpbmNsdWRlIDx3dGYvUGFyYWxsZWxIZWxwZXJQ
b29sLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitQYXJhbGxlbEhlbHBlclBvb2wmIGhlYXBIZWxw
ZXJQb29sKCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcEhlbHBlclBv
b2xfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJl
dmlzaW9uIDE5MDI1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsOCBAQCB2b2lkIE1hcmtTdGFja0FycmF5
OjpzdGVhbFNvbWVDZWxsc0Zyb20oCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzaXpl
X3QgbnVtYmVyT2ZDZWxsc1RvU3RlYWwgPSAob3RoZXIuc2l6ZSgpICsgaWRsZVRocmVhZENvdW50
IC0gMSkgLyBpZGxlVGhyZWFkQ291bnQ7IC8vIFJvdW5kIHVwIHRvIHN0ZWFsIDEgLyAxLgorICAg
IC8vIFN0ZWFsIGNlaWwob3RoZXIuc2l6ZSgpIC8gaWRsZVRocmVhZENvdW50KSB0aGluZ3MuCisg
ICAgc2l6ZV90IG51bWJlck9mQ2VsbHNUb1N0ZWFsID0gKG90aGVyLnNpemUoKSArIGlkbGVUaHJl
YWRDb3VudCAtIDEpIC8gaWRsZVRocmVhZENvdW50OwogICAgIHdoaWxlIChudW1iZXJPZkNlbGxz
VG9TdGVhbC0tID4gMCAmJiBvdGhlci5jYW5SZW1vdmVMYXN0KCkpCiAgICAgICAgIGFwcGVuZChv
dGhlci5yZW1vdmVMYXN0KCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAkocmV2aXNpb24gMTkwMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBA
CiAjaW5jbHVkZSAiQ29uc2VydmF0aXZlUm9vdHMuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZS5o
IgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgotI2luY2x1ZGUgIkdDVGhyZWFkLmgi
CiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiVk0uaCIKQEAgLTY3LDEwICs2Niw3IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRp
ZFN0YXJ0TWFya2luZygpCiAgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09
IEZ1bGxDb2xsZWN0aW9uKQogICAgICAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkp
OyAvLyBTaG91bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgogCi0gICAgbV9oZWFwLm1fc2hvdWxkSGFz
aENvbnMgPSBtX2hlYXAubV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CiAg
ICAgbV9zaG91bGRIYXNoQ29ucyA9IG1faGVhcC5tX3Nob3VsZEhhc2hDb25zOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2hlYXAubV9nY1RocmVhZHMuc2l6ZSgpOyArK2kpCi0gICAg
ICAgIG1faGVhcC5tX2djVGhyZWFkc1tpXS0+c2xvdFZpc2l0b3IoKS0+bV9zaG91bGRIYXNoQ29u
cyA9IG1faGVhcC5tX3Nob3VsZEhhc2hDb25zOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNl
dCgpCkBAIC0yMjEsNyArMjE3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6ZHJhaW5Gcm9tU2hhcmVk
KFNoYXJlZAogICAgICAgICAgICAgICAgIGlmIChtX2hlYXAubV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0KQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgIAorCiAgICAgICAgICAgICBtX3N0YWNrLnN0ZWFsU29tZUNlbGxzRnJvbSgKICAgICAg
ICAgICAgICAgICBtX2hlYXAubV9zaGFyZWRNYXJrU3RhY2ssIG1faGVhcC5tX251bWJlck9mV2Fp
dGluZ1BhcmFsbGVsTWFya2Vycyk7CiAgICAgICAgICAgICBtX2hlYXAubV9udW1iZXJPZkFjdGl2
ZVBhcmFsbGVsTWFya2VycysrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9CaW5h
cnlTd2l0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0JpbmFy
eVN3aXRjaC5oCShyZXZpc2lvbiAxOTAyNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0JpbmFyeVN3aXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNs
dWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKLSNpbmNsdWRlICJX
ZWFrUmFuZG9tLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIAogbmFtZXNwYWNlIEpT
QyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCShy
ZXZpc2lvbiAxOTAyNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db2RlQ2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDExIEBACiAjaW5jbHVkZSAiU291cmNl
Q29kZS5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgogI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1l
bnQuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtS
YW5kb20uaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMTkwMjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBAQAogI2luY2x1ZGUgIlR5cGVk
QXJyYXlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXZWFrUmFuZG9tLmgiCiAjaW5jbHVkZSA8d3RmL0Jh
Zy5oPgogI2luY2x1ZGUgPHd0Zi9CdW1wUG9pbnRlckFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgpAQCAtNjYsNiArNjUsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGFja0JvdW5k
cy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTcGVjaWZpYy5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CiAjaW5jbHVk
ZSA8d3RmL1dURlRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TeW1ib2xSZWdpc3Ry
eS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1dlYWtSYW5kb20uaAkocmV2aXNpb24gMTkwMjUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICoKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgSWFuIEMuIEJ1bGxhcmQKLSAqIAotICogUGVy
bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24K
LSAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uCi0gKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0
d2FyZSB3aXRob3V0Ci0gKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvIHVzZSwKLSAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi0gKiBjb3BpZXMgb2YgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCi0gKiBjb25kaXRpb25z
OgotICogCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBzaGFsbCBiZQotICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh
bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCi0g
KiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO
RAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD
T1BZUklHSFQKLSAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLAotICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi0gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gKiBPVEhFUiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBXZWFrUmFuZG9tX2gKLSNkZWZpbmUgV2Vha1Jh
bmRvbV9oCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBXZWFrUmFuZG9tIHsKLWZyaWVuZCBjbGFz
cyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmlu
ZyByZXBsYXkuCi1wdWJsaWM6Ci0gICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQotICAgIHsK
LSAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVy
bnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdl
dFVpbnQzMigpLgotICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hp
Z2g7IH0KLQotICAgIGRvdWJsZSBnZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkdmFuY2Uo
KSAvIChVSU5UX01BWCArIDEuMCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgZ2V0VWludDMyKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhZHZhbmNlKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IHVuc2lnbmVkIGFkdmFuY2UoKQotICAgIHsKLSAgICAgICAgbV9oaWdoID0gKG1faGlnaCA8PCAx
NikgKyAobV9oaWdoID4+IDE2KTsKLSAgICAgICAgbV9oaWdoICs9IG1fbG93OwotICAgICAgICBt
X2xvdyArPSBtX2hpZ2g7Ci0gICAgICAgIHJldHVybiBtX2hpZ2g7Ci0gICAgfQotCi0gICAgdm9p
ZCBpbml0aWFsaXplU2VlZCh1bnNpZ25lZCBzZWVkKQotICAgIHsKLSAgICAgICAgbV9sb3cgPSBz
ZWVkIF4gMHg0OTYxNkU0MjsKLSAgICAgICAgbV9oaWdoID0gc2VlZDsKLSAgICB9Ci0KLSAgICB1
bnNpZ25lZCBtX2xvdzsKLSAgICB1bnNpZ25lZCBtX2hpZ2g7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotI2VuZGlmIC8vIFdlYWtSYW5kb21faApJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDI1MCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAwIEBA
CisyMDE1LTA5LTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Vk1zIHNob3VsZCBzaGFyZSBHQyB0aHJlYWRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk0MzMKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vMTI4NTkz
NDQKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlz
IGFkZHMgdHdvIG1ham9yIHRoaW5ncyB0byBXVEY6IFdlYWtSYW5kb20gYW5kIFBhcmFsbGVsSGVs
cGVyUG9vbC4gV2Vha1JhbmRvbSB3YXMKKyAgICAgICAgYWxyZWFkeSBpbiBKU0M7IHdlJ3JlIGp1
c3QgaG9pc3RpbmcgaXQgaW50byBXVEYuIEl0J3MganVzdCBhIHdlYWsgcmFuZG9tIG51bWJlciBn
ZW5lcmF0b3IKKyAgICAgICAgdGhhdCdzIHN1aXRhYmxlIGZvciBwbGFjZXMgd2hlcmUgeW91IG5l
ZWQganVzdCBhIHRpbnkgYml0IG9mIHJhbmRvbW5lc3MuCisKKyAgICAgICAgUGFyYWxsZWxIZWxw
ZXJQb29sIGlzIGEgbmV3IEFQSSB0aGF0IHNpbXBsaWZpZXMgZGF0YS1wYXJhbGxlbCBhbGdvcml0
aG1zIGxpa2UgdGhlIEpTQyBHQy4KKyAgICAgICAgSW4gYSBkYXRhLXBhcmFsbGVsIGFsZ29yaXRo
bSwgd2Ugd2FudCB0byBydW4gb25lIHRhc2sgb24gYXMgbWFueSBjb3JlcyBhcyBwb3NzaWJsZSBh
bmQgbGV0CisgICAgICAgIHRoZSB0YXNrIHdvcnJ5IGFib3V0IHdoaWNoIHN1YnNldCBvZiB0aGUg
aW5wdXQgZGF0YSB0byB3b3JrIG9uLiBJbiBzb21lIGNhc2VzLCB0aGUKKyAgICAgICAgYWxnb3Jp
dGhtIHdpbGwgbm90IG5lZWQgdG8gZG8gYW55IGxvYWQgYmFsYW5jaW5nIC0gYW5kIGlmIGxvYWQg
YmFsYW5jaW5nIGlzIHJlcXVpcmVkLCBpdCdzCisgICAgICAgIHVwIHRvIHRoZSB1c2VyLiBUaGlz
IGlzIGFwcHJvcHJpYXRlIGluIGNvbnRleHRzIHdoZXJlIHRoZSBsb2FkIGJhbGFuY2luZyBuZWVk
cyB0byBiZQorICAgICAgICBjdXN0b20tdHVuZWQgZm9yIHBlcmZvcm1hbmNlLCBsaWtlIHRoZSBH
QydzIG1hcmtpbmcgcGhhc2UuCisKKyAgICAgICAgVGhpcyBuZXcgQVBJIGhhcyB0aHJlZSBjb25j
ZXB0czogdGFzaywgY2xpZW50LCBhbmQgcG9vbC4gQSB0YXNrIGlzIGEgcmVmZXJlbmNlIGNvdW50
ZWQKKyAgICAgICAgb2JqZWN0IHdpdGggYSBydW4oKSBtZXRob2QsIHdoaWNoIG1heSBiZSBydW4g
aW4gcGFyYWxsZWwuIEl0IGlzIHVzdWFsbHkgdXNlZCB0byB3cmFwIGEKKyAgICAgICAgZnVuY3Rv
ci4gQSBwb29sIGlzIGEgcG9vbCBvZiB0aHJlYWRzIHRoYXQgY2FuIHJ1biB0aGluZ3MuIEEgY2xp
ZW50IGlzIGEgcGxhY2Vob2xkZXIgZm9yIGEKKyAgICAgICAgdGFzay4gQSBjbGllbnQgY2FuIGhh
dmUgemVybyBvciBvbmUgdGFza3MuIEEgY2xpZW50IG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIGEg
cG9vbC4gV2hlbiBhCisgICAgICAgIGNsaWVudCBoYXMgYSB0YXNrLCB0aGUgcG9vbCdzIHRocmVh
ZHMgbWF5IGNob29zZSB0byBydW4gaXQuIElmIGEgdGhyZWFkIHN0YXJ0cyBydW5uaW5nIGEKKyAg
ICAgICAgdGFzaywgaXQgd2lsbCBydW4gaXQgdG8gY29tcGxldGlvbi4gV2hlbiB0aGUgdGFzayBy
ZXR1cm5zIG9uIGFueSB0aHJlYWQsIHRoZSBjbGllbnQgdGFrZXMKKyAgICAgICAgaXQgdG8gbWVh
biB0aGF0IHRoZSB0YXNrIHNob3VsZCBiZSByZW1vdmVkLiBUaGF0IG1lYW5zIHRoYXQgYW55IGN1
cnJlbnRseSBydW5uaW5nIGluc3RhbmNlcworICAgICAgICBvZiB0aGUgdGFzayB3aWxsIGZpbmlz
aCBidXQgbm8gbmV3IHRocmVhZHMgd2lsbCBhdHRlbXB0IHRvIHJ1biB0aGUgdGFzay4gWW91IGNh
biBlYXNpbHkgYXNrCisgICAgICAgIGEgY2xpZW50IHRvIHdhaXQgdW50aWwgYSB0YXNrIGZpbmlz
aGVzLiBZb3UgY2FuIGFsc28gZWFzaWx5IGFzayBhIGNsaWVudCB0byBydW4gYSB0YXNrIG9uCisg
ICAgICAgIHRoZSBjdXJyZW50IHRocmVhZCBpbiBhZGRpdGlvbiB0byBwb3NzaWJseSBzb21lIGhl
bHBlciB0aHJlYWRzIGZyb20gdGhlIHBvb2wuCisKKyAgICAgICAgRm9yIHNvbWUgZGF0YS1wYXJh
bGxlbCBhbGdvcml0aG1zLCBwcm9ncmFtbWluZyB3aXRoIFBhcmFsbGVsSGVscGVyUG9vbCBpcyBh
cyBlYXN5IGFzOgorCisgICAgICAgIGNsaWVudC5ydW5GdW5jdGlvbkluUGFyYWxsZWwoCisgICAg
ICAgICAgICBbPV0gKCkgeworICAgICAgICAgICAgICAgIGRvIHRoaW5nczsKKyAgICAgICAgICAg
IH0pOworCisgICAgICAgIE5vdGUgdGhhdCB5b3UgY2Fubm90IHRlbGwgYWhlYWQgb2YgdGltZSBo
b3cgbWFueSB0aHJlYWRzIHdpbGwgam9pbiB0byBoZWxwIHRoZSB0YXNrLgorICAgICAgICBUaHJl
YWRzIG1heSBiZWNvbWUgYXZhaWxhYmxlIGFmdGVyIHRoZSB0YXNrIGhhcyBhbHJlYWR5IHN0YXJ0
ZWQgcnVubmluZy4gVGhvc2UgdGhyZWFkcyBtYXkKKyAgICAgICAgam9pbiBhZnRlciB0aGUgb3Ro
ZXIgdGhyZWFkcyBoYXZlIGFscmVhZHkgc3RhcnRlZC4gSXQncyBub3QgYWR2aXNhYmxlIHRvIG1h
a2UgYWxnb3JpdGhtaWMKKyAgICAgICAgZGVjaXNpb25zIGJhc2VkIG9uIGNsaWVudC5udW1iZXJP
ZkFjdGl2ZVRocmVhZHMoKSwgc2luY2UgdGhhdCBudW1iZXIgbWF5IGNoYW5nZS4gVXN1YWxseQor
ICAgICAgICB0aGUgYmVzdCB3YXkgdG8gdXNlIFBhcmFsbGVsSGVscGVyUG9vbCBpcyB3aXRoIGFu
IGFsZ29yaXRobSB0aGF0IGhhcyBpdHMgb3duIGN1c3RvbQorICAgICAgICB3b3JrbGlzdC4gQW4g
ZXhhbXBsZSBvZiBhIHZlcnkgc2ltcGxlIGN1c3RvbSB3b3JrbGlzdCBpcyB0aGUgb25lIGluIHRo
ZSBKU0MgR0MncyBjb3B5aW5nCisgICAgICAgIHBoYXNlIC0gaXQncyBqdXN0IGEgVmVjdG9yIGFu
ZCBhbiBpbmRleCB0aGF0IGluZGljYXRlcyB0aGUgbmV4dCBzZXQgb2YgZWxlbWVudHMgdG8gcHJv
Y2Vzcy4KKworICAgICAgICBUaGlzIG5ldyBBUEkgd2FzIGluaXRpYWxseSBkZXNpZ25lZCB0byBz
aW1wbGlmeSBob3cgR0NUaHJlYWQgd29ya3MsIGJ5IHJlcGxhY2luZyBQaGFzZSB3aXRoCisgICAg
ICAgIGEgY2FsbGJhY2sgdGhhdCBjb250YWlucyB0aGUgcGhhc2UncyB3b3JrbG9hZC4gSSB0aGVu
IHJlYWxpemVkIHRoYXQgd2l0aCBhIGZldyB0d2Vha3MsIEkKKyAgICAgICAgY291bGQgbWFrZSB0
aGlzIHNvbWV3aGF0IGdlbmVyYWwgZW5vdWdoIHRoYXQgaXQgbWlnaHQgYmVjb21lIGludGVyZXN0
aW5nIG91dHNpZGUgR0MuIEkgYWxzbworICAgICAgICByZWFsaXplZCB0aGF0IEkgY291bGQgdXNl
IHRoaXMgdG8gZW5hYmxlIHRocmVhZCBzaGFyaW5nLiBTbywgYWx0aG91Z2ggdGhlIEFQSSBpcyBr
aW5kYQorICAgICAgICBxdWlya3ksIGl0J3MgZ3JvdW5kZWQgaW4gdGhlIHJlYWxpdHkgb2YgaG93
IHRoZSBKU0MgR0MgZG9lcyBwYXJhbGxlbGlzbS4KKworICAgICAgICAqIFdURi52Y3hwcm9qL1dU
Ri52Y3hwcm9qOgorICAgICAgICAqIFdURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnM6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OlBhcmFsbGVsSGVscGVyQ2xp
ZW50KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBl
ckNsaWVudCk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCk6CisgICAgICAgIChX
VEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nKToKKyAgICAgICAgKFdURjo6
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKToKKyAgICAgICAgKFdURjo6
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVs
SGVscGVyQ2xpZW50OjpydW5UYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29s
OjpQYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6
On5QYXJhbGxlbEhlbHBlclBvb2wpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6
OmFkZFRocmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRo
cmVhZHMpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29tZUhlbHBpbmcp
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmRpZE1ha2VXb3JrQXZhaWxhYmxl
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpoZWxwZXJUaHJlYWRCb2R5KToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJQb29sOjpoYXNDbGllbnRXaXRoVGFzayk6Cisg
ICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2spOgorICAg
ICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRoVGFzayk6Cisg
ICAgICAgICogd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKFdURjo6UGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCk6CisgICAgICAgIChXVEY6OlBh
cmFsbGVsSGVscGVyQ2xpZW50Ojpwb29sKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJD
bGllbnQ6Om51bWJlck9mQWN0aXZlVGhyZWFkcyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVs
cGVyUG9vbDo6bnVtYmVyT2ZUaHJlYWRzKToKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6U2hhcmVkVGFzazo6U2hhcmVkVGFzayk6CisgICAgICAgIChX
VEY6OlNoYXJlZFRhc2s6On5TaGFyZWRUYXNrKToKKyAgICAgICAgKFdURjo6U2hhcmVkVGFza0Z1
bmN0b3I6OlNoYXJlZFRhc2tGdW5jdG9yKToKKyAgICAgICAgKFdURjo6Y3JlYXRlU2hhcmVkVGFz
ayk6CisgICAgICAgICogd3RmL1dlYWtSYW5kb20uaDogQ29waWVkIGZyb20gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvV2Vha1JhbmRvbS5oLgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9t
OjpXZWFrUmFuZG9tKToKKyAgICAgICAgKFdURjo6V2Vha1JhbmRvbTo6aW5pdGlhbGl6ZVNlZWQp
OgorICAgICAgICAoV1RGOjpXZWFrUmFuZG9tOjpzZWVkVW5zYWZlKToKKyAgICAgICAgKFdURjo6
V2Vha1JhbmRvbTo6Z2V0VWludDMyKToKKyAgICAgICAgKFdURjo6V2Vha1JhbmRvbTo6YWR2YW5j
ZSk6CisgICAgICAgIChKU0M6OldlYWtSYW5kb206OldlYWtSYW5kb20pOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpXZWFrUmFuZG9tOjpzZWVkVW5zYWZlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6V2Vha1JhbmRvbTo6Z2V0VWludDMyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6V2Vha1Jh
bmRvbTo6YWR2YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYWtSYW5kb206OmluaXRp
YWxpemVTZWVkKTogRGVsZXRlZC4KKwogMjAxNS0wOS0yNSAgSm9zZXBoIFBlY29yYXJvICA8cGVj
b3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IFN0b3B3YXRjaDo6ZWxhcHNlZFRp
bWUKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTkwMjUwKQor
KysgU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDYgKzExNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcT1NBbGxvY2F0
b3JXaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXE9TUmFuZG9tU291
cmNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2suY3Bw
IiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSGVscGVyUG9vbC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzR2VuZXJp
Yy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUGFya2luZ0xvdC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUHJpbnRTdHJlYW0uY3BwIiAvPgpA
QCAtMjQ2LDYgKzI0Nyw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFnZUFs
bG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2su
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlUmVzZXJ2YXRpb24uaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEhlbHBlclBvb2wuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNHZW5lcmljLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaCIg
Lz4KQEAgLTI2OSw2ICsyNzEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNl
Z21lbnRlZFZlY3Rvci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNlbnRp
bmVsTGlua2VkTGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNIQTEu
aCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxTaGFyZWRUYXNrLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcU2luZ2x5TGlua2VkTGlzdC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNpeENoYXJhY3Rlckhhc2guaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxTdGFja0JvdW5kcy5oIiAvPgpAQCAtMzEzLDYgKzMx
Niw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcVk1UYWdzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcd2luXEdESU9iamVjdC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cd3RmXHdpblxXb3JrSXRlbVdpbi5oIiAvPgorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cd3RmXFdlYWtSYW5kb20uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHd0ZlxXb3JkTG9jay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3Rm
XFdvcmtRdWV1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFdURlRocmVh
ZERhdGEuaCIgLz4KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmls
dGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZp
bHRlcnMJKHJldmlzaW9uIDE5MDI1MCkKKysrIFNvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZj
eHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLe+7vzw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgogPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8v
c2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdy
b3VwPgogICAgIDxGaWx0ZXIgSW5jbHVkZT0iZHRvYSI+CkBAIC0xNzQsNiArMTc0LDkgQEAKICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYWdlQmxvY2suY3BwIj4KICAgICAgIDxGaWx0
ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx3dGZcUGFyYWxsZWxIZWxwZXJQb29sLmNwcCI+CisgICAgICA8RmlsdGVyPnd0ZjwvRmls
dGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFBh
cmFsbGVsSm9ic0dlbmVyaWMuY3BwIj4KICAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC01NDcsNiArNTUwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxQYWdlUmVzZXJ2YXRpb24uaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVs
SGVscGVyUG9vbC5oIj4KKyAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGFyYWxsZWxKb2JzLmgiPgogICAg
ICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTYwNCw2ICs2MTAs
OSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNIQTEuaCI+CiAgICAgICA8Rmls
dGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cd3RmXFNoYXJlZFRhc2suaCI+CisgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgorICAg
IDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFNpbmdseUxpbmtl
ZExpc3QuaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
OTAyNTApCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAv
KiBOb0xvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEYyQjY2QTYx
N0I2QjRGQjAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCNjZBNDE3QjZCNEY3MDBBN0FFM0Yg
LyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLzsgfTsKIAkJMEYyQjY2QTcxN0I2QjRGRDAwQTdB
RTNGIC8qIEZsaXBCeXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovOyB9Owor
CQkwRjM1MDE2NDFCQjI1OEQ1MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzNTAxNjMxQkIyNThDODAwRjBBMkEz
IC8qIFdlYWtSYW5kb20uaCAqLzsgfTsKIAkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBh
cmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkw
RjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1Bv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CkBAIC00Nyw3ICs0
OCwxMCBAQAogCQkwRkUxNjQ2QjFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0NjkxQjZGRkM5NjAwNDAw
RTdDIC8qIExvY2suaCAqLzsgfTsKIAkJMEZFNDQ3OUMxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRM
b2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RTQ0NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi87IH07CiAJCTBGRTQ0NzlE
MUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmggKi87IH07CisJCTBGRUIzRENGMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0RDRTFCQjVE
Njg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovOyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2
NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsg
fTsKKwkJMEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGMTlEQTFC
QjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLzsgfTsKKwkJMEZGRjE5
REQxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REIxQkIzMzRFQjAwODg2RDkx
IC8qIFBhcmFsbGVsSGVscGVyUG9vbC5oICovOyB9OwogCQkxNDAyMkY0MTE4RjVDM0ZDMDA3RkYw
RUIgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQwMjJGNDAxOEY1QzNGQzAwN0ZGMEVCIC8qIGxpYmJtYWxsb2MuYSAqLzsg
fTsKIAkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRjYxMUQxNTY1RjBGOTAwREI1
MTRBIC8qIFJBTVNpemUuY3BwICovOyB9OwogCQkxNDNGNjEyMDE1NjVGMEY5MDBEQjUxNEEgLyog
UkFNU2l6ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQzRjYxMUUxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9ICgpOyB9OyB9OwpAQCAtMzEyLDYgKzMxNiw3IEBACiAJCTBGMkI2NkE0MTdCNkI0
RjcwMEE3QUUzRiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZB
NTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3
MkUgLyogSGFzaE1ldGhvZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMzUwMTYzMUJCMjU4QzgwMEYwQTJBMyAvKiBXZWFrUmFu
ZG9tLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSYW5kb20uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVEIC8qIFBh
cmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2lu
Z0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODI0QTY1MUI3NDQzQTAw
MDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0
M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzM1LDcg
KzM0MCwxMCBAQAogCQkwRkUxNjQ2OTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTQ0NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXb3JkTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRy
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQYXJhbGxlbEhlbHBlclBvb2wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkZGMTlEQjFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsSGVscGVyUG9vbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDAyMkY0MDE4RjVDM0ZDMDA3RkYwRUIgLyogbGliYm1hbGxv
Yy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJj
aGl2ZS5hcjsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJMTQzRjYxMUQxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUkFNU2l6ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0M0Y2MTFFMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJBTVNpemUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTgxOCw2ICs4MjYsOCBAQAogCQkJCUE4QTQ3MkUzMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYWdlQmxvY2suY3BwICovLAogCQkJCUE4QTQ3MkU0MTUxQTgyNUIwMDQxMjNG
RiAvKiBQYWdlQmxvY2suaCAqLywKIAkJCQlBOEE0NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFn
ZVJlc2VydmF0aW9uLmggKi8sCisJCQkJMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFs
bGVsSGVscGVyUG9vbC5jcHAgKi8sCisJCQkJMEZGRjE5REIxQkIzMzRFQjAwODg2RDkxIC8qIFBh
cmFsbGVsSGVscGVyUG9vbC5oICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQ
YXJhbGxlbEpvYnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxs
ZWxKb2JzTGliZGlzcGF0Y2guaCAqLywKIAkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyog
UGFya2luZ0xvdC5jcHAgKi8sCkBAIC04NTUsNiArODY1LDcgQEAKIAkJCQlBOEE0NzMwNzE1MUE4
MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLAogCQkJCUE4QTQ3MzA5MTUxQTgyNUIwMDQxMjNG
RiAvKiBTSEExLmggKi8sCisJCQkJMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRh
c2suaCAqLywKIAkJCQlBOEE0NzMwQTE1MUE4MjVCMDA0MTIzRkYgLyogU2ltcGxlU3RhdHMuaCAq
LywKIAkJCQlBOEE0NzMwQjE1MUE4MjVCMDA0MTIzRkYgLyogU2luZ2x5TGlua2VkTGlzdC5oICov
LAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNoLmNwcCAq
LywKQEAgLTg5Miw2ICs5MDMsNyBAQAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBW
ZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdz
LmggKi8sCiAJCQkJOTc0Q0ZDOEQxNkE0RjMyNzAwNkQ1NDA0IC8qIFdlYWtQdHIuaCAqLywKKwkJ
CQkwRjM1MDE2MzFCQjI1OEM4MDBGMEEyQTMgLyogV2Vha1JhbmRvbS5oICovLAogCQkJCTBGRTQ0
NzlBMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5jcHAgKi8sCiAJCQkJMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8sCiAJCQkJRTRBMEFEMzcxQTk2MjQ1NTAwNTM2
REY2IC8qIFdvcmtRdWV1ZS5jcHAgKi8sCkBAIC0xMDYzLDYgKzEwNzUsNyBAQAogCQkJCUE4QTQ3
Mzg1MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OEE0NzQzNDE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlGYXN0UGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDczODcxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMzUwMTY0MUJCMjU4RDUwMEYwQTJBMyAvKiBXZWFrUmFuZG9tLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzM4ODE1MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0MzYxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MzcxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21pY1N0
cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLApAQCAtMTA3NCw2ICsxMDg3LDcgQEAKIAkJCQk4MTM0
MDEzOTE1QjA5MkZEMDAxRkYwQjggLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNBOTE1MUE4MjVCMDA0MTIzRkYgLyogYmlnbnVtLWR0b2EuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3M0FCMTUxQTgyNUIwMDQxMjNGRiAvKiBiaWdudW0uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRkYxOUREMUJCMzM0RUIwMDg4NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDUyMTUxQTgyNUIwMDQxMjNGRiAvKiBCaW5hcnlTZW1hcGhvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhBMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRtYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3MzhDMTUxQTgyNUIwMDQxMjNGRiAvKiBCaXRWZWN0
b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMTEyNiw2ICsxMTQwLDcgQEAKIAkJCQlBOEE0NzNENDE1
MUE4MjVCMDA0MTIzRkYgLyogSGFzaEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczRDUxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hJdGVyYXRvcnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0Q2MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDczRDcxNTFBODI1QjAwNDEyM0ZGIC8qIEhhc2hTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3M0Q5MTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVGFibGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3M0RBMTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggaW4g
SGVhZGVycyAqLywKQEAgLTEzOTIsNiArMTQwNyw3IEBACiAJCQkJMkNERUQwRjMxODExNUM4NTAw
NERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMz
ODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5NDE5MzE2
RUFBRjZEMDAyNEUxNDYgLyogUnVuTG9vcFRpbWVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZGRjE5REMxQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVsSGVscGVyUG9vbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDY5NDE5OTE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOTcxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVk
dWxlUGFpck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDIxMTUxQTgyNUIwMDQxMjNG
RiAvKiBTSEExLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDE5MDI1MCkKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIFJldGFpblB0ci5o
CiAgICAgUnVuTG9vcC5oCiAgICAgU0hBMS5oCisgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJh
dGVkQXJpdGhtZXRpYy5oCiAgICAgU2VnbWVudGVkVmVjdG9yLmgKICAgICBTdGFja0JvdW5kcy5o
CkBAIC0xNjcsNiArMTY4LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgTnVtYmVyT2ZDb3Jlcy5j
cHAKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAKICAgICBQYWdlQmxvY2suY3BwCisgICAgUGFyYWxs
ZWxIZWxwZXJQb29sLmNwcAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3BwCiAgICAgUGFya2lu
Z0xvdC5jcHAKICAgICBQcmludFN0cmVhbS5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFs
bGVsSGVscGVyUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxI
ZWxwZXJQb29sLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVs
cGVyUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBhcmFsbGVsSGVscGVyUG9vbC5oIgorCisjaW5jbHVkZSAiRGF0YUxvZy5oIgor
I2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitQYXJh
bGxlbEhlbHBlckNsaWVudDo6UGFyYWxsZWxIZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFsbGVsSGVs
cGVyUG9vbD4gcG9vbCkKKyAgICA6IG1fcG9vbChwb29sKQoreworICAgIExvY2tIb2xkZXIgbG9j
a2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9wb29sLT5tX2lzRHlp
bmcpOworICAgIG1fcG9vbC0+bV9jbGllbnRzLmFwcGVuZCh0aGlzKTsKK30KKworUGFyYWxsZWxI
ZWxwZXJDbGllbnQ6On5QYXJhbGxlbEhlbHBlckNsaWVudCgpCit7CisgICAgTG9ja0hvbGRlciBs
b2NrZXIobV9wb29sLT5tX2xvY2spOworICAgIGZpbmlzaChsb2NrZXIpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3Bvb2wtPm1fY2xpZW50cy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobV9wb29sLT5tX2NsaWVudHNbaV0gPT0gdGhpcykgeworICAgICAgICAgICAgbV9wb29s
LT5tX2NsaWVudHNbaV0gPSBtX3Bvb2wtPm1fY2xpZW50cy5sYXN0KCk7CisgICAgICAgICAgICBt
X3Bvb2wtPm1fY2xpZW50cy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQ
dHI8U2hhcmVkVGFzaz4gdGFzaykKK3sKKyAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Bvb2wtPm1f
bG9jayk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fdGFzayk7CisgICAgbV90YXNrID0gdGFzazsK
KyAgICBtX3Bvb2wtPmRpZE1ha2VXb3JrQXZhaWxhYmxlKGxvY2tlcik7Cit9CisKK3ZvaWQgUGFy
YWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCgpCit7CisgICAgTG9ja0hvbGRlciBsb2NrZXIobV9w
b29sLT5tX2xvY2spOworICAgIGZpbmlzaChsb2NrZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVs
cGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nKCkKK3sKKyAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFz
azsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKKyAg
ICAgICAgdGFzayA9IGNsYWltVGFzayhsb2NrZXIpOworICAgICAgICBpZiAoIXRhc2spCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcnVuVGFzayh0YXNrKTsKK30KKwordm9pZCBQ
YXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s+
IHRhc2spCit7CisgICAgc2V0VGFzayh0YXNrKTsKKyAgICBkb1NvbWVIZWxwaW5nKCk7CisgICAg
ZmluaXNoKCk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCBM
b2NrSG9sZGVyJikKK3sKKyAgICBtX3Rhc2sgPSBudWxscHRyOworICAgIHdoaWxlIChtX251bUFj
dGl2ZSkKKyAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9v
bC0+bV9sb2NrKTsKK30KKworUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50
OjpjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAgaWYgKCFtX3Rhc2spCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIG1fbnVtQWN0aXZlKys7CisgICAgcmV0dXJu
IG1fdGFzazsKK30KKwordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8
U2hhcmVkVGFzaz4gdGFzaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX251bUFjdGl2ZSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CisKKyAgICB0YXNrLT5ydW4oKTsKKworICAgIHsKKyAg
ICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX251bUFjdGl2ZSk7CisgICAgICAgIC8vIE5vIG5ldyB0YXNrIGNvdWxkIGhhdmUg
YmVlbiBpbnN0YWxsZWQsIHNpbmNlIHdlIHdlcmUgc3RpbGwgYWN0aXZlLgorICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV90YXNrIHx8IG1fdGFzayA9PSB0YXNrKTsKKyAgICAgICAgbV90YXNrID0g
bnVsbHB0cjsKKyAgICAgICAgbV9udW1BY3RpdmUtLTsKKyAgICAgICAgaWYgKCFtX251bUFjdGl2
ZSkKKyAgICAgICAgICAgIG1fcG9vbC0+bV93b3JrQ29tcGxldGVDb25kaXRpb24ubm90aWZ5QWxs
KCk7CisgICAgfQorfQorCitQYXJhbGxlbEhlbHBlclBvb2w6OlBhcmFsbGVsSGVscGVyUG9vbCgp
Cit7Cit9CisKK1BhcmFsbGVsSGVscGVyUG9vbDo6flBhcmFsbGVsSGVscGVyUG9vbCgpCit7Cisg
ICAgUkVMRUFTRV9BU1NFUlQobV9jbGllbnRzLmlzRW1wdHkoKSk7CisgICAgCisgICAgeworICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICBtX2lzRHlpbmcgPSB0cnVl
OworICAgICAgICBtX3dvcmtBdmFpbGFibGVDb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQor
CisgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiBtX3RocmVhZHMp
CisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworfQor
Cit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6ZW5zdXJlVGhyZWFkcyh1bnNpZ25lZCBudW1UaHJl
YWRzKQoreworICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKG51bVRocmVh
ZHMgPCBtX251bVRocmVhZHMpCisgICAgICAgIHJldHVybjsKKyAgICBtX251bVRocmVhZHMgPSBu
dW1UaHJlYWRzOworICAgIGlmIChnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpKQorICAgICAgICBk
aWRNYWtlV29ya0F2YWlsYWJsZShsb2NrZXIpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9v
bDo6ZG9Tb21lSGVscGluZygpCit7CisgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKG1fbG9jayk7CisgICAgICAgIGNsaWVudCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tl
cik7CisgICAgICAgIGlmICghY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0
YXNrID0gY2xpZW50LT5jbGFpbVRhc2sobG9ja2VyKTsKKyAgICB9CisKKyAgICBjbGllbnQtPnJ1
blRhc2sodGFzayk7Cit9CisKK3ZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkaWRNYWtlV29ya0F2
YWlsYWJsZShjb25zdCBMb2NrSG9sZGVyJikKK3sKKyAgICB3aGlsZSAobV9udW1UaHJlYWRzID4g
bV90aHJlYWRzLnNpemUoKSkgeworICAgICAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50
aWZpZXIgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAiV1RGIFBhcmFsbGVsIEhlbHBlciBU
aHJlYWQiLAorICAgICAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgICAgICBoZWxwZXJU
aHJlYWRCb2R5KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV90aHJlYWRzLmFwcGVuZCh0
aHJlYWRJZGVudGlmaWVyKTsKKyAgICB9CisgICAgbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uLm5v
dGlmeUFsbCgpOworfQorCit2b2lkIFBhcmFsbGVsSGVscGVyUG9vbDo6aGVscGVyVGhyZWFkQm9k
eSgpCit7CisgICAgZm9yICg7OykgeworICAgICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xp
ZW50OworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsKKworICAgICAgICB7CisgICAg
ICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOworICAgICAgICAgICAgY2xpZW50ID0g
d2FpdEZvckNsaWVudFdpdGhUYXNrKGxvY2tlcik7CisgICAgICAgICAgICBpZiAoIWNsaWVudCkg
eworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1faXNEeWluZyk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0YXNrID0gY2xpZW50
LT5jbGFpbVRhc2sobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudC0+cnVuVGFz
ayh0YXNrKTsKKyAgICB9Cit9CisKK2Jvb2wgUGFyYWxsZWxIZWxwZXJQb29sOjpoYXNDbGllbnRX
aXRoVGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit7CisgICAgcmV0dXJuICEhZ2V0Q2xp
ZW50V2l0aFRhc2sobG9ja2VyKTsKK30KKworUGFyYWxsZWxIZWxwZXJDbGllbnQqIFBhcmFsbGVs
SGVscGVyUG9vbDo6Z2V0Q2xpZW50V2l0aFRhc2soY29uc3QgTG9ja0hvbGRlciYpCit7CisgICAg
Ly8gV2UgbG9hZC1iYWxhbmNlIGJ5IGJlaW5nIHJhbmRvbS4KKyAgICB1bnNpZ25lZCBzdGFydElu
ZGV4ID0gbV9yYW5kb20uZ2V0VWludDMyKG1fY2xpZW50cy5zaXplKCkpOworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSBzdGFydEluZGV4OyBpbmRleCA8IG1fY2xpZW50cy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50c1tp
bmRleF07CisgICAgICAgIGlmIChjbGllbnQtPm1fdGFzaykKKyAgICAgICAgICAgIHJldHVybiBj
bGllbnQ7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHN0YXJ0
SW5kZXg7ICsraW5kZXgpIHsKKyAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudCA9
IG1fY2xpZW50c1tpbmRleF07CisgICAgICAgIGlmIChjbGllbnQtPm1fdGFzaykKKyAgICAgICAg
ICAgIHJldHVybiBjbGllbnQ7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bh
cmFsbGVsSGVscGVyQ2xpZW50KiBQYXJhbGxlbEhlbHBlclBvb2w6OndhaXRGb3JDbGllbnRXaXRo
VGFzayhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIpCit7CisgICAgZm9yICg7OykgeworICAgICAg
ICAvLyBJdCBtaWdodCBiZSBxdWl0dGluJyB0aW1lLgorICAgICAgICBpZiAobV9pc0R5aW5nKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKFBhcmFsbGVsSGVscGVy
Q2xpZW50KiByZXN1bHQgPSBnZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgICAgICAvLyBXYWl0IHVudGlsIHdvcmsgYmVjb21lcyBhdmFp
bGFibGUuCisgICAgICAgIG1fd29ya0F2YWlsYWJsZUNvbmRpdGlvbi53YWl0KG1fbG9jayk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvUGFy
YWxsZWxIZWxwZXJQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxI
ZWxwZXJQb29sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBl
clBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFBhcmFsbGVsSGVscGVyUG9v
bF9oCisjZGVmaW5lIFBhcmFsbGVsSGVscGVyUG9vbF9oCisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9tLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisv
LyBBIFBhcmFsbGVsSGVscGVyUG9vbCBpcyBhIHNoYXJlZCBwb29sIG9mIHRocmVhZHMgdGhhdCBj
YW4gYmUgYXNrZWQgdG8gaGVscCB3aXRoIHNvbWUgZmluaXRlLXRpbWUKKy8vIHBhcmFsbGVsIGFj
dGl2aXR5LiBJdCdzIGRlc2lnbmVkIHRvIHdvcmsgd2VsbCB3aGVuIHRoZXJlIGFyZSBtdWx0aXBs
ZSBjb25jdXJyZW50IHRhc2tzIHRoYXQgbWF5CisvLyBhbGwgd2FudCBwYXJhbGxlbCBoZWxwLiBJ
biB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgZWFjaCB0YXNrIHRvIHN0YXJ0IGl0cyBvd24gdGhy
ZWFkIHBvb2wuIEl0J3MKKy8vIGFsc28gZGVzaWduZWQgdG8gd29yayB3ZWxsIGZvciB0YXNrcyB0
aGF0IGRvIHRoZWlyIG93biBsb2FkIGJhbGFuY2luZyBhbmQgZG8gbm90IHdpc2ggdG8KKy8vIHBh
cnRpY2lwYXRlIGluIG1pY3JvdGFzay1zdHlsZSBsb2FkIGJhbGFuY2luZy4KKy8vCisvLyBBIHBv
b2wgY2FuIGhhdmUgbWFueSBjbGllbnRzLCBhbmQgZWFjaCBjbGllbnQgbWF5IGhhdmUgemVybyBv
ciBvbmUgdGFza3MuIFRoZSBwb29sIHdpbGwgaGF2ZSB1cAorLy8gdG8gc29tZSBudW1iZXIgb2Yg
dGhyZWFkcywgY29uZmlndXJhYmxlIHdpdGggUGFyYWxsZWxIZWxwZXJQb29sOjphZGRUaHJlYWRz
KCk7IHVzdWFsbHkgeW91IGJvdW5kCisvLyB0aGlzIGJ5IHRoZSBudW1iZXIgb2YgQ1BVcy4gV2hl
bmV2ZXIgYSB0aHJlYWQgaXMgaWRsZSBhbmQgaXQgbm90aWNlcyB0aGF0IHNvbWUgY2xpZW50IGhh
cyBhCisvLyB0YXNrLCBpdCB3aWxsIHJ1biB0aGUgdGFzay4gQSB0YXNrIG1heSBiZSBydW4gb24g
YW55d2hlcmUgYmV0d2VlbiB6ZXJvIGFuZCBOIHRocmVhZHMsIHdoZXJlIE4gaXMKKy8vIHRoZSBu
dW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUgcG9vbC4gVGFza3MgcnVuIHRvIGNvbXBsZXRpb24uIEl0
J3MgZXhwZWN0ZWQgdGhhdCBhIHRhc2sgd2lsbCBoYXZlCisvLyBpdHMgb3duIGN1c3RvbSBpZGVh
cyBhYm91dCBob3cgdG8gcGFydGljaXBhdGUgaW4gc29tZSBwYXJhbGxlbCBhY3Rpdml0eSdzIGxv
YWQgYmFsYW5jaW5nLCBhbmQgaXQKKy8vIHdpbGwgcmV0dXJuIHdoZW4gdGhlIHBhcmFsbGVsIGFj
dGl2aXR5IGlzIGRvbmUuIEZvciBleGFtcGxlLCBhIHBhcmFsbGVsIG1hcmtpbmcgdGFzayB3aWxs
IHJldHVybgorLy8gd2hlbiB0aGUgbWFyayBwaGFzZSBpcyBkb25lLgorLy8KKy8vIFRocmVhZHMg
bWF5IGhhdmUgYSBjaG9pY2UgYmV0d2VlbiBtYW55IHRhc2tzLCBzaW5jZSB0aGVyZSBtYXkgYmUg
bWFueSBjbGllbnRzIGFuZCBlYWNoIGNsaWVudAorLy8gbWF5IGhhdmUgYSB0YXNrLiBGb3IgdGhl
IG1hcmtpbmcgZXhhbXBsZSwgdGhhdCBtYXkgaGFwcGVuIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBW
TSBpbnN0YW5jZXMgYW5kCisvLyBlYWNoIGluc3RhbmNlIGRlY2lkZXMgdG8gc3RhcnQgcGFyYWxs
ZWwgbWFya2luZyBhdCB0aGUgc2FtZSB0aW1lLiBJbiB0aGF0IGNhc2UsIHRocmVhZHMgY2hvb3Nl
CisvLyBhIHRhc2sgYXQgcmFuZG9tLiBTbyBsb25nIGFzIGFueSBjbGllbnQgaGFzIGEgdGFzaywg
YWxsIHRocmVhZHMgaW4gdGhlIHBvb2wgd2lsbCBjb250aW51ZQorLy8gcnVubmluZyB0aGUgYXZh
aWxhYmxlIHRhc2tzLiBUaHJlYWRzIGdvIGlkbGUgd2hlbiBubyBjbGllbnQgaGFzIHRhc2tzIHRv
IHJ1bi4KKworY2xhc3MgUGFyYWxsZWxIZWxwZXJQb29sOworCisvLyBBIGNsaWVudCBpcyBhIHBs
YWNlaG9sZGVyIGZvciBhIHBhcmFsbGVsIGFsZ29yaXRobS4gQSBwYXJhbGxlbCBhbGdvcml0aG0g
d2lsbCBoYXZlIGEgdGFzayB0aGF0CisvLyBjYW4gYmUgcnVuIGNvbmN1cnJlbnRseS4gV2hlbmV2
ZXIgYSBjbGllbnQgaGFzIGEgdGFzayBzZXQgKHlvdSBoYXZlIGNhbGxlZCBzZXRUYXNrKCkgb3IK
Ky8vIHNldEZ1bmN0aW9uKCkpLCB0aHJlYWRzIGluIHRoZSBwb29sIG1heSBydW4gdGhhdCB0YXNr
LiBJZiBhIHRhc2sgcmV0dXJucyBvbiBhbnkgdGhyZWFkLCB0aGUKKy8vIGNsaWVudCB3aWxsIGFz
c3VtZSB0aGF0IHRoZSB0YXNrIGlzIGRvbmUgYW5kIHdpbGwgY2xlYXIgdGhlIHRhc2suIElmIHRo
ZSB0YXNrIGlzIGNsZWFyZWQgKHRoZQorLy8gdGFzayBydW5zIHRvIGNvbXBsZXRpb24gb24gYW55
IHRocmVhZCBvciB5b3UgY2FsbCBmaW5pc2goKSksIGFueSB0aHJlYWRzIGluIHRoZSBwb29sIGFs
cmVhZHkKKy8vIHJ1bm5pbmcgdGhlIGxhc3Qgc2V0IHRhc2socykgd2lsbCBjb250aW51ZSB0byBy
dW4gdGhlbS4gWW91IGNhbiB3YWl0IGZvciBhbGwgb2YgdGhlbSB0byBmaW5pc2gKKy8vIGJ5IGNh
bGxpbmcgZmluaXNoKCkuIFRoYXQgbWV0aG9kIHdpbGwgY2xlYXIgdGhlIHRhc2sgYW5kIHdhaXQg
Zm9yIGFueSB0aHJlYWRzIHJ1bm5pbmcgdGhlIGxhc3QKKy8vIHNldCB0YXNrIHRvIGZpbmlzaC4g
VGhlcmUgYXJlIHR3byBrbm93bi1nb29kIHBhdHRlcm5zIGZvciB1c2luZyBhIGNsaWVudDoKKy8v
CisvLyAxKSBUYXNrcyBpbnRyaW5zaWNhbGx5IGtub3cgd2hlbiB0aGUgYWxnb3JpdGhtIHJlYWNo
ZXMgdGVybWluYXRpb24sIGFuZCBzaW1wbHkgcmV0dXJucyB3aGVuCisvLyAgICB0aGlzIGhhcHBl
bnMuIFRoZSBtYWluIHRocmVhZCBydW5zIHRoZSB0YXNrIGJ5IGRvaW5nOgorLy8KKy8vICAgIGNs
aWVudC0+c2V0RnVuY3Rpb24oCisvLyAgICAgICAgWz1dICgpIHsKKy8vICAgICAgICAgICAgZG8g
dGhpbmdzOworLy8gICAgICAgIH0pOworLy8gICAgY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7Cisv
LyAgICBjbGllbnQtPmZpbmlzaCgpOworLy8KKy8vICAgIENhbGxpbmcgZG9Tb21lSGVscGluZygp
IGVuc3VyZXMgdGhhdCB0aGUgYWxnb3JpdGhtIHJ1bnMgb24gYXQgbGVhc3Qgb25lIHRocmVhZCAo
dGhpcyBvbmUpLgorLy8gICAgVGFza3Mgd2lsbCBrbm93IHdoZW4gdG8gY29tcGxldGUsIGFuZCB3
aWxsIHJldHVybiB3aGVuIHRoZXkgYXJlIGRvbmUuIFRoaXMgd2lsbCBjbGVhciB0aGUKKy8vICAg
IHRhc2sgdG8gZW5zdXJlIHRoYXQgbm8gbmV3IHRocmVhZHMgd2lsbCBydW4gdGhlIHRhc2suIFRo
ZW4sIGZpbmlzaCgpIGNsZWFycyB0aGUgY3VycmVudCB0YXNrCisvLyAgICBhbmQgd2FpdHMgZm9y
IGFueSBwYXJhbGxlbCB0YXNrcyB0byBmaW5pc2ggYWZ0ZXIgdGhlIG1haW4gdGhyZWFkIGhhcyBm
aW5pc2hlZC4gSXQncyBwb3NzaWJsZQorLy8gICAgZm9yIHRocmVhZHMgdG8gc3RpbGwgYmUgcnVu
bmluZyB0aGUgbGFzdCBzZXQgdGFzayAoaS5lLiB0aGUgb25lIHNldCBieSBzZXRGdW5jdGlvbigp
KSBldmVuCisvLyAgICBhZnRlciB0aGUgdGFzayBoYXMgYmVlbiBjbGVhcmVkLiBXYWl0aW5nIGZv
ciBpZGxlIGVuc3VyZXMgdGhhdCBubyBvbGQgdGFza3MgYXJlIHJ1bm5pbmcKKy8vICAgIGFueW1v
cmUuCisvLworLy8gICAgWW91IGNhbiBkbyB0aGlzIG1vcmUgZWFzaWx5IGJ5IHVzaW5nIHRoZSBy
dW5GdW5jdGlvbkluUGFyYWxsZWwoKSBoZWxwZXI6CisvLworLy8gICAgY2xpZW50cy0+cnVuRnVu
Y3Rpb25JblBhcmFsbGVsKAorLy8gICAgICAgIFs9XSAoKSB7CisvLyAgICAgICAgICAgIGRvIHRo
aW5nczsKKy8vICAgICAgICB9KTsKKy8vCisvLyAyKSBUYXNrcyBrZWVwIGRvaW5nIHRoaW5ncyB1
bnRpbCB0aGV5IGFyZSB0b2xkIHRvIHF1aXQgdXNpbmcgc29tZSBjdXN0b20gbm90aWZpY2F0aW9u
IG1lY2hhbmlzbS4KKy8vICAgIFRoZSBtYWluIHRocmVhZCBydW5zIHRoZSB0YXNrIGJ5IGRvaW5n
OgorLy8KKy8vICAgIGJvb2wga2VlcEdvaW5nID0gdHJ1ZTsKKy8vICAgIGNsaWVudC0+c2V0RnVu
Y3Rpb24oCisvLyAgICAgICAgWz1dICgpIHsKKy8vICAgICAgICAgICAgd2hpbGUgKGtlZXBHb2lu
ZykgeworLy8gICAgICAgICAgICAgICAgZG8gdGhpbmdzOworLy8gICAgICAgICAgICB9CisvLyAg
ICAgICAgfSk7CisvLworLy8gICAgV2hlbiB3b3JrIHJ1bnMgb3V0LCB0aGUgbWFpbiB0aHJlYWQg
d2lsbCBpbmZvcm0gdGFza3MgdGhhdCB0aGVyZSBpcyBubyBtb3JlIHdvcmssIGFuZCB0aGVuCisv
LyAgICB3YWl0IHVudGlsIG5vIG1vcmUgdGFza3MgYXJlIHJ1bm5pbmc6CisvLworLy8gICAga2Vl
cEdvaW5nID0gZmFsc2U7CisvLyAgICBjbGllbnQtPmZpbmlzaCgpOworLy8KKy8vICAgIFRoaXMg
d29ya3MgYmVzdCB3aGVuIHRoZSBtYWluIHRocmVhZCBkb2Vzbid0IGFjdHVhbGx5IHdhbnQgdG8g
cnVuIHRoZSB0YXNrIHRoYXQgaXQgc2V0IGluIHRoZQorLy8gICAgY2xpZW50LiBUaGlzIGhhcHBl
bnMgZm9yIGV4YW1wbGUgaW4gcGFyYWxsZWwgbWFya2luZy4gVGhlIG1haW4gdGhyZWFkIHVzZXMg
YSBzb21ld2hhdAorLy8gICAgZGlmZmVyZW50IG1hcmtpbmcgYWxnb3JpdGhtIHRoYW4gdGhlIGhl
bHBlcnMuIFRoZSBtYWluIHRocmVhZCBtYXkgcHJvdmlkZSB3b3JrIHRoYXQgdGhlCisvLyAgICBo
ZWxwZXJzIHN0ZWFsLiBUaGUgbWFpbiB0aHJlYWQga25vd3Mgd2hlbiB0ZXJtaW5hdGlvbiBpcyBy
ZWFjaGVkLCBhbmQgc2ltcGx5IHRlbGxzIHRoZQorLy8gICAgaGVscGVycyB0byBzdG9wIHVwb24g
dGVybWluYXRpb24uCisvLworLy8gVGhlIGtub3duLWdvb2Qgc3R5bGVzIG9mIHVzaW5nIFBhcmFs
bGVsSGVscGVyQ2xpZW50IGFsbCBpbnZvbHZlIGEgcGFyYWxsZWwgYWxnb3JpdGhtIHRoYXQgaGFz
CisvLyBpdHMgb3duIHdvcmsgZGlzdHJpYnV0aW9uIGFuZCBsb2FkIGJhbGFuY2luZy4KKy8vCisv
LyBOb3RlIHRoYXQgaXQgaXMgbm90IHZhbGlkIHRvIHVzZSB0aGUgc2FtZSBQYXJhbGxlbEhlbHBl
ckNsaWVudCBpbnN0YW5jZSBmcm9tIG11bHRpcGxlIHRocmVhZHMuCisvLyBFYWNoIHRocmVhZCBz
aG91bGQgaGF2ZSBpdHMgb3duIFBhcmFsbGVsSGVscGVyQ2xpZW50IGluIHRoYXQgY2FzZS4gRmFp
bHVyZSB0byBmb2xsb3cgdGhpcyBhZHZpY2UKKy8vIHdpbGwgbGVhZCB0byBSRUxFQVNFX0FTU0VS
VCdzIG9yIHdvcnNlLgorY2xhc3MgUGFyYWxsZWxIZWxwZXJDbGllbnQgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFBhcmFsbGVsSGVscGVyQ2xpZW50KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudChSZWZQdHI8UGFyYWxs
ZWxIZWxwZXJQb29sPik7CisgICAgflBhcmFsbGVsSGVscGVyQ2xpZW50KCk7CisKKyAgICB2b2lk
IHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s+KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBzZXRGdW5jdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaW5pc2goKTsKKworICAgIHZvaWQgZG9Tb21lSGVscGluZygpOworCisg
ICAgLy8gRXF1aXZhbGVudCB0bzoKKyAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7CisgICAg
Ly8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsKKyAg
ICB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPik7CisKKyAgICAvLyBF
cXVpdmFsZW50IHRvOgorICAgIC8vIGNsaWVudC0+c2V0RnVuY3Rpb24oZnVuY3Rvcik7CisgICAg
Ly8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CisgICAgLy8gY2xpZW50LT5maW5pc2goKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgcnVuRnVuY3Rpb25JblBhcmFs
bGVsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBydW5UYXNrSW5QYXJh
bGxlbChjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAgICB9CisKKyAgICBQYXJhbGxlbEhl
bHBlclBvb2wmIHBvb2woKSB7IHJldHVybiAqbV9wb29sOyB9CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZBY3RpdmVUaHJlYWRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BY3RpdmU7IH0KKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxIZWxwZXJQb29sOworCisgICAgdm9pZCBmaW5p
c2goY29uc3QgTG9ja0hvbGRlciYpOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPiBjbGFpbVRhc2so
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4p
OworICAgIAorICAgIFJlZlB0cjxQYXJhbGxlbEhlbHBlclBvb2w+IG1fcG9vbDsKKyAgICBSZWZQ
dHI8U2hhcmVkVGFzaz4gbV90YXNrOworICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlIHsgMCB9Owor
fTsKKworY2xhc3MgUGFyYWxsZWxIZWxwZXJQb29sIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3Vu
dGVkPFBhcmFsbGVsSGVscGVyUG9vbD4geworcHVibGljOgorICAgIFBhcmFsbGVsSGVscGVyUG9v
bCgpOworICAgIH5QYXJhbGxlbEhlbHBlclBvb2woKTsKKworICAgIHZvaWQgZW5zdXJlVGhyZWFk
cyh1bnNpZ25lZCBudW1UaHJlYWRzKTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mVGhyZWFkcygp
IGNvbnN0IHsgcmV0dXJuIG1fbnVtVGhyZWFkczsgfQorICAgIAorICAgIHZvaWQgZG9Tb21lSGVs
cGluZygpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbEhlbHBlckNsaWVu
dDsKKworICAgIHZvaWQgZGlkTWFrZVdvcmtBdmFpbGFibGUoY29uc3QgTG9ja0hvbGRlciYpOwor
ICAgIHZvaWQgaGVscGVyVGhyZWFkQm9keSgpOworCisgICAgYm9vbCBoYXNDbGllbnRXaXRoVGFz
ayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGdldENsaWVu
dFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICBQYXJhbGxlbEhlbHBlckNsaWVudCog
d2FpdEZvckNsaWVudFdpdGhUYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICAKKyAgICBMb2Nr
IG1fbG9jazsKKyAgICBDb25kaXRpb24gbV93b3JrQXZhaWxhYmxlQ29uZGl0aW9uOworICAgIENv
bmRpdGlvbiBtX3dvcmtDb21wbGV0ZUNvbmRpdGlvbjsKKworICAgIFdlYWtSYW5kb20gbV9yYW5k
b207CisgICAgCisgICAgVmVjdG9yPFBhcmFsbGVsSGVscGVyQ2xpZW50Kj4gbV9jbGllbnRzOwor
ICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyPiBtX3RocmVhZHM7CisgICAgdW5zaWduZWQgbV9u
dW1UaHJlYWRzIHsgMCB9OyAvLyBUaGlzIGNhbiBiZSBsYXJnZXIgdGhhbiBtX3RocmVhZHMuc2l6
ZSgpIGJlY2F1c2Ugd2Ugc3RhcnQgdGhyZWFkcyBvbmx5IG9uY2UgdGhlcmUgaXMgd29yay4KKyAg
ICBib29sIG1faXNEeWluZyB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
dXNpbmcgV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDsKK3VzaW5nIFdURjo6UGFyYWxsZWxIZWxw
ZXJQb29sOworCisjZW5kaWYgLy8gUGFyYWxsZWxIZWxwZXJQb29sX2gKKwpJbmRleDogU291cmNl
L1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJl
ZFRhc2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2hhcmVkVGFza19oCisjZGVmaW5lIFNoYXJlZFRh
c2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gU2hhcmVkVGFzayBpcyBhIHJlcGxh
Y2VtZW50IGZvciBzdGQ6OmZ1bmN0aW9uIGZvciBjYXNlcyB3aGVyZSB5b3UnZCBsaWtlIHRvIGF2
b2lkIHRoZSBjb3N0IG9mCisvLyBjb3B5aW5nLCBhbmQgd291bGQgcHJlZmVyIHRvIGhhdmUgYWxp
YXNpbmcgc2VtYW50aWNzLiBGb3IgZXhhbXBsZSwgaWYgeW91IGRvOgorLy8KKy8vIHN0ZDo6ZnVu
Y3Rpb24gYSA9IGI7CisvLworLy8gVGhlbiAiYSIgd2lsbCBnZXQgaXRzIG93biBjb3B5IG9mIGFs
bCBjYXB0dXJlZCBieS12YWx1ZSB2YXJpYWJsZXMuIFRoZSBhY3Qgb2YgY29weWluZyBtYXkKKy8v
IHJlcXVpcmUgY2FsbHMgdG8gc3lzdGVtIG1hbGxvYywgYW5kIGl0IG1heSBiZSBsaW5lYXIgdGlt
ZSBpbiB0aGUgdG90YWwgc2l6ZSBvZiBjYXB0dXJlZAorLy8gdmFyaWFibGVzLiBPbiB0aGUgb3Ro
ZXIgaGFuZCwgaWYgeW91IGRvOgorLy8KKy8vIFJlZlB0cjxTaGFyZWRUYXNrPiBhID0gYjsKKy8v
CisvLyBUaGVuICJhIiB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIHRhc2sgYXMgYiwgYW5kIHRoZSBv
bmx5IHdvcmsgaW52b2x2ZWQgaXMgdGhlIENBUyB0byBpbmNyZWFzZSB0aGUKKy8vIHJlZmVyZW5j
ZSBjb3VudC4KKy8vCisvLyBBbHNvLCBTaGFyZWRUYXNrIGFsbG93cyBmb3IgbW9yZSBmbGV4aWJp
bGl0eSB3aGVuIHNoYXJpbmcgc3RhdGUgYmV0d2VlbiBldmVyeW9uZSB3aG8gcnVucyB0aGUKKy8v
IHRhc2suIFdpdGggc3RkOjpmdW5jdGlvbiwgeW91IGNhbiBvbmx5IHNoYXJlZCBzdGF0ZSB1c2lu
ZyBieS1yZWZlcmVuY2UgY2FwdHVyZWQgdmFyaWFibGVzLgorY2xhc3MgU2hhcmVkVGFzayA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7CitwdWJsaWM6CisgICAgU2hh
cmVkVGFzaygpIHsgfQorICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KKworICAgIHZpcnR1
YWwgdm9pZCBydW4oKSA9IDA7Cit9OworCisvLyBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0
IGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgU2hhcmVkVGFzayBzdWJjbGFzcyB1c2luZyBhIGxhbWJk
YS4KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvciA6
IHB1YmxpYyBTaGFyZWRUYXNrIHsKK3B1YmxpYzoKKyAgICBTaGFyZWRUYXNrRnVuY3Rvcihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQorICAgIHsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBydW4oKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9mdW5jdG9yKCk7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCisv
LyBZb3UgY2FuIHVzZSB0aGlzIGxpa2Ugc286CisvLworLy8gUmVmUHRyPFNoYXJlZFRhc2s+IHRh
c2sgPSBjcmVhdGVTaGFyZWRUYXNrKAorLy8gICAgIFs9XSAoKSB7CisvLyAgICAgICAgIGRvIHRo
aW5nczsKKy8vICAgICB9KTsKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVk
VGFzaz4gY3JlYXRlU2hhcmVkVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Y3JlYXRlU2hhcmVkVGFzazsK
K3VzaW5nIFdURjo6U2hhcmVkVGFzazsKK3VzaW5nIFdURjo6U2hhcmVkVGFza0Z1bmN0b3I7CisK
KyNlbmRpZiAvLyBTaGFyZWRUYXNrX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvV2Vha1JhbmRv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkocmV2aXNpb24g
MTkwMTUxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrUmFuZG9tLmg6
MTkwMTUxKQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSWFuIEMuIEJ1bGxhcmQKKyAqIAorICogUGVy
bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24K
KyAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uCisgKiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0
d2FyZSB3aXRob3V0CisgKiByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvIHVzZSwKKyAqIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1
cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25z
OgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u
IG5vdGljZSBzaGFsbCBiZQorICogaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh
bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTCisg
KiBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO
RAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD
T1BZUklHSFQKKyAqIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP
TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBU
SEUgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBXZWFrUmFuZG9tX2gKKyNkZWZpbmUgV2Vha1Jh
bmRvbV9oCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWFrUmFuZG9tIHsKK2ZyaWVuZCBjbGFz
cyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2VzcyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmlu
ZyByZXBsYXkuCitwdWJsaWM6CisgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQorICAgIHsK
KyAgICAgICAgaW5pdGlhbGl6ZVNlZWQoc2VlZCk7CisgICAgfQorICAgIAorICAgIC8vIFJldHVy
bnMgdGhlIHNlZWQgcHJvdmlkZWQgdGhhdCB5b3UndmUgbmV2ZXIgY2FsbGVkIGdldCgpIG9yIGdl
dFVpbnQzMigpLgorICAgIHVuc2lnbmVkIHNlZWRVbnNhZmUoKSBjb25zdCB7IHJldHVybiBtX2hp
Z2g7IH0KKworICAgIGRvdWJsZSBnZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkdmFuY2Uo
KSAvIChVSU5UX01BWCArIDEuMCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ2V0VWludDMyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgbV9oaWdoID0gKG1faGlnaCA8PCAx
NikgKyAobV9oaWdoID4+IDE2KTsKKyAgICAgICAgbV9oaWdoICs9IG1fbG93OworICAgICAgICBt
X2xvdyArPSBtX2hpZ2g7CisgICAgICAgIHJldHVybiBtX2hpZ2g7CisgICAgfQorCisgICAgdm9p
ZCBpbml0aWFsaXplU2VlZCh1bnNpZ25lZCBzZWVkKQorICAgIHsKKyAgICAgICAgbV9sb3cgPSBz
ZWVkIF4gMHg0OTYxNkU0MjsKKyAgICAgICAgbV9oaWdoID0gc2VlZDsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBtX2xvdzsKKyAgICB1bnNpZ25lZCBtX2hpZ2g7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIFdlYWtSYW5kb21faApJbmRleDogU291cmNlL1dURi93dGYvV2Vh
a1JhbmRvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1dlYWtSYW5kb20uaAkod29y
a2luZyBjb3B5KQorKysgU291cmNlL1dURi93dGYvV2Vha1JhbmRvbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSwxOCArNTEsMjkgQEAKICNkZWZpbmUgV2Vha1JhbmRvbV9oCiAKICNpbmNsdWRlIDxs
aW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgogCi1uYW1lc3BhY2UgSlNDIHsKK25hbWVzcGFjZSBXVEYgewogCiBjbGFz
cyBXZWFrUmFuZG9tIHsKLWZyaWVuZCBjbGFzcyBKU0dsb2JhbE9iamVjdDsgLy8gRm9yIGFjY2Vz
cyB0byBpbml0aWFsaXplU2VlZCgpIGR1cmluZyByZXBsYXkuCiBwdWJsaWM6CisgICAgV2Vha1Jh
bmRvbSgpCisgICAgeworICAgICAgICBpbml0aWFsaXplU2VlZChyYW5kb21OdW1iZXIoKSAqIChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgKyAxLjApKTsKKyAgICB9CisgICAg
CiAgICAgV2Vha1JhbmRvbSh1bnNpZ25lZCBzZWVkKQogICAgIHsKICAgICAgICAgaW5pdGlhbGl6
ZVNlZWQoc2VlZCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWdu
ZWQgc2VlZCkKKyAgICB7CisgICAgICAgIG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7CisgICAg
ICAgIG1faGlnaCA9IHNlZWQ7CisgICAgfQorCiAgICAgLy8gUmV0dXJucyB0aGUgc2VlZCBwcm92
aWRlZCB0aGF0IHlvdSd2ZSBuZXZlciBjYWxsZWQgZ2V0KCkgb3IgZ2V0VWludDMyKCkuCiAgICAg
dW5zaWduZWQgc2VlZFVuc2FmZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaDsgfQogCkBAIC03Niw2
ICs4NywxOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgfQogCisg
ICAgdW5zaWduZWQgZ2V0VWludDMyKHVuc2lnbmVkIGxpbWl0KQorICAgIHsKKyAgICAgICAgaWYg
KGxpbWl0IDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdWludDY0X3QgY3V0
b2ZmID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihVSU5UX01BWCkgKyAxKSAvIGxpbWl0ICogbGlt
aXQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlID0gZ2V0
VWludDMyKCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPj0gY3V0b2ZmKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlICUgbGltaXQ7CisgICAgICAg
IH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgYWR2YW5jZSgpCiAgICAgewpAQCAt
ODUsMTYgKzEwOSwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9oaWdoOwogICAgIH0K
IAotICAgIHZvaWQgaW5pdGlhbGl6ZVNlZWQodW5zaWduZWQgc2VlZCkKLSAgICB7Ci0gICAgICAg
IG1fbG93ID0gc2VlZCBeIDB4NDk2MTZFNDI7Ci0gICAgICAgIG1faGlnaCA9IHNlZWQ7Ci0gICAg
fQotCiAgICAgdW5zaWduZWQgbV9sb3c7CiAgICAgdW5zaWduZWQgbV9oaWdoOwogfTsKIAotfSAv
LyBuYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpXZWFrUmFu
ZG9tOwogCiAjZW5kaWYgLy8gV2Vha1JhbmRvbV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>