<?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>152347</bug_id>
          
          <creation_ts>2015-12-16 11:11:47 -0800</creation_ts>
          <short_desc>Improve JSObject::put performance</short_desc>
          <delta_ts>2015-12-16 14:39:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1149695</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 11:11:47 -0800</bug_when>
    <thetext>The JSObject::put code used to be fast, and then we made it slow by incrementally adding stuff to it, like hooks for immutability inference and property type inference.

This bug is about recovering some of that lost performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149698</commentid>
    <comment_count>1</comment_count>
      <attachid>267473</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 11:15:15 -0800</bug_when>
    <thetext>Created attachment 267473
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149700</commentid>
    <comment_count>2</comment_count>
      <attachid>267473</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 11:16:48 -0800</bug_when>
    <thetext>Comment on attachment 267473
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGUnificationPhase.cpp:63
&gt; -                    
&gt; -                    phi-&gt;children.child(childIdx)-&gt;variableAccessData()-&gt;unify(phi-&gt;variableAccessData());
&gt; +
&gt; +                    phi-&gt;variableAccessData()-&gt;unify(phi-&gt;children.child(childIdx)-&gt;variableAccessData());

This will go away after rebasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149701</commentid>
    <comment_count>3</comment_count>
      <attachid>267475</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 11:17:57 -0800</bug_when>
    <thetext>Created attachment 267475
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149704</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 11:19:45 -0800</bug_when>
    <thetext>There&apos;s no real improvement on JS benchmarks, though it is an improvement on dynbench.


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 (r194112)
&quot;FastDyn&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r194112)

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                  FastDyn                                      
SunSpider:
   3d-cube                                            4.8062+-0.2261            4.7676+-0.2795        
   3d-morph                                           5.4520+-0.2068     ?      5.5819+-0.2702        ? might be 1.0238x slower
   3d-raytrace                                        5.3260+-0.0714     ?      5.3624+-0.0917        ?
   access-binary-trees                                2.2604+-0.1684            2.2272+-0.0889          might be 1.0149x faster
   access-fannkuch                                    5.8504+-0.1034     ?      5.9780+-0.4266        ? might be 1.0218x slower
   access-nbody                                       2.7314+-0.4145            2.5905+-0.0879          might be 1.0544x faster
   access-nsieve                                      3.4799+-0.0697     ?      3.5633+-0.1435        ? might be 1.0240x slower
   bitops-3bit-bits-in-byte                           1.2166+-0.0661            1.1838+-0.0352          might be 1.0277x faster
   bitops-bits-in-byte                                3.1660+-0.0726     ?      3.2013+-0.0615        ? might be 1.0111x slower
   bitops-bitwise-and                                 2.0880+-0.1416            2.0553+-0.0640          might be 1.0159x faster
   bitops-nsieve-bits                                 3.0582+-0.0579     ?      3.0795+-0.1096        ?
   controlflow-recursive                              2.4509+-0.0811            2.3843+-0.0628          might be 1.0279x faster
   crypto-aes                                         4.1283+-0.1386     ?      4.2589+-0.2740        ? might be 1.0316x slower
   crypto-md5                                         2.5492+-0.0910     ?      2.6425+-0.2071        ? might be 1.0366x slower
   crypto-sha1                                        2.5662+-0.2266     ?      2.7400+-0.3582        ? might be 1.0677x slower
   date-format-tofte                                  7.2140+-0.3809     ?      7.2671+-0.3132        ?
   date-format-xparb                                  4.8650+-0.3614            4.6654+-0.0397          might be 1.0428x faster
   math-cordic                                        2.9746+-0.1056            2.9613+-0.0848        
   math-partial-sums                                  4.9702+-0.1396            4.9037+-0.2236          might be 1.0136x faster
   math-spectral-norm                                 1.9683+-0.0295     ?      1.9829+-0.0183        ?
   regexp-dna                                         6.2741+-0.4020            6.1270+-0.2110          might be 1.0240x faster
   string-base64                                      4.3263+-0.2587            4.3100+-0.1055        
   string-fasta                                       5.8998+-0.2212            5.8074+-0.1070          might be 1.0159x faster
   string-tagcloud                                    8.0880+-0.3777     ?      8.2385+-0.4568        ? might be 1.0186x slower
   string-unpack-code                                18.5733+-0.9530           18.4810+-0.6218        
   string-validate-input                              4.2980+-0.2151            4.2140+-0.0677          might be 1.0199x faster

   &lt;arithmetic&gt;                                       4.6377+-0.0507            4.6375+-0.0379          might be 1.0001x faster

                                                        TipOfTree                  FastDyn                                      
LongSpider:
   3d-cube                                          811.1832+-3.7705     !    828.4631+-4.2653        ! definitely 1.0213x slower
   3d-morph                                        1505.4361+-13.2534        1504.1077+-18.6474       
   3d-raytrace                                      610.5899+-14.4316    ?    611.2495+-7.4107        ?
   access-binary-trees                              793.4760+-3.4673     ?    796.5321+-10.9711       ?
   access-fannkuch                                  299.0790+-6.3427          296.0164+-3.0650          might be 1.0103x faster
   access-nbody                                     516.2148+-4.7166          511.0889+-3.0352          might be 1.0100x faster
   access-nsieve                                    384.0373+-10.7023         376.1438+-9.0207          might be 1.0210x faster
   bitops-3bit-bits-in-byte                          34.8303+-1.4462           34.1868+-1.0368          might be 1.0188x faster
   bitops-bits-in-byte                               91.2872+-5.7748     ?     94.5846+-1.8974        ? might be 1.0361x slower
   bitops-nsieve-bits                               404.3275+-4.1608          403.7714+-6.6485        
   controlflow-recursive                            452.2962+-5.7365          448.6312+-4.1281        
   crypto-aes                                       561.3986+-5.1278     ?    562.9038+-7.5903        ?
   crypto-md5                                       552.6064+-5.5698     ?    554.9961+-5.2938        ?
   crypto-sha1                                      666.0371+-7.3508     ?    668.7074+-10.0379       ?
   date-format-tofte                                554.4112+-13.8950         549.5686+-8.9596        
   date-format-xparb                                653.6119+-13.4359    ?    687.4691+-93.7482       ? might be 1.0518x slower
   hash-map                                         151.8223+-2.4795     ?    155.7837+-2.5639        ? might be 1.0261x slower
   math-cordic                                      485.3815+-4.8623     ?    488.0196+-5.6387        ?
   math-partial-sums                                466.2560+-2.7411     ^    458.5137+-2.0950        ^ definitely 1.0169x faster
   math-spectral-norm                               550.6015+-3.3905     ?    551.4488+-4.1872        ?
   string-base64                                    380.5418+-6.2917          375.0042+-7.1368          might be 1.0148x faster
   string-fasta                                     359.4338+-2.8657     ?    361.2347+-7.4759        ?
   string-tagcloud                                  176.5131+-2.3265          174.4681+-1.8429          might be 1.0117x faster

   &lt;geometric&gt;                                      399.7619+-2.0639     ?    400.3494+-2.5646        ? might be 1.0015x slower

                                                        TipOfTree                  FastDyn                                      
V8Spider:
   crypto                                            50.0931+-1.8196     ?     51.2071+-1.8449        ? might be 1.0222x slower
   deltablue                                         77.7564+-2.8303           77.2987+-2.7958        
   earley-boyer                                      41.9518+-1.4075     ?     43.1828+-1.4786        ? might be 1.0293x slower
   raytrace                                          30.1456+-1.3002     ?     30.8414+-1.5381        ? might be 1.0231x slower
   regexp                                            62.9191+-1.2311           62.7930+-2.2814        
   richards                                          52.3614+-0.9243           51.3997+-1.7509          might be 1.0187x faster
   splay                                             37.8675+-1.3211     ?     38.3548+-1.3392        ? might be 1.0129x slower

   &lt;geometric&gt;                                       48.2891+-0.1818     ?     48.6981+-0.4325        ? might be 1.0085x slower

                                                        TipOfTree                  FastDyn                                      
Octane:
   encrypt                                           0.15892+-0.00442          0.15615+-0.00076         might be 1.0177x faster
   decrypt                                           2.85672+-0.01276    ?     2.86967+-0.02125       ?
   deltablue                                x2       0.14106+-0.00604          0.13863+-0.00121         might be 1.0175x faster
   earley                                            0.28603+-0.00549          0.28245+-0.00245         might be 1.0127x faster
   boyer                                             4.35769+-0.13401    ?     4.40072+-0.14975       ?
   navier-stokes                            x2       4.84630+-0.02393          4.83823+-0.02869       
   raytrace                                 x2       0.85385+-0.00549          0.85248+-0.00562       
   richards                                 x2       0.08789+-0.00115          0.08742+-0.00077       
   splay                                    x2       0.34617+-0.00272    ?     0.35227+-0.00724       ? might be 1.0176x slower
   regexp                                   x2      24.96795+-0.56853         24.70541+-0.40982         might be 1.0106x faster
   pdfjs                                    x2      37.23461+-0.25518         37.10589+-0.09419       
   mandreel                                 x2      42.82896+-0.74135         42.67242+-0.47356       
   gbemu                                    x2      31.32761+-3.42886         29.99639+-1.67174         might be 1.0444x faster
   closure                                           0.59343+-0.00764          0.58443+-0.00414         might be 1.0154x faster
   jquery                                            7.51379+-0.06606          7.40873+-0.05210         might be 1.0142x faster
   box2d                                    x2       9.22881+-0.07709          9.12857+-0.08669         might be 1.0110x faster
   zlib                                     x2     386.03731+-14.91993   ?   389.39022+-4.71129       ?
   typescript                               x2     675.31459+-4.47539    ?   682.24139+-6.00110       ? might be 1.0103x slower

   &lt;geometric&gt;                                       5.34913+-0.04574          5.32111+-0.01827         might be 1.0053x faster

                                                        TipOfTree                  FastDyn                                      
Kraken:
   ai-astar                                          127.062+-1.014      ?     127.731+-1.140         ?
   audio-beat-detection                               49.636+-0.464             49.245+-0.377         
   audio-dft                                          96.339+-2.231      ?      96.965+-2.860         ?
   audio-fft                                          35.365+-0.728             35.074+-0.540         
   audio-oscillator                                   58.136+-0.970             57.770+-0.952         
   imaging-darkroom                                   60.127+-0.528             60.078+-0.538         
   imaging-desaturate                                 49.163+-2.099             48.525+-0.541           might be 1.0131x faster
   imaging-gaussian-blur                              87.224+-1.089      ?      87.443+-1.067         ?
   json-parse-financial                               39.680+-2.193             38.058+-1.756           might be 1.0426x faster
   json-stringify-tinderbox                           23.564+-1.942             23.541+-0.874         
   stanford-crypto-aes                                43.632+-1.056      ?      44.134+-1.792         ? might be 1.0115x slower
   stanford-crypto-ccm                                38.344+-1.266             36.652+-1.393           might be 1.0462x faster
   stanford-crypto-pbkdf2                             97.123+-0.680      ?      97.506+-1.198         ?
   stanford-crypto-sha256-iterative                   37.923+-1.223             37.887+-1.113         

   &lt;arithmetic&gt;                                       60.237+-0.400             60.044+-0.383           might be 1.0032x faster

                                                        TipOfTree                  FastDyn                                      
JSRegress:
   abc-forward-loop-equal                            30.3678+-0.9492     ?     30.8469+-1.0817        ? might be 1.0158x slower
   abc-postfix-backward-loop                         29.8835+-0.6997     ?     30.5970+-0.9346        ? might be 1.0239x slower
   abc-simple-backward-loop                          30.1996+-1.7415     ?     30.4675+-0.7587        ?
   abc-simple-forward-loop                           29.8619+-0.8809     ?     30.1140+-1.1832        ?
   abc-skippy-loop                                   21.6897+-0.5679     ?     23.7615+-5.2538        ? might be 1.0955x slower
   abs-boolean                                        2.4729+-0.0360     ?      2.5356+-0.1167        ? might be 1.0254x slower
   adapt-to-double-divide                            16.8593+-0.7659           16.4355+-0.3344          might be 1.0258x faster
   aliased-arguments-getbyval                         1.2899+-0.1509            1.2281+-0.0618          might be 1.0504x faster
   allocate-big-object                                2.6586+-0.2575            2.5814+-0.0585          might be 1.0299x faster
   arguments-named-and-reflective                    10.7203+-0.3251           10.5201+-0.2972          might be 1.0190x faster
   arguments-out-of-bounds                            9.4038+-0.5425     ?      9.4167+-0.2575        ?
   arguments-strict-mode                              9.9556+-0.4220     ?     10.0450+-0.6914        ?
   arguments                                          8.5806+-0.2282     ?      8.6060+-0.4281        ?
   arity-mismatch-inlining                            0.9358+-0.0548            0.8800+-0.0204          might be 1.0635x faster
   array-access-polymorphic-structure                 8.4841+-0.5298            8.4053+-0.1742        
   array-nonarray-polymorhpic-access                 25.1267+-0.6771     ?     25.3320+-0.9567        ?
   array-prototype-every                             76.2497+-2.2771     ?     76.2667+-1.3007        ?
   array-prototype-forEach                           74.7102+-1.0581     ?     76.3437+-1.1671        ? might be 1.0219x slower
   array-prototype-map                               83.4722+-2.5562     ?     83.9098+-0.8453        ?
   array-prototype-reduce                            73.6844+-1.0730           73.1017+-0.9279        
   array-prototype-reduceRight                       73.3012+-1.3804           71.6880+-0.8729          might be 1.0225x faster
   array-prototype-some                              77.3660+-1.2181           76.2775+-1.0380          might be 1.0143x faster
   array-splice-contiguous                           23.7749+-0.8498     ?     25.0578+-1.2410        ? might be 1.0540x slower
   array-with-double-add                              3.5936+-0.1049     ?      3.6819+-0.2045        ? might be 1.0246x slower
   array-with-double-increment                        3.3785+-0.2916     ?      3.4098+-0.4074        ?
   array-with-double-mul-add                          4.6214+-0.4204            4.4942+-0.0974          might be 1.0283x faster
   array-with-double-sum                              3.2203+-0.0638            3.2147+-0.0466        
   array-with-int32-add-sub                           6.2881+-0.1715            6.2648+-0.0377        
   array-with-int32-or-double-sum                     3.2889+-0.0458            3.2844+-0.0712        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     26.0995+-1.2601     ?     26.1315+-1.1334        ?
   ArrayBuffer-DataView-alloc-long-lived             12.1874+-0.2475     ?     12.3070+-0.3088        ?
   ArrayBuffer-Int32Array-byteOffset                  3.7124+-0.3358            3.5521+-0.0482          might be 1.0451x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.1693+-1.2032           26.0552+-0.2642          might be 1.0428x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.9900+-1.1414           19.8054+-0.8164        
   ArrayBuffer-Int8Array-alloc-long-lived            11.7475+-0.4018           11.3693+-0.4867          might be 1.0333x faster
   ArrayBuffer-Int8Array-alloc                        9.8566+-0.5481     ?      9.9472+-0.5726        ?
   arrowfunction-call                                11.1985+-0.2350           11.1672+-0.3340        
   asmjs_bool_bug                                     7.6768+-0.5224     ?      7.7191+-0.3339        ?
   assign-custom-setter-polymorphic                   2.3007+-0.0237     ?      2.3888+-0.1358        ? might be 1.0383x slower
   assign-custom-setter                               3.4603+-0.0851     ?      3.5687+-0.2818        ? might be 1.0313x slower
   basic-set                                          7.6051+-0.3719     ?      7.8968+-0.4935        ? might be 1.0384x slower
   big-int-mul                                        3.5455+-0.0806            3.4766+-0.0621          might be 1.0198x faster
   boolean-test                                       3.0333+-0.0570            3.0110+-0.0844        
   branch-fold                                        3.6310+-0.0678            3.6290+-0.0727        
   branch-on-string-as-boolean                       17.5343+-1.0241           17.3147+-0.6040          might be 1.0127x faster
   by-val-generic                                     2.5310+-0.0763     ?      2.5764+-0.1063        ? might be 1.0179x slower
   call-spread-apply                                 29.0187+-0.9016     ?     29.4459+-1.5344        ? might be 1.0147x slower
   call-spread-call                                  24.5324+-1.0217           22.9454+-0.7867          might be 1.0692x faster
   captured-assignments                               0.4764+-0.0446            0.4583+-0.0151          might be 1.0397x faster
   cast-int-to-double                                 5.1061+-0.0361     ?      5.2046+-0.0951        ? might be 1.0193x slower
   cell-argument                                      6.0658+-0.4862            5.9245+-0.3843          might be 1.0239x faster
   cfg-simplify                                       2.9173+-0.0489     ?      3.1144+-0.2876        ? might be 1.0676x slower
   chain-getter-access                                8.4330+-0.2813            8.3526+-0.2818        
   cmpeq-obj-to-obj-other                            12.0871+-0.7763     ?     12.8947+-1.3523        ? might be 1.0668x slower
   constant-test                                      4.8448+-0.1002     ?      4.8789+-0.1095        ?
   create-lots-of-functions                           9.6406+-0.4650     ?      9.7011+-0.6497        ?
   cse-new-array-buffer                               2.3614+-0.0520     ?      2.4289+-0.0856        ? might be 1.0286x slower
   cse-new-array                                      2.4915+-0.0798     ?      2.5342+-0.0753        ? might be 1.0171x slower
   custom-setter-getter-as-put-get-by-id              0.5221+-0.0187     ?      0.5455+-0.0357        ? might be 1.0449x slower
   DataView-custom-properties                        31.9896+-1.2251           31.7383+-0.9300        
   delay-tear-off-arguments-strictmode               13.5119+-0.5894           13.1191+-0.3344          might be 1.0299x faster
   deltablue-varargs                                165.0703+-2.7391          163.7434+-1.4131        
   destructuring-arguments                          162.7003+-1.2325     ^    157.0008+-1.7634        ^ definitely 1.0363x faster
   destructuring-parameters-overridden-by-function   
                                                      0.5126+-0.0382            0.4835+-0.0162          might be 1.0600x faster
   destructuring-swap                                 4.8450+-0.1013     ?      4.9281+-0.1594        ? might be 1.0172x slower
   direct-arguments-getbyval                          1.2267+-0.0854     ?      1.2926+-0.1168        ? might be 1.0536x slower
   div-boolean-double                                 5.3580+-0.2529            5.2891+-0.0741          might be 1.0130x faster
   div-boolean                                        8.0981+-0.0328     ?      8.2447+-0.3356        ? might be 1.0181x slower
   double-get-by-val-out-of-bounds                    4.6477+-0.2300            4.4949+-0.1400          might be 1.0340x faster
   double-pollution-getbyval                          8.4729+-0.2302            8.3462+-0.0627          might be 1.0152x faster
   double-pollution-putbyoffset                       3.7072+-0.0984     ?      3.8385+-0.2256        ? might be 1.0354x slower
   double-real-use                                   24.5242+-0.6690     ?     25.0744+-0.7946        ? might be 1.0224x slower
   double-to-int32-typed-array-no-inline              2.2827+-0.0951     ?      2.4432+-0.3064        ? might be 1.0703x slower
   double-to-int32-typed-array                        2.2216+-0.2101            2.0852+-0.0526          might be 1.0654x faster
   double-to-uint32-typed-array-no-inline             2.4415+-0.1511            2.3790+-0.1479          might be 1.0262x faster
   double-to-uint32-typed-array                       2.1309+-0.1003     ?      2.2210+-0.3509        ? might be 1.0423x slower
   elidable-new-object-dag                           35.8098+-1.0152           34.2377+-0.7552          might be 1.0459x faster
   elidable-new-object-roflcopter                    33.7351+-1.5415           33.3510+-2.1961          might be 1.0115x faster
   elidable-new-object-then-call                     32.5748+-2.1756           32.1326+-0.8997          might be 1.0138x faster
   elidable-new-object-tree                          38.4101+-0.8758           37.6004+-0.4345          might be 1.0215x faster
   empty-string-plus-int                              4.7767+-0.0812     ?      4.8769+-0.2843        ? might be 1.0210x slower
   emscripten-cube2hash                              27.1675+-1.1637     ?     27.3705+-1.3202        ?
   exit-length-on-plain-object                       18.2179+-0.9233     ?     18.3368+-0.6717        ?
   external-arguments-getbyval                        1.2479+-0.0684            1.2303+-0.0648          might be 1.0143x faster
   external-arguments-putbyval                        2.3814+-0.1843            2.3045+-0.1686          might be 1.0334x faster
   fixed-typed-array-storage-var-index                1.2811+-0.0756            1.2557+-0.0518          might be 1.0202x faster
   fixed-typed-array-storage                          1.0582+-0.1747            0.9805+-0.0727          might be 1.0792x faster
   Float32Array-matrix-mult                           4.5790+-0.2868     ?      4.7449+-0.4833        ? might be 1.0362x slower
   Float32Array-to-Float64Array-set                  50.3901+-1.0642           49.3495+-0.8127          might be 1.0211x faster
   Float64Array-alloc-long-lived                     60.9659+-2.1066     ?     61.0994+-1.5003        ?
   Float64Array-to-Int16Array-set                    62.7219+-2.7604           60.3827+-0.7521          might be 1.0387x faster
   fold-double-to-int                                12.7301+-0.5920           12.3301+-0.1298          might be 1.0324x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.2350+-1.1016           10.9343+-0.8905          might be 1.0275x faster
   fold-get-by-id-to-multi-get-by-offset             10.4511+-1.0588           10.2013+-1.2393          might be 1.0245x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6358+-2.0718            7.9908+-1.6846          might be 1.0807x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.2134+-1.7549     ?      8.6477+-1.4992        ? might be 1.0529x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.6757+-2.0741     ?     10.3277+-1.0001        ? might be 1.0674x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     11.2099+-1.1816           10.7230+-1.3517          might be 1.0454x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1861+-1.1502     ?     10.1878+-0.7855        ?
   fold-put-by-id-to-multi-put-by-offset             10.3698+-0.9990     ?     11.2558+-2.1708        ? might be 1.0854x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.7600+-0.8686            9.9324+-0.7322          might be 1.0833x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.5267+-1.5649           10.5249+-0.9831        
   fold-put-structure                                 8.1187+-0.6804     ?      8.7016+-2.2906        ? might be 1.0718x slower
   for-of-iterate-array-entries                      11.2221+-0.2509           10.7841+-0.4220          might be 1.0406x faster
   for-of-iterate-array-keys                          3.8861+-0.2053     ?      3.9280+-0.2628        ? might be 1.0108x slower
   for-of-iterate-array-values                        3.5921+-0.3735     ?      3.6300+-0.2358        ? might be 1.0105x slower
   fround                                            18.0648+-0.9057     ?     18.6393+-0.5985        ? might be 1.0318x slower
   ftl-library-inlining-dataview                     58.2903+-0.5542           57.3994+-1.6747          might be 1.0155x faster
   ftl-library-inlining                              18.0017+-1.1066           17.3217+-0.8754          might be 1.0393x faster
   ftl-polymorphic-div                              211.1903+-2.9375     ?    211.7982+-1.5733        ?
   ftl-polymorphic-mul                              236.7826+-2.4343     ?    239.0426+-7.9104        ?
   ftl-polymorphic-sub                              312.5896+-1.2389          312.3924+-2.3536        
   function-call                                     11.2376+-0.5674           10.9495+-0.1929          might be 1.0263x faster
   function-dot-apply                                 2.1186+-0.1476            2.0889+-0.0264          might be 1.0142x faster
   function-test                                      2.8504+-0.1418            2.7290+-0.0323          might be 1.0445x faster
   function-with-eval                                85.1210+-1.6192     ?     87.1676+-2.5999        ? might be 1.0240x slower
   gcse-poly-get-less-obvious                        21.6294+-0.5545           21.6269+-0.6661        
   gcse-poly-get                                     21.7802+-0.3703     ?     22.1680+-0.8593        ? might be 1.0178x slower
   gcse                                               3.4472+-0.0869     ?      3.4900+-0.1540        ? might be 1.0124x slower
   generator-create                                   0.8300+-0.0768            0.7836+-0.0499          might be 1.0593x faster
   generator-fib                                    100.4296+-2.0298     ?    100.6447+-4.1837        ?
   generator-function-create                          0.8300+-0.2270            0.7402+-0.0388          might be 1.1214x faster
   generator-sunspider-access-nsieve                  5.6612+-0.1500     ?      5.6693+-0.2305        ?
   generator-with-several-types                     309.5152+-8.1015          307.4637+-4.7430        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7129+-0.1133            2.6226+-0.0570          might be 1.0344x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7353+-0.0819            4.7286+-0.0954        
   get-by-id-chain-from-try-block                     2.6252+-0.0621            2.6201+-0.0371        
   get-by-id-check-structure-elimination              4.1045+-0.4231            3.9767+-0.0608          might be 1.0321x faster
   get-by-id-proto-or-self                           16.7927+-1.5234           16.5284+-0.8310          might be 1.0160x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8888+-0.0397     ?      2.9438+-0.2370        ? might be 1.0191x slower
   get-by-id-self-or-proto                           16.7908+-1.4315     ?     16.8544+-1.2461        ?
   get-by-val-out-of-bounds                           4.4285+-0.1943     ?      4.4360+-0.2639        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7797+-0.0907            2.7219+-0.0176          might be 1.0212x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.1723+-0.2353     ?      6.1827+-0.4270        ?
   get-by-val-with-string-chain-from-try-block   
                                                      2.7337+-0.1310            2.6314+-0.0329          might be 1.0389x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.6674+-0.1534            5.6397+-0.1474        
   get-by-val-with-string-proto-or-self              17.2842+-1.5714           17.0560+-0.7476          might be 1.0134x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0865+-0.0575            3.0818+-0.0656        
   get-by-val-with-string-self-or-proto              16.1474+-0.7283     ?     16.5557+-0.7376        ? might be 1.0253x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.1770+-0.0850     ?      3.2131+-0.0658        ? might be 1.0114x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3881+-0.0832     ?     12.7693+-0.4764        ? might be 1.0308x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.6944+-0.0840     ?      2.7632+-0.2064        ? might be 1.0256x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.4956+-0.2595     ?     11.5584+-0.1880        ?
   get-by-val-with-symbol-proto-or-self              17.3272+-1.1096           16.7583+-1.3619          might be 1.0340x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.6763+-0.0099     ?      3.7283+-0.0887        ? might be 1.0142x slower
   get-by-val-with-symbol-self-or-proto              16.7326+-0.8501           16.5689+-0.8153        
   get_callee_monomorphic                             2.5751+-0.2417     ?      2.7686+-0.2735        ? might be 1.0751x slower
   get_callee_polymorphic                             3.6323+-0.1593     ?      3.6856+-0.2546        ? might be 1.0147x slower
   getter-no-activation                               5.0370+-0.5392     ?      5.1874+-0.8372        ? might be 1.0299x slower
   getter-prototype                                   8.1386+-0.4838     ?      8.3270+-0.7917        ? might be 1.0231x slower
   getter-richards-try-catch                        990.6144+-14.0252    ?    993.9612+-14.1654       ?
   getter-richards                                  125.3737+-22.6863         114.9616+-5.1629          might be 1.0906x faster
   getter                                             5.8913+-0.8444            5.7627+-0.7553          might be 1.0223x faster
   global-object-access-with-mutating-structure   
                                                      5.9324+-0.3212            5.6406+-0.1730          might be 1.0517x faster
   global-var-const-infer-fire-from-opt               0.7453+-0.0530     ?      0.8030+-0.1821        ? might be 1.0774x slower
   global-var-const-infer                             0.6402+-0.0193     ?      0.6435+-0.0252        ?
   hard-overflow-check-equal                         26.8173+-0.8812     ?     27.2498+-0.5897        ? might be 1.0161x slower
   hard-overflow-check                               27.1974+-1.2840           26.8636+-0.8529          might be 1.0124x faster
   HashMap-put-get-iterate-keys                      26.6273+-2.4773     ?     27.3704+-1.7698        ? might be 1.0279x slower
   HashMap-put-get-iterate                           28.6505+-0.4044           28.3879+-1.7276        
   HashMap-string-put-get-iterate                    24.7798+-1.9988           24.7229+-1.0515        
   hoist-make-rope                                    8.6926+-0.6866     ?      9.1154+-0.5983        ? might be 1.0486x slower
   hoist-poly-check-structure-effectful-loop   
                                                      3.7832+-0.1933     ?      3.7859+-0.2515        ?
   hoist-poly-check-structure                         3.1440+-0.0859     ?      3.2017+-0.0895        ? might be 1.0184x slower
   imul-double-only                                   7.6722+-0.3187            7.6594+-0.4216        
   imul-int-only                                      8.6572+-1.1333     ?      8.8630+-1.3790        ? might be 1.0238x slower
   imul-mixed                                         7.1301+-0.6902            6.9879+-0.6372          might be 1.0204x faster
   in-four-cases                                     18.8048+-0.6975           18.4901+-0.2840          might be 1.0170x faster
   in-one-case-false                                 10.6331+-0.5864           10.3153+-0.3046          might be 1.0308x faster
   in-one-case-true                                  10.3799+-0.4380           10.2549+-0.2928          might be 1.0122x faster
   in-two-cases                                      10.5691+-0.2193     ?     10.7924+-0.5743        ? might be 1.0211x slower
   indexed-properties-in-objects                      2.8371+-0.0515            2.8303+-0.0810        
   infer-closure-const-then-mov-no-inline             3.6836+-0.0757            3.6400+-0.1176          might be 1.0120x faster
   infer-closure-const-then-mov                      16.2108+-0.4772     ?     16.4072+-0.1992        ? might be 1.0121x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0898+-0.3419           10.9410+-0.2992          might be 1.0136x faster
   infer-closure-const-then-put-to-scope             23.1510+-0.5746           22.7375+-0.9793          might be 1.0182x faster
   infer-closure-const-then-reenter-no-inline   
                                                     46.7696+-1.6995           45.7586+-1.5770          might be 1.0221x faster
   infer-closure-const-then-reenter                  23.5065+-0.7885           23.4614+-0.2335        
   infer-constant-global-property                     3.6318+-0.2888            3.5029+-0.1554          might be 1.0368x faster
   infer-constant-property                            2.7313+-0.1585            2.6191+-0.0408          might be 1.0428x faster
   infer-one-time-closure-ten-vars                    8.0223+-0.5464            7.7778+-0.4264          might be 1.0314x faster
   infer-one-time-closure-two-vars                    7.5074+-0.5435     ?      7.6341+-0.4072        ? might be 1.0169x slower
   infer-one-time-closure                             7.2864+-0.1241     !      8.1156+-0.6913        ! definitely 1.1138x slower
   infer-one-time-deep-closure                       10.8826+-0.3530     ?     11.0083+-0.3341        ? might be 1.0116x slower
   inline-arguments-access                            3.9367+-0.3641            3.7952+-0.2933          might be 1.0373x faster
   inline-arguments-aliased-access                    3.8150+-0.2379     ?      3.8318+-0.3102        ?
   inline-arguments-local-escape                      3.9107+-0.3002     ?      4.1896+-0.5934        ? might be 1.0713x slower
   inline-get-scoped-var                              4.5689+-0.1568     ?      4.6273+-0.1131        ? might be 1.0128x slower
   inlined-put-by-id-transition                      10.4813+-1.0530           10.3165+-0.5119          might be 1.0160x faster
   inlined-put-by-val-with-string-transition   
                                                     44.3980+-1.3479     ?     45.7768+-2.1086        ? might be 1.0311x slower
   inlined-put-by-val-with-symbol-transition   
                                                     43.6133+-1.2236     ?     44.0684+-1.2127        ? might be 1.0104x slower
   int-or-other-abs-then-get-by-val                   4.5763+-0.1591     ?      4.5836+-0.1111        ?
   int-or-other-abs-zero-then-get-by-val             15.9208+-0.5030     ?     16.1219+-1.1718        ? might be 1.0126x slower
   int-or-other-add-then-get-by-val                   4.2619+-0.1037            4.2243+-0.0401        
   int-or-other-add                                   5.3857+-0.9832            5.1174+-0.2958          might be 1.0524x faster
   int-or-other-div-then-get-by-val                   3.8485+-0.0869     ?      3.8984+-0.1085        ? might be 1.0130x slower
   int-or-other-max-then-get-by-val                   3.8648+-0.1261     ?      3.8810+-0.0612        ?
   int-or-other-min-then-get-by-val                   3.9876+-0.2084            3.8639+-0.1055          might be 1.0320x faster
   int-or-other-mod-then-get-by-val                   3.6510+-0.0361     ?      3.6537+-0.0387        ?
   int-or-other-mul-then-get-by-val                   3.6299+-0.0199     ?      3.6902+-0.1316        ? might be 1.0166x slower
   int-or-other-neg-then-get-by-val                   4.1597+-0.0361     !      4.2583+-0.0366        ! definitely 1.0237x slower
   int-or-other-neg-zero-then-get-by-val             15.9041+-0.4917           15.7674+-0.4763        
   int-or-other-sub-then-get-by-val                   4.1724+-0.0583            4.1645+-0.0711        
   int-or-other-sub                                   3.5414+-0.1743            3.5203+-0.0822        
   int-overflow-local                                 4.3131+-0.2739     ?      4.3646+-0.3609        ? might be 1.0120x slower
   Int16Array-alloc-long-lived                       45.6779+-1.2955     ?     46.0633+-1.6710        ?
   Int16Array-bubble-sort-with-byteLength            22.8134+-0.7659           21.9526+-0.3753          might be 1.0392x faster
   Int16Array-bubble-sort                            20.6830+-0.7429     ?     21.4669+-1.1069        ? might be 1.0379x slower
   Int16Array-load-int-mul                            1.6672+-0.2212            1.5969+-0.1113          might be 1.0441x faster
   Int16Array-to-Int32Array-set                      45.5819+-0.7727     ?     46.3759+-1.3484        ? might be 1.0174x slower
   Int32Array-alloc-large                            12.5947+-0.4868           12.1942+-0.5315          might be 1.0328x faster
   Int32Array-alloc-long-lived                       50.5643+-1.6367           50.3169+-1.4325        
   Int32Array-alloc                                   3.2571+-0.1001            3.1625+-0.1265          might be 1.0299x faster
   Int32Array-Int8Array-view-alloc                    5.9389+-0.2953     ?      6.0649+-0.2991        ? might be 1.0212x slower
   int52-spill                                        4.7963+-0.1696            4.7792+-0.2464        
   Int8Array-alloc-long-lived                        42.2169+-1.5021           41.8659+-1.7092        
   Int8Array-load-with-byteLength                     3.4647+-0.0818     ?      3.4841+-0.0577        ?
   Int8Array-load                                     3.4466+-0.0583     ?      3.4493+-0.0534        ?
   integer-divide                                    10.3760+-0.1525     ?     10.4465+-0.3007        ?
   integer-modulo                                     1.6426+-0.0650     ?      1.7432+-0.2026        ? might be 1.0613x slower
   is-boolean-fold-tricky                             3.8095+-0.0740            3.7481+-0.0248          might be 1.0164x faster
   is-boolean-fold                                    2.6830+-0.0556            2.6669+-0.0469        
   is-function-fold-tricky-internal-function   
                                                      9.8333+-0.1392            9.5560+-0.1992          might be 1.0290x faster
   is-function-fold-tricky                            4.0459+-0.0901     ?      4.2534+-0.2815        ? might be 1.0513x slower
   is-function-fold                                   2.6800+-0.0606     ?      2.8168+-0.1632        ? might be 1.0511x slower
   is-number-fold-tricky                              4.0834+-0.2236            3.9463+-0.0719          might be 1.0347x faster
   is-number-fold                                     2.7081+-0.0856            2.6811+-0.0391          might be 1.0101x faster
   is-object-or-null-fold-functions                   2.8922+-0.2271            2.7997+-0.1912          might be 1.0330x faster
   is-object-or-null-fold-less-tricky                 4.0767+-0.1281     ?      4.1368+-0.1788        ? might be 1.0147x slower
   is-object-or-null-fold-tricky                      5.1335+-0.4184            4.8901+-0.1805          might be 1.0498x faster
   is-object-or-null-fold                             2.6891+-0.0505     ?      2.7105+-0.0463        ?
   is-object-or-null-trickier-function                4.1081+-0.1032            4.0287+-0.0890          might be 1.0197x faster
   is-object-or-null-trickier-internal-function   
                                                      9.7331+-0.1236     ?     10.0073+-0.6459        ? might be 1.0282x slower
   is-object-or-null-tricky-function                  4.0703+-0.0715     ?      4.0746+-0.0871        ?
   is-object-or-null-tricky-internal-function   
                                                      7.3404+-0.0328            7.3101+-0.2811        
   is-string-fold-tricky                              4.2396+-0.6704            4.0291+-0.1800          might be 1.0522x faster
   is-string-fold                                     2.7256+-0.1699            2.6801+-0.0408          might be 1.0170x faster
   is-undefined-fold-tricky                           3.3944+-0.0845            3.3620+-0.0531        
   is-undefined-fold                                  2.7233+-0.0958            2.6700+-0.0695          might be 1.0199x faster
   JSONP-negative-0                                   0.2864+-0.0114     ?      0.2893+-0.0252        ?
   large-int-captured                                 4.1503+-0.0661     ?      4.2484+-0.2341        ? might be 1.0236x slower
   large-int-neg                                     13.9961+-0.2439     ?     14.5700+-0.6797        ? might be 1.0410x slower
   large-int                                         13.0755+-0.1751     ?     13.6576+-1.2919        ? might be 1.0445x slower
   load-varargs-elimination                          21.4432+-1.4373           20.9776+-0.7784          might be 1.0222x faster
   logical-not-weird-types                            3.1639+-0.2285            3.1019+-0.0617          might be 1.0200x faster
   logical-not                                        4.4610+-0.0772     ?      4.5331+-0.0846        ? might be 1.0162x slower
   lots-of-fields                                    10.2998+-0.3663            9.6913+-0.5463          might be 1.0628x faster
   make-indexed-storage                               2.9233+-0.0986            2.9162+-0.2040        
   make-rope-cse                                      3.9633+-0.2125            3.8304+-0.1586          might be 1.0347x faster
   marsaglia-larger-ints                             32.5304+-1.1504     ?     32.5691+-0.8361        ?
   marsaglia-osr-entry                               21.7617+-0.6664     ?     22.0083+-0.6273        ? might be 1.0113x slower
   math-random                                       11.7957+-0.7027           11.4657+-0.2233          might be 1.0288x faster
   math-with-out-of-bounds-array-values              22.7008+-0.4971           21.7178+-0.6771          might be 1.0453x faster
   max-boolean                                        2.7097+-0.1197            2.6726+-0.0555          might be 1.0139x faster
   method-on-number                                  17.1987+-1.4205           16.7081+-0.7233          might be 1.0294x faster
   min-boolean                                        2.6403+-0.0479     ?      2.7679+-0.1338        ? might be 1.0483x slower
   minus-boolean-double                               3.2539+-0.2761            3.2123+-0.2618          might be 1.0130x faster
   minus-boolean                                      2.3518+-0.0516     ?      2.3688+-0.0438        ?
   misc-strict-eq                                    29.6355+-1.1038           29.2971+-1.3487          might be 1.0116x faster
   mod-boolean-double                                11.3233+-0.2139           11.2588+-0.2485        
   mod-boolean                                        8.3353+-0.1955     ?      8.4618+-0.1349        ? might be 1.0152x slower
   mul-boolean-double                                 3.6664+-0.1008            3.6341+-0.1429        
   mul-boolean                                        2.9042+-0.1053     ?      2.9470+-0.0874        ? might be 1.0147x slower
   neg-boolean                                        3.1341+-0.0464            3.1228+-0.0511        
   negative-zero-divide                               0.4405+-0.0708            0.3915+-0.0375          might be 1.1252x faster
   negative-zero-modulo                               0.3714+-0.0082     ?      0.4129+-0.0387        ? might be 1.1115x slower
   negative-zero-negate                               0.3733+-0.0349     ?      0.3918+-0.0548        ? might be 1.0496x slower
   nested-function-parsing                           46.7397+-0.9239           46.4178+-1.3744        
   new-array-buffer-dead                             87.9237+-0.6844     ?     88.9602+-1.3622        ? might be 1.0118x slower
   new-array-buffer-push                              6.7965+-0.2457     ?      7.3048+-0.6249        ? might be 1.0748x slower
   new-array-dead                                    15.5291+-0.7478           15.2931+-0.9425          might be 1.0154x faster
   new-array-push                                     4.6360+-0.3747            4.4539+-0.2184          might be 1.0409x faster
   no-inline-constructor                             30.4717+-0.8290     ?     31.0397+-1.2005        ? might be 1.0186x slower
   number-test                                        3.0634+-0.1283            3.0229+-0.1556          might be 1.0134x faster
   object-closure-call                                4.8930+-0.0697     ?      5.1064+-0.3300        ? might be 1.0436x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.6458+-0.6801     ?      4.8013+-0.7427        ? might be 1.0335x slower
   object-test                                        2.7827+-0.1716     ?      2.8650+-0.3666        ? might be 1.0296x slower
   obvious-sink-pathology-taken                      99.4376+-1.7261           99.1679+-1.3846        
   obvious-sink-pathology                            30.0693+-0.3519     ?     31.1021+-2.1565        ? might be 1.0343x slower
   obviously-elidable-new-object                     29.0850+-0.6837           29.0477+-0.7457        
   plus-boolean-arith                                 2.4018+-0.0309     !      2.5015+-0.0648        ! definitely 1.0415x slower
   plus-boolean-double                                3.1506+-0.0427            3.0985+-0.0147          might be 1.0168x faster
   plus-boolean                                       2.5464+-0.0537            2.5290+-0.0270        
   poly-chain-access-different-prototypes-simple   
                                                      2.6280+-0.0559     ?      2.6615+-0.0760        ? might be 1.0127x slower
   poly-chain-access-different-prototypes             2.6319+-0.1051            2.6183+-0.1056        
   poly-chain-access-simpler                          2.6465+-0.0376            2.6063+-0.0550          might be 1.0154x faster
   poly-chain-access                                  2.5815+-0.0771            2.5572+-0.0226        
   poly-stricteq                                     53.2695+-1.0358           52.4821+-0.9138          might be 1.0150x faster
   polymorphic-array-call                             1.4248+-0.2578            1.2704+-0.0401          might be 1.1216x faster
   polymorphic-get-by-id                              2.9204+-0.0532            2.9164+-0.0551        
   polymorphic-put-by-id                             25.6916+-1.0124     ?     27.3895+-1.7828        ? might be 1.0661x slower
   polymorphic-put-by-val-with-string                27.3751+-0.4162           27.2852+-0.4042        
   polymorphic-put-by-val-with-symbol                28.0659+-0.6849     ?     28.6196+-1.4889        ? might be 1.0197x slower
   polymorphic-structure                             12.4918+-0.2599     ?     12.6239+-0.2827        ? might be 1.0106x slower
   polyvariant-monomorphic-get-by-id                  6.5589+-0.8719     ?      6.7360+-0.6891        ? might be 1.0270x slower
   proto-getter-access                                8.3059+-0.2952     ?      8.5059+-0.3354        ? might be 1.0241x slower
   prototype-access-with-mutating-prototype           5.4838+-0.2185     ?      5.5070+-0.1919        ?
   put-by-id-replace-and-transition                   8.4331+-0.7330     ?      9.3868+-1.9798        ? might be 1.1131x slower
   put-by-id-slightly-polymorphic                     2.7363+-0.0324            2.7128+-0.0554        
   put-by-id                                         10.4288+-0.3948            9.9801+-0.5461          might be 1.0450x faster
   put-by-val-direct                                  0.3945+-0.0197     ?      0.4018+-0.0283        ? might be 1.0185x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.5424+-0.3956            5.3834+-0.1713          might be 1.0295x faster
   put-by-val-machine-int                             2.6846+-0.1395     ?      2.7364+-0.1420        ? might be 1.0193x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.5342+-0.2300     ?     10.6267+-0.6077        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      3.1549+-0.4190            2.9858+-0.0350          might be 1.0566x faster
   put-by-val-with-string                            10.9401+-0.6417           10.5373+-0.5496          might be 1.0382x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     12.0973+-0.4540     ?     12.5972+-0.4060        ? might be 1.0413x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2365+-0.0911            3.1916+-0.0809          might be 1.0141x faster
   put-by-val-with-symbol                            11.1254+-0.7773     ?     11.1654+-1.7667        ?
   rare-osr-exit-on-local                            14.0502+-0.2537           13.8329+-0.1167          might be 1.0157x faster
   raytrace-with-empty-try-catch                      5.4707+-0.0913     ?      5.4863+-0.1317        ?
   raytrace-with-try-catch                           11.0917+-1.3056     ?     11.6473+-1.0037        ? might be 1.0501x slower
   register-pressure-from-osr                        16.7136+-0.5419     ?     16.7453+-0.5039        ?
   repeat-multi-get-by-offset                        20.7320+-0.7370     ?     21.3690+-0.7724        ? might be 1.0307x slower
   richards-empty-try-catch                          61.4268+-0.7291           60.2858+-1.7372          might be 1.0189x faster
   richards-try-catch                               237.1702+-1.1212          235.8557+-1.6636        
   setter-prototype                                   7.9708+-0.2794            7.9325+-0.3730        
   setter                                             5.6239+-0.4127     ?      5.6264+-0.6630        ?
   simple-activation-demo                            24.4445+-0.6533     ?     24.6763+-0.7692        ?
   simple-getter-access                              10.6575+-0.1337     ?     10.7454+-0.3555        ?
   simple-poly-call-nested                            8.6481+-0.5471     ?      9.2164+-0.8856        ? might be 1.0657x slower
   simple-poly-call                                   1.4904+-0.1727            1.3216+-0.0446          might be 1.1278x faster
   sin-boolean                                       20.2495+-1.7737           19.1635+-1.8783          might be 1.0567x faster
   singleton-scope                                   57.1729+-2.3547           56.0645+-0.6488          might be 1.0198x faster
   sink-function                                     10.0847+-0.7243            9.6688+-1.0804          might be 1.0430x faster
   sink-huge-activation                              17.0705+-0.8813           16.6033+-0.7077          might be 1.0281x faster
   sinkable-new-object-dag                           52.9301+-1.2133           52.1761+-1.5855          might be 1.0145x faster
   sinkable-new-object-taken                         42.0698+-1.5683     ?     42.8830+-2.3188        ? might be 1.0193x slower
   sinkable-new-object                               31.2441+-1.0657           30.2010+-0.8672          might be 1.0345x faster
   slow-array-profile-convergence                     2.7642+-0.1351            2.6420+-0.1177          might be 1.0462x faster
   slow-convergence                                   2.6124+-0.1891            2.5796+-0.1349          might be 1.0127x faster
   slow-ternaries                                    17.9786+-0.6012     ?     17.9943+-1.5711        ?
   sorting-benchmark                                 17.9616+-0.8831           17.7994+-0.6436        
   sparse-conditional                                 1.2624+-0.1391            1.1891+-0.0169          might be 1.0617x faster
   splice-to-remove                                  12.8320+-0.9285           12.5158+-0.3701          might be 1.0253x faster
   string-char-code-at                               13.4225+-0.4471           13.1915+-0.2235          might be 1.0175x faster
   string-concat-object                               2.4030+-0.2784            2.1897+-0.0618          might be 1.0974x faster
   string-concat-pair-object                          2.1734+-0.1110     ?      2.2109+-0.0668        ? might be 1.0172x slower
   string-concat-pair-simple                          9.6307+-0.3744     ?      9.9141+-0.8784        ? might be 1.0294x slower
   string-concat-simple                               9.7135+-0.9760            9.2987+-0.1994          might be 1.0446x faster
   string-cons-repeat                                 6.6109+-0.0854     ?      6.8525+-0.7315        ? might be 1.0365x slower
   string-cons-tower                                  7.0437+-0.3795            6.7192+-0.2245          might be 1.0483x faster
   string-equality                                   20.7936+-0.3165     ^     18.3229+-0.3072        ^ definitely 1.1348x faster
   string-get-by-val-big-char                         6.5120+-0.1361     ?      6.5597+-0.0699        ?
   string-get-by-val-out-of-bounds-insane             3.1029+-0.0760     ?      3.1266+-0.1069        ?
   string-get-by-val-out-of-bounds                    4.0743+-0.1267            3.9530+-0.0837          might be 1.0307x faster
   string-get-by-val                                  2.8408+-0.0746     ?      2.9363+-0.1082        ? might be 1.0337x slower
   string-hash                                        2.0219+-0.2594            1.8886+-0.0232          might be 1.0706x faster
   string-long-ident-equality                        15.1934+-0.5932           15.1691+-0.4677        
   string-out-of-bounds                              10.0580+-0.2809     ?     10.3759+-0.5642        ? might be 1.0316x slower
   string-repeat-arith                               25.7879+-0.8062     ?     26.8907+-1.3225        ? might be 1.0428x slower
   string-rope-with-object                           20.9983+-1.7417     ?     21.1098+-0.5121        ?
   string-sub                                        32.1211+-0.3760     !     34.7462+-1.6557        ! definitely 1.0817x slower
   string-test                                        2.9137+-0.1548            2.8686+-0.0082          might be 1.0157x faster
   string-var-equality                               29.1145+-1.6265           28.1971+-0.3376          might be 1.0325x faster
   structure-hoist-over-transitions                   2.3709+-0.0986            2.3667+-0.0914        
   substring-concat-weird                            35.9656+-0.7267     ?     37.1201+-1.3406        ? might be 1.0321x slower
   substring-concat                                  39.6964+-0.9941           39.5175+-0.9661        
   substring                                         44.8358+-0.8950     ?     45.8905+-1.7141        ? might be 1.0235x slower
   switch-char-constant                               2.7334+-0.0356     ?      2.7343+-0.0661        ?
   switch-char                                        6.7403+-1.0319            6.1025+-0.9188          might be 1.1045x faster
   switch-constant                                   10.0359+-1.3205            8.8996+-1.2356          might be 1.1277x faster
   switch-string-basic-big-var                       14.8060+-0.5475           14.3126+-0.4141          might be 1.0345x faster
   switch-string-basic-big                           14.8367+-0.5199     ?     15.2126+-0.5235        ? might be 1.0253x slower
   switch-string-basic-var                           13.2536+-0.2764     ?     13.6806+-0.4608        ? might be 1.0322x slower
   switch-string-basic                               12.8506+-0.2123     ?     13.2926+-0.6779        ? might be 1.0344x slower
   switch-string-big-length-tower-var                18.5384+-0.4424     ?     19.4410+-1.7357        ? might be 1.0487x slower
   switch-string-length-tower-var                    13.3627+-0.1813     !     14.2546+-0.3565        ! definitely 1.0667x slower
   switch-string-length-tower                        12.3667+-0.7742           11.9456+-0.3364          might be 1.0353x faster
   switch-string-short                               12.1031+-0.4446           12.0143+-0.3562        
   switch                                            11.4988+-0.5910     ?     11.6169+-0.6553        ? might be 1.0103x slower
   symbol-tostringtag                                 3.6540+-0.7163            3.3597+-0.2700          might be 1.0876x faster
   tear-off-arguments-simple                          3.1641+-0.2400     ?      3.1747+-0.1877        ?
   tear-off-arguments                                 4.1836+-0.2078            4.1208+-0.0975          might be 1.0152x faster
   temporal-structure                                11.6993+-0.0915     ?     11.8173+-0.2786        ? might be 1.0101x slower
   to-int32-boolean                                  12.5309+-0.1546     ?     13.1243+-0.6319        ? might be 1.0474x slower
   try-catch-get-by-val-cloned-arguments             10.1902+-0.7085            9.8657+-0.4423          might be 1.0329x faster
   try-catch-get-by-val-direct-arguments              2.4705+-0.2983            2.2910+-0.0760          might be 1.0783x faster
   try-catch-get-by-val-scoped-arguments              4.6873+-0.4757            4.5447+-0.4261          might be 1.0314x faster
   typed-array-get-set-by-val-profiling              28.1272+-1.1738           27.7713+-0.6721          might be 1.0128x faster
   undefined-property-access                        213.5545+-0.8045     ?    215.7687+-3.7059        ? might be 1.0104x slower
   undefined-test                                     3.0206+-0.1574     ?      3.2204+-0.4080        ? might be 1.0661x slower
   unprofiled-licm                                    9.6554+-0.6111            9.3550+-0.1878          might be 1.0321x faster
   v8-raytrace-with-empty-try-catch                  57.1261+-1.8032     ?     57.1710+-1.9938        ?
   v8-raytrace-with-try-catch                        68.2616+-2.2285           67.1704+-1.3114          might be 1.0162x faster
   varargs-call                                      13.0924+-0.3044     ?     13.4502+-0.6015        ? might be 1.0273x slower
   varargs-construct-inline                          22.6349+-1.0228           22.4932+-1.3316        
   varargs-construct                                 20.7483+-0.6551           20.3505+-0.6285          might be 1.0195x faster
   varargs-inline                                     8.7249+-0.1966     ?      8.8072+-0.1666        ?
   varargs-strict-mode                               10.0214+-0.6831            9.9267+-0.3989        
   varargs                                            9.7186+-0.1755     ?      9.7642+-0.3223        ?
   weird-inlining-const-prop                          2.4086+-0.1799            2.3780+-0.1210          might be 1.0128x faster

   &lt;geometric&gt;                                        8.4233+-0.0240            8.4025+-0.0299          might be 1.0025x faster

                                                        TipOfTree                  FastDyn                                      
AsmBench:
   bigfib.cpp                                       488.7426+-90.8830         448.9087+-8.2549          might be 1.0887x faster
   cray.c                                           393.4331+-2.6926          392.9294+-2.4441        
   dry.c                                            425.0575+-5.6374          424.3868+-8.4364        
   FloatMM.c                                        684.5850+-2.5567     ?    689.5412+-11.3132       ?
   gcc-loops.cpp                                   3431.6389+-9.4354     ?   3432.8980+-19.2557       ?
   n-body.c                                         824.4081+-2.8235     ?    828.0731+-6.7211        ?
   Quicksort.c                                      411.6755+-5.2824          408.2388+-2.0263        
   stepanov_container.cpp                          3496.0503+-19.2473    ?   3530.7854+-108.4979      ?
   Towers.c                                         237.5852+-4.0042          236.0856+-1.2685        

   &lt;geometric&gt;                                      722.1598+-12.3658         716.6909+-4.0888          might be 1.0076x faster

                                                        TipOfTree                  FastDyn                                      
CompressionBench:
   huffman                                           61.9609+-0.5393     ?     62.6242+-1.6132        ? might be 1.0107x slower
   arithmetic-simple                                276.1444+-2.1664          275.6372+-2.5819        
   arithmetic-precise                               253.8611+-2.4425          253.0480+-2.2872        
   arithmetic-complex-precise                       256.5291+-14.3699         249.0761+-2.9646          might be 1.0299x faster
   arithmetic-precise-order-0                       288.7501+-3.8005          286.9470+-0.7351        
   arithmetic-precise-order-1                       308.5241+-2.9162     ?    309.2931+-4.4422        ?
   arithmetic-precise-order-2                       355.7136+-3.0981          355.5125+-4.1996        
   arithmetic-simple-order-1                        322.6538+-3.1348          322.0189+-2.0808        
   arithmetic-simple-order-2                        377.2183+-6.7780          375.4242+-6.4170        
   lz-string                                        333.5010+-40.1963         313.2198+-5.9923          might be 1.0648x faster

   &lt;geometric&gt;                                      260.1908+-2.5337          257.8413+-1.4029          might be 1.0091x faster

                                                        TipOfTree                  FastDyn                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.9826+-0.1137           50.8705+-0.0551          might be 1.0022x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149705</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-16 11:20:56 -0800</bug_when>
    <thetext>Attachment 267475 did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 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>1149715</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-16 12:03:39 -0800</bug_when>
    <thetext>Build is angry: 


Last 500 characters of output:
__ZN3JSC9Structure33prototypeChainMayInterceptStoreToERNS_2VMENS_12PropertyNameE&quot;, referenced from:
      __ZN3JSC8JSObject11putInternalEPNS_6JSCellEPNS_9ExecStateENS_12PropertyNameENS_7JSValueERNS_15PutPropertySlotE in dynbench.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149716</commentid>
    <comment_count>7</comment_count>
      <attachid>267475</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-12-16 12:09:36 -0800</bug_when>
    <thetext>Comment on attachment 267475
the patch

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

r=me if you fix the build

&gt; Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755
&gt; +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)

Why isn&apos;t JSValue::putInternal just the new put()?

I think either this should be the new put or, if it&apos;s too big, it should be renamed to putInline() and called by put(), and put() should move out-of-line.

&gt; Source/JavaScriptCore/runtime/JSObject.h:144
&gt; +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);

I&apos;d call this putInline() or inlinePut().

&quot;Internal&quot; doesn&apos;t tell me when I&apos;m allowed to use this. I think I&apos;m allowed to use this whenever I like, as long as I&apos;m willing to pay for inlining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149719</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 12:21:22 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 267475 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=267475&amp;action=review
&gt; 
&gt; r=me if you fix the build

I think I&apos;ve got it.  An easy fix would have been to make GetterSetter.h into a private header and then mark more things JS_EXPORT_PRIVATE.  I&apos;m going in a different direction: I&apos;m adding a putInternalSlow() that goes into JSObject.cpp, and contains all of those parts of putInternal() that require getter/setter code.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCJSValueInlines.h:755
&gt; &gt; +ALWAYS_INLINE void JSValue::putInternal(ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
&gt; 
&gt; Why isn&apos;t JSValue::putInternal just the new put()?

It&apos;s huge.

&gt; 
&gt; I think either this should be the new put or, if it&apos;s too big, it should be
&gt; renamed to putInline() and called by put(), and put() should move
&gt; out-of-line.

Sure.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSObject.h:144
&gt; &gt; +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
&gt; 
&gt; I&apos;d call this putInline() or inlinePut().

Sure.

&gt; 
&gt; &quot;Internal&quot; doesn&apos;t tell me when I&apos;m allowed to use this. I think I&apos;m allowed
&gt; to use this whenever I like, as long as I&apos;m willing to pay for inlining.

That&apos;s true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149721</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 12:25:53 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/JavaScriptCore/runtime/JSObject.h:144
&gt; &gt; &gt; +    static void putInternal(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
&gt; &gt; 
&gt; &gt; I&apos;d call this putInline() or inlinePut().
&gt; 
&gt; Sure.

I went with putInline().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149729</commentid>
    <comment_count>10</comment_count>
      <attachid>267484</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 12:50:25 -0800</bug_when>
    <thetext>Created attachment 267484
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149730</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-16 12:52:05 -0800</bug_when>
    <thetext>Attachment 267484 did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 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>1149732</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 13:02:14 -0800</bug_when>
    <thetext>Here&apos;s the performance of dynbench before this change:

Non Strict Dynamic Get By Id: :                                                           20.1933 +- 0.1588
Non Strict Dynamic Put By Id Replace: :                                                   67.5606 +- 0.9416
Non Strict Dynamic Allocation and Put By Id Transition: :                                118.6623 +- 1.5057
Non Strict Dynamic Get By Id With Dynamic Store Context: :                                20.9737 +- 1.2768
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: :                        46.9602 +- 1.4932
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: :      99.3949 +- 1.1866

Here&apos;s the performance after:

Non Strict Dynamic Get By Id: :                                                           19.7731 +- 0.3310
Non Strict Dynamic Put By Id Replace: :                                                   59.9378 +- 0.5400
Non Strict Dynamic Allocation and Put By Id Transition: :                                107.3013 +- 2.6068
Non Strict Dynamic Get By Id With Dynamic Store Context: :                                20.0169 +- 0.6318
Non Strict Dynamic Put By Id Replace With Dynamic Store Context: :                        37.7219 +- 1.5186
Non Strict Dynamic Allocation and Put By Id Transition With Dynamic Store Context: :      90.0028 +- 2.8719</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149733</commentid>
    <comment_count>13</comment_count>
      <attachid>267485</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 13:07:14 -0800</bug_when>
    <thetext>Created attachment 267485
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149734</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-16 13:08:52 -0800</bug_when>
    <thetext>Attachment 267485 did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 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>1149735</commentid>
    <comment_count>15</comment_count>
      <attachid>267486</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 13:13:48 -0800</bug_when>
    <thetext>Created attachment 267486
one more time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149736</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-16 13:15:29 -0800</bug_when>
    <thetext>Attachment 267486 did not pass style-queue:


ERROR: Source/JavaScriptCore/dynbench.cpp:118:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:142:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:157:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:184:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:208:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dynbench.cpp:223:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValueInlines.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/CustomGetterSetter.h:73:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 10 in 18 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>1149756</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-12-16 14:39:59 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/194175</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267473</attachid>
            <date>2015-12-16 11:15:15 -0800</date>
            <delta_ts>2015-12-16 11:17:57 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBA
CisyMDE1LTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBKU09iamVjdDo6cHV0IHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgYmVuY2htYXJrIGNhbGxl
ZCBkeW5iZW5jaCwgd2hpY2gganVzdCB1c2VzIHRoZSBDKysgQVBJIHRvIGNyZWF0ZSwgbW9kaWZ5
LCBhbmQKKyAgICAgICAgcXVlcnkgb2JqZWN0cy4gVGhpcyBhbHNvIGFkZHMgc29tZSBvcHRpbWl6
YXRpb25zIHRvIG1ha2UgdGhlIEpTT2JqZWN0OjpwdXQgY29kZSBmYXN0ZXIgYnkgbWFraW5nCisg
ICAgICAgIGl0IGlubGluYWJsZSBpbiBwbGFjZXMgdGhhdCByZWFsbHkgbmVlZCB0aGUgcGVyZm9y
bWFuY2UsIGxpa2UgSklUT3BlcmF0aW9ucyBhbmQgTExJbnRTbG93UGF0aHMuCisKKyAgICAgICAg
VGhpcyBpcyB1cCB0byBhIDIwJSBpbXByb3ZlbWVudCBmb3IgSlNPYmplY3Q6OnB1dCBjYWxscyB0
aGF0IGdldCBpbmxpbmVkIGFsbCB0aGUgd2F5IChsaWtlIGZyb20KKyAgICAgICAgSklUT3BlcmF0
aW9ucyBhbmQgdGhlIG5ldyBiZW5jaG1hcmspIGFuZCBpdCdzIGFsc28gYSBzcGVlZC11cCwgYWxi
ZWl0IGEgc21hbGxlciBvbmUsIGZvcgorICAgICAgICBKU09iamVjdDo6cHV0IGNhbGxzIHRoYXQg
ZG9uJ3QgZ2V0IGlubGluZWQgKGkuZS4gdGhvc2UgZnJvbSB0aGUgRE9NIGFuZCB0aGUgSlNDIEMr
KyBsaWJyYXJ5IGNvZGUpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkeW5i
ZW5jaC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpiZW5jaG1hcmtJbXBsKToKKyAgICAgICAg
KG1haW4pOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcDoKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAoSlNDOjpDbGFzc0luZm86Omhhc1N0YXRpY1Byb3BlcnRpZXMp
OgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgICogcnVudGlt
ZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwOgorICAgICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgIChKU0M6OmFkZEVycm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBydW50aW1lL0dldHRlclNldHRlci5oOgorICAgICAgICAoSlNDOjphc0dldHRlclNl
dHRlcik6CisgICAgICAgICogcnVudGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGlt
ZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXQpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dEJ5SW5kZXgpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAg
ICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdElu
dGVybmFsKToKKwogMjAxNS0xMi0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFdvcmsgYXJvdW5kIGEgYnVnIGluIExMVk0gYnkgZmxpcHBpbmcgdGhlIHVuaWZp
Y2F0aW9uIG9yZGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIklkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiVk0u
aCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIHsKKworU3RhdGljTG9jayBj
cmFzaExvY2s7Citjb25zdCBjaGFyKiBuYW1lRmlsdGVyOwordW5zaWduZWQgcmVxdWVzdGVkSXRl
cmF0aW9uQ291bnQ7CisKKyNkZWZpbmUgQ0hFQ0soeCkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2soKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9u
RmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsgXAor
ICAgICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDYWxsYmFjaz4KK05FVkVSX0lOTElORSB2b2lkIGJlbmNobWFya0ltcGwoY29uc3QgY2hhciog
bmFtZSwgdW5zaWduZWQgaXRlcmF0aW9uQ291bnQsIGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykK
K3sKKyAgICBpZiAobmFtZUZpbHRlciAmJiAhc3RyY2FzZXN0cihuYW1lLCBuYW1lRmlsdGVyKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50KQorICAg
ICAgICBpdGVyYXRpb25Db3VudCA9IHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50OworICAgIAorICAg
IGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGNh
bGxiYWNrKGl0ZXJhdGlvbkNvdW50KTsKKyAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGRhdGFMb2cobmFtZSwgIjogIiwgYWZ0ZXIgLSBiZWZv
cmUsICIgbXMuXG4iKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBpZiAoYXJnYyA+PSAyKSB7CisgICAgICAg
IGlmIChhcmd2WzFdWzBdID09ICctJykgeworICAgICAgICAgICAgZGF0YUxvZygiVXNhZ2U6IGR5
bmJlbmNoIFs8ZmlsdGVyPiBbPGl0ZXJhdGlvbiBjb3VudD5dXVxuIik7CisgICAgICAgICAgICBy
ZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIG5hbWVGaWx0ZXIgPSBhcmd2WzFdOworCisg
ICAgICAgIGlmIChhcmdjID49IDMpIHsKKyAgICAgICAgICAgIGlmIChzc2NhbmYoYXJndlsyXSwg
IiV1IiwgJnJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50KSAhPSAxKSB7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiQ291bGQgbm90IHBhcnNlIGl0ZXJhdGlvbiBjb3VudCAiLCBhcmd2WzJdLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisgICAgSlNDOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICBWTSogdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhl
YXApLmxlYWtSZWYoKTsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwor
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPQorICAgICAgICAgICAgSlNH
bG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
KnZtLCBqc051bGwoKSkpOworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKKworICAgICAgICBJZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6
OmZyb21TdHJpbmcoZXhlYywgImYiKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJnIik7CisKKyAgICAgICAgU3RydWN0dXJlKiBvYmpl
Y3RTdHJ1Y3R1cmUgPQorICAgICAgICAgICAgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJl
KCp2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsK
KworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgZ2V0IGJ5IGlkOgorICAgICAgICBKU1Zh
bHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFs
c2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50
ZXJuYWwoZXhlYywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAgICAgICB9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1
dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwo
ZXhlYywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIGJl
bmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIEdldCBCeSBJZCIs
CisgICAgICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRp
b25Db3VudCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNv
dW50OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0
LmdldChleGVjLCBpZGVudEYpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0g
anNOdW1iZXIoNDIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqZWN0LmdldChl
eGVjLCBpZGVudEcpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1i
ZXIoNDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAv
LyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJlcGxhY2U6CisgICAgICAgIG9iamVjdCA9
IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsK
KyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3Bl
cnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywg
aWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xv
dDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRH
LCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIGJlbmNobWFya0ltcGwo
CisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIFB1dCBCeSBJZCBSZXBsYWNlIiwKKyAg
ICAgICAgICAgIDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNv
dW50KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7
IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBp
ZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0LnB1dEludGVybmFsKGV4ZWMsIGlkZW50RywganNOdW1iZXIo
aSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCB0
cmFuc2l0aW9uIHdpdGggb2JqZWN0IGFsbG9jYXRpb246CisgICAgICAgIGJlbmNobWFya0ltcGwo
CisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIEFsbG9jYXRpb24gYW5kIFB1dCBCeSBJ
ZCBUcmFuc2l0aW9uIiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVu
c2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBv
YmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dEludGVybmFsKGV4ZWMsIGlkZW50RiwganNOdW1i
ZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
ZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgZ2V0IGJ5IGlkIHdpdGggZHluYW1pYyBz
dG9yZSBjb250ZXh0OgorICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZt
LCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChl
eGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgewor
ICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAg
ICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3Qp
OworICAgICAgICB9CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0
cmljdCBEeW5hbWljIEdldCBCeSBJZCBXaXRoIER5bmFtaWMgU3RvcmUgQ29udGV4dCIsCisgICAg
ICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3Vu
dCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0LmdldChl
eGVjLCBpZGVudEYpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1i
ZXIoNDIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqZWN0LmdldChleGVjLCBp
ZGVudEcpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDMp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24t
c3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJlcGxhY2Ugd2l0aCBkeW5hbWljIHN0b3JlIGNvbnRl
eHQ6CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0
cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9i
amVjdCwgZmFsc2UpOworICAgICAgICAgICAgb2JqZWN0LnB1dEludGVybmFsKGV4ZWMsIGlkZW50
RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG9iamVj
dC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEcsIGpzTnVtYmVyKDQzKSwgc2xvdCk7CisgICAgICAg
IH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgKKyAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFt
aWMgUHV0IEJ5IElkIFJlcGxhY2UgV2l0aCBEeW5hbWljIFN0b3JlIENvbnRleHQiLAorICAgICAg
ICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEcsIGpzTnVtYmVy
KGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBwdXQgYnkgaWQg
dHJhbnNpdGlvbiB3aXRoIG9iamVjdCBhbGxvY2F0aW9uIHdpdGggZHluYW1pYyBzdG9yZSBjb250
ZXh0OgorICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHlu
YW1pYyBBbGxvY2F0aW9uIGFuZCBQdXQgQnkgSWQgVHJhbnNpdGlvbiBXaXRoIER5bmFtaWMgU3Rv
cmUgQ29udGV4dCIsCisgICAgICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNp
Z25lZCBpdGVyYXRpb25Db3VudCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgb2Jq
ZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0
SW50ZXJuYWwoZXhlYywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
KTsKKyAgICB9CisKKyAgICBjcmFzaExvY2subG9jaygpOworICAgIHJldHVybiAwOworfQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk0MTEyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAog
CQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUg
LyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTQ4Miw2ICs0ODMsMTAgQEAKIAkJMEY5MTlE
MjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRj
aHBvaW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDI3MTU4NTY3NzAwMDRB
NEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCTBGOTMyNzREMUMxRjY2QUEwMENGNjU2
NCAvKiBHUFJJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTMyNzRDMUMxRjY2QUEwMENGNjU2NCAvKiBHUFJJbmZvLmNwcCAqLzsgfTsKKwkJ
MEY5MzI3NTIxQzIwQkNCQTAwQ0Y2NTY0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2
QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRjkzMjc1MzFDMjBC
Q0JBMDBDRjY1NjQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEY5MzI3NUIxQzIwQkNERjAw
Q0Y2NTY0IC8qIGR5bmJlbmNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTMyNzVBMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgKi87
IH07CisJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVG
N0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLzsg
fTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMx
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJ
ZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi87IH07CkBA
IC0yMDU3LDYgKzIwNjIsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjkzMjc1QzFDMjBC
RjNBMDBDRjY1NjQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJY
Q29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4
RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJl
bW90ZUdsb2JhbElEU3RyaW5nID0gMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0OworCQkJcmVtb3Rl
SW5mbyA9IGR5bmJlbmNoOworCQl9OwogCQkwRkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJY
Q29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5
OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2pl
Y3Qgb2JqZWN0ICovOwpAQCAtMjU5NCw2ICsyNjA2LDkgQEAKIAkJMEY5MTlEMjMxNTg1M0NERTAw
NEE0RTdEIC8qIFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQyNzE1ODU2
NzcwMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjkzMjc0QzFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFJJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY5MzI3NTkxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4
ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBkeW5iZW5jaDsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMEY5MzI3NUExQzIwQkNERjAwQ0Y2NTY0IC8q
IGR5bmJlbmNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGR5bmJl
bmNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzI3NUUxQzIxRUY3RjAw
Q0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09iamVjdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3Rh
dHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAv
KiBHZXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdldEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1Miw2
ICs0MjY3LDE1IEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJl
Z2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5MzI3NTExQzIwQkNC
QTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCQkwRjkzMjc1MjFDMjBCQ0JBMDBDRjY1NjQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLywKKwkJCQkwRjkzMjc1MzFDMjBCQ0JBMDBDRjY1NjQgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCTBGQ0VGQUIzMTgwNUQ2MTYwMDQ3
MkNFNCAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNDMzOSw2ICs0MzYzLDcg
QEAKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVD
ODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAv
KiBkeW5iZW5jaCAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtNDM0OCwxNCArNDM3MywxNSBAQAogCQkwODY3RDY5MUZFODQwMjhG
QzAyQUFDMDcgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTY1MjlGQjMwMThCMkQ2MzkwMEM2MTEwMiAvKiBnZW5lcmF0ZS1i
eXRlY29kZS1maWxlcyAqLywKIAkJCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdl
TG9nICovLAorCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKIAkJ
CQlGNjkyQTg1NDAyNTU1OTdEMDFGRjYwRjcgLyogY3JlYXRlX2hhc2hfdGFibGUgKi8sCiAJCQkJ
QTcxOEY4MjExMTc4RUI0QjAwMjQ2NUE3IC8qIGNyZWF0ZV9yZWdleF90YWJsZXMgKi8sCi0JCQkJ
NDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8sCi0JCQkJRjY4RUJCOEMwMjU1
RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICovLAotCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVD
QSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICovLAogCQkJCTkzN0I2M0NDMDlFNzY2RDIwMEE2
NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAorCQkJCTBGOTMyNzVBMUMyMEJDREYwMENG
NjU2NCAvKiBkeW5iZW5jaC5jcHAgKi8sCisJCQkJNjUyOUZCMzAxOEIyRDYzOTAwQzYxMTAyIC8q
IGdlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzICovLAorCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVD
QSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5oICovLAorCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5
REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3
b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAv
KiBBUEkgKi8sCiAJCQkJOTY4OENCMTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywK
QEAgLTQzNjQsOSArNDM5MCwxMiBAQAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBi
dWlsdGlucyAqLywKIAkJCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8s
CiAJCQkJN0UzOUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8qIGJ5dGVjb21waWxlciAqLywKKwkJCQkx
QzkwNTEzRTBCQTlFODgzMDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMgKi8sCiAJCQkJMTQ4MERC
OUEwRERDMjIzMTAwM0NGREYyIC8qIGRlYnVnZ2VyICovLAorCQkJCTY1MEZERjhEMDlEMEZDQTcw
MDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQjMxMzI4REY0NDAwMkIy
QUQ3IC8qIGRmZyAqLywKIAkJCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1i
bGVyICovLAorCQkJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICovLAog
CQkJCTBGRUEwOUZDMTcwNTEzN0YwMEJCNzIyQyAvKiBmdGwgKi8sCiAJCQkJMTQyRTMxMkExMzRG
RjBBNjAwQUZBREI1IC8qIGhlYXAgKi8sCiAJCQkJQTVCQTE1REYxODIzNDA5MjAwQTgyRTY5IC8q
IGluc3BlY3RvciAqLywKQEAgLTQzNzUsMTkgKzQ0MDQsMTYgQEAKIAkJCQkwRjQ2ODA5QzE0QkE3
RjREMDBCRkUyNzIgLyogbGxpbnQgKi8sCiAJCQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8q
IGxsdm0gKi8sCiAJCQkJN0UzOUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKKwkJ
CQkwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCiAJCQkJOTVBQjgzMUEw
REE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTk5RTQ1QTBDMThBMDFFOTMwMDI2
RDg4RiAvKiByZXBsYXkgKi8sCisJCQkJOTMyRkMzQzIwODI0QkI3MDAwNUIzQzc1IC8qIFJlc291
cmNlcyAqLywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKKwkJ
CQk5OTU5RTkyNTFCRDE3RjFFMDAxQUE0MTMgLyogU2NyaXB0cyAqLywKIAkJCQkxNDEyMTEwMDBB
NDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUz
IC8qIHRvb2xzICovLAogCQkJCTdCOThEMTMzMUI2MENEMUUwMDIzQjFBNCAvKiB3YXNtICovLAog
CQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJyICovLAotCQkJCTY1MEZERjhEMDlE
MEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCi0JCQkJOTMyRkMzQzIwODI0QkI3
MDAwNUIzQzc1IC8qIFJlc291cmNlcyAqLywKLQkJCQk5OTU5RTkyNTFCRDE3RjFFMDAxQUE0MTMg
LyogU2NyaXB0cyAqLywKLQkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFDMDcgLyogRnJhbWV3b3Jr
cyAqLywKLQkJCQkwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCi0JCQkJ
MUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBKYXZhU2NyaXB0Q29yZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01
NTIzLDkgKzU1NDksOSBAQAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFs
aXplVGhyZWFkaW5nLmggKi8sCiAJCQkJRTM1RTAzNUQxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5jcHAgKi8sCiAJCQkJRTM1RTAzNUUxQjdBQjQzRTAw
NzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovLAorCQkJCUE3QThB
RjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURC
NUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVB
QjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8q
IEludDhBcnJheS5oICovLAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5h
bEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJu
YWxGdW5jdGlvbi5oICovLAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29s
bGF0b3IuY3BwICovLApAQCAtNTYxNCw5ICs1NjQwLDkgQEAKIAkJCQlBNTk0NTU5MTE4MjQ3NDQ3
MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlLmggKi8sCiAJCQkJQkM3NTZGQzYw
RTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlC
Qzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywK
KwkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQkw
RjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8sCiAJCQkJMEYyQjY2
Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAotCQkJCTBGMkI2NkM5MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUUzM0Y1MDdFMUI4NDI5QTQw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgKi8sCiAJCQkJRTMzRjUwN0YxQjg0MjlB
NDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8sCiAJCQkJRTMzRjUwNzYxQjg0MjI1
NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTY0
Nyw2ICs1NjczLDcgQEAKIAkJCQlBNzI3MDA3NzBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9i
amVjdC5oICovLAogCQkJCUJDMjJBMzk4MEUxNkUxNDgwMEFGMjFDOCAvKiBKU09iamVjdC5jcHAg
Ki8sCiAJCQkJQkMyMkEzOTkwRTE2RTE0ODAwQUYyMUM4IC8qIEpTT2JqZWN0LmggKi8sCisJCQkJ
MEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovLAogCQkJCUE3
Rjk5MzVFMEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmNwcCAqLywKIAkJCQlBN0Y5OTM1
RDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovLAogCQkJCTdDMTg0RTE4MTdCRURC
RDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuY3BwICovLApAQCAtNTY5NCwxMCArNTcyMSwxMCBAQAog
CQkJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBl
LmNwcCAqLywKIAkJCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJ
bmZvLmggKi8sCi0JCQkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXku
aCAqLywKLQkJCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICov
LAogCQkJCTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKIAkJ
CQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAor
CQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJ
MEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQlBN0NB
M0FFMTE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmNwcCAqLywKIAkJCQlBN0NBM0FFMjE3
REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmggKi8sCiAJCQkJNzA5RkI4NjExQUUzMzVDNjAw
MzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgKi8sCkBAIC01ODcxLDExICs1ODk4LDExIEBACiAJCQkJ
MEYyRDRERTAxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oICovLAogCQkJCTBG
MkQ0REUzMTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlU2V0LmNwcCAqLywKIAkJCQkwRjJENERFNDE5
ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5oICovLAorCQkJCUE3QThBRjMwMTdBREI1RjMwMDVB
QjE3NCAvKiBVaW50OEFycmF5LmggKi8sCisJCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8q
IFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQx
NldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50
MzJBcnJheS5oICovLAotCQkJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5
LmggKi8sCi0JCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5
LmggKi8sCiAJCQkJMEZFMDUwMjMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgKi8s
CiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oICovLAogCQkJCUUx
OEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCkBAIC03NzUyLDYgKzc3NzksNyBA
QAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8q
IFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAz
MkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhD
NTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTUwLDYg
Kzc5NzgsMjIgQEAKIC8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8q
IEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTBGOTMyNzRFMUMyMEJDQkEwMENG
NjU2NCAvKiBkeW5iZW5jaCAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1
aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRjkzMjc1NDFDMjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImR5bmJlbmNoIiAqLzsKKwkJ
CWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2Vz
ICovLAorCQkJCTBGOTMyNzUxMUMyMEJDQkEwMENGNjU2NCAvKiBGcmFtZXdvcmtzICovLAorCQkJ
KTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsK
KwkJCW5hbWUgPSBkeW5iZW5jaDsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1
Y3RSZWZlcmVuY2UgPSAwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CisJ
CQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkw
RkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLyA9IHsKIAkJCWlzYSA9IFBC
WE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkNFRkFCNzE4MDVE
NjE2MDA0NzJDRTQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgImxsdm1Gb3JKU0MiICovOwpAQCAtODE0MCw2ICs4MTg0LDcgQEAKIAkJCQk2NTExMjJGNzE0
MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKIAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0
IFRvb2xzICovLAorCQkJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywK
IAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC04Mzc2LDYgKzg0
MjEsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTMyNzRGMUMyMEJD
QkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEY5MzI3NUIxQzIwQkNERjAwQ0Y2NTY0IC8qIGR5bmJlbmNoLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9Owog
CQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAg
LTkyMzUsNiArOTI4OCwxMSBAQAogLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGOTMyNzVE
MUMyMEJGM0EwMENGNjU2NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0g
UEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2
NCAvKiBkeW5iZW5jaCAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2
NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEZDRUZBQkQxODA1RDY2
MzAwNDcyQ0U0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxs
dm1Gb3JKU0MgKi87CkBAIC05MzQxLDYgKzkzOTksMzQgQEAKIAkJCX07CiAJCQluYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKKwkJMEY5MzI3NTUxQzIwQkNCQTAwQ0Y2NTY0IC8qIERlYnVnICovID0g
eworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2Nv
bmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQkwRjkzMjc1NjFDMjBCQ0JBMDBDRjY1NjQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9Owor
CQkwRjkzMjc1NzFDMjBCQ0JBMDBDRjY1NjQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJD
MDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJ
CWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJ
MEY5MzI3NTgxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJ
MEZDRUZBQjgxODA1RDYxNjAwNDcyQ0U0IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJF
MTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlNDLnhjY29uZmlnICovOwpAQCAtOTc0Miw2ICs5
ODI4LDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjkzMjc1NDFDMjBC
Q0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgImR5bmJlbmNoIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQli
dWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2NCAvKiBE
ZWJ1ZyAqLywKKwkJCQkwRjkzMjc1NjFDMjBCQ0JBMDBDRjY1NjQgLyogUmVsZWFzZSAqLywKKwkJ
CQkwRjkzMjc1NzFDMjBCQ0JBMDBDRjY1NjQgLyogUHJvZmlsaW5nICovLAorCQkJCTBGOTMyNzU4
MUMyMEJDQkEwMENGNjU2NCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25m
aWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFBy
b2R1Y3Rpb247CisJCX07CiAJCTBGQ0VGQUI3MTgwNUQ2MTYwMDQ3MkNFNCAvKiBCdWlsZCBjb25m
aWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGx2bUZvckpTQyIgKi8gPSB7CiAJ
CQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTk0MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVbmlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksOCArNTksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjaGlsZElkeCA9IDA7IGNoaWxk
SWR4IDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytjaGlsZElkeCkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICBwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVu
aWZ5KHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworCisgICAgICAgICAgICAgICAgICAgIHBo
aS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KHBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJ
ZHgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE5NDExMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRhdGFGb3JtYXQuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNp
b24gMTk0MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxOTQxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSksIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLSAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVj
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0SW50ZXJuYWwoZXhlYywgaWRlbnQsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0yNjAsNyArMjYwLDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdAogICAgIAogICAgIElkZW50
aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSksIGZhbHNlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRCYXNlKS5wdXQoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBz
bG90KTsKKyAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dEludGVybmFsKGV4ZWMs
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpA
QCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6
IG51bGxwdHI7Ci0gICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwor
ICAgIGJhc2VWYWx1ZS5wdXRJbnRlcm5hbChleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAg
IAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZv
LT5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQo
KSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJh
c2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOyAgICAKLSAgICBiYXNl
VmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElu
dGVybmFsKGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5
cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAg
ICAgICByZXR1cm47CkBAIC00MjIsNyArNDIyLDcgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2Fs
bEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7
CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKLSAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJv
cGVydHksIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0SW50ZXJuYWwoY2FsbEZyYW1l
LCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogfQogCiBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vi
c2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTk0MTEyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjIwLDcgKzYyMCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICBpZiAocGNbOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRC
eUlkSXNEaXJlY3QpCiAgICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdCh2bSwg
aWRlbnQsIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBzbG90KTsKICAgICBlbHNlCi0gICAgICAg
IGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBzbG90
KTsKKyAgICAgICAgYmFzZVZhbHVlLnB1dEludGVybmFsKGV4ZWMsIGlkZW50LCBMTElOVF9PUF9D
KDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAg
CiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxOTQxMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTgx
LDcgKzE4MSw3IEBAIHN0cnVjdCBDbGFzc0luZm8gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgYm9vbCBoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNv
bnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzU3RhdGljU2V0dGVyT3JSZWFkb25s
eVByb3BlcnRpZXMoKSBjb25zdDsKIAogICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhh
c2hUYWJsZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29u
c29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDE5NDExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29uc29sZUNsaWVudC5oIgogCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNl
dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3Rv
bUdldHRlclNldHRlci5oCShyZXZpc2lvbiAxOTQxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCBwcml2YXRlOgogICAgIEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07CiAKLXZvaWQg
Y2FsbEN1c3RvbVNldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwg
SlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKTsKK0pTX0VY
UE9SVF9QUklWQVRFIHZvaWQgY2FsbEN1c3RvbVNldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGN1
c3RvbUdldHRlclNldHRlciwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1Zh
bHVlIHZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxOTQxMTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDUwICsxMjgsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1f
aW5kZXg7CiB9OwogCi1zdGF0aWMgYm9vbCBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNl
dChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgYm9vbCB1c2VDdXJyZW50
RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFtZSwgdW5zaWduZWQgJmJ5dGVjb2RlT2Zmc2V0KQot
ewotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+
KCk7Ci0KLSAgICBpZiAoZXhlYyAmJiBzdGFja1RyYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgdm0u
aW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0KLSAgICBpZiAoIXN0YWNr
VHJhY2UuaXNFbXB0eSgpKSB7Ci0KLSAgICAgICAgQVNTRVJUKGV4ZWMgPT0gdm0udG9wQ2FsbEZy
YW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkg
fHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0K
LSAgICAgICAgU3RhY2tGcmFtZSogc3RhY2tGcmFtZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMCA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBzdGFja0Zy
YW1lID0gJnN0YWNrVHJhY2UuYXQoaSk7Ci0gICAgICAgICAgICBpZiAoc3RhY2tGcmFtZS0+Ynl0
ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIEZpbmRGaXJzdENhbGxlckZyYW1l
V2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKLSAgICAgICAgICAgIHZtLnRvcENh
bGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9IGZ1bmN0
b3IuZm91bmRDYWxsRnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBm
dW5jdG9yLmluZGV4KCk7Ci0gICAgICAgICAgICBieXRlY29kZU9mZnNldCA9IHN0YWNrVHJhY2Uu
YXQoc3RhY2tJbmRleCkuYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICAgICAgc3Rh
Y2tGcmFtZS0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpLCBS
ZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihjb2x1bW4pLCBSZWFkT25seSB8IERvbnREZWxl
dGUpOwotCi0gICAgICAgIGlmICghc3RhY2tGcmFtZS0+c291cmNlVVJMLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkws
IGpzU3RyaW5nKCZ2bSwgc3RhY2tGcmFtZS0+c291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVs
ZXRlKTsKLSAgICAKLSAgICAgICAgaWYgKCF1c2VDdXJyZW50RnJhbWUpCi0gICAgICAgICAgICBz
dGFja1RyYWNlLnJlbW92ZSgwKTsKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPnN0YWNrLCB2bS5pbnRlcnByZXRlci0+c3RhY2tUcmFjZUFzU3RyaW5nKHZtLnRv
cENhbGxGcmFtZSwgc3RhY2tUcmFjZSksIERvbnRFbnVtKTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEVycm9ySW5zdGFuY2U6OmZp
bmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIGJvb2wgdXNlQ3VycmVudEZyYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5o
CShyZXZpc2lvbiAxOTQxMTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0
ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlubGluZSBHZXR0
ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmEKIH0KIAogSlNWYWx1ZSBjYWxsR2V0dGVyKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpOwotdm9pZCBjYWxs
U2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpT
VmFsdWUsIEVDTUFNb2RlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FsbFNldHRlcihFeGVj
U3RhdGUqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBFQ01B
TW9kZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAxOTQxMTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYg
KzQ1LDcgQEAKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1
ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMTk0MTEyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzcsNiArMjc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4
ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CiAKICAgICB2b2lk
IHB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OworICAgIHZvaWQgcHV0SW50ZXJuYWwoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHB1dFRvUHJp
bWl0aXZlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwdXRUb1ByaW1pdGl2ZUJ5SW5kZXgoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93
KTsKICAgICB2b2lkIHB1dEJ5SW5kZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
LCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTk0MTEyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgor
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNzUxLDYgKzc1MiwyNCBAQCBpbmxpbmUgdm9p
ZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAgYXNDZWxsKCktPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5wdXQoYXNDZWxsKCksIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNWYWx1ZTo6cHV0SW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgaWYgKFVOTElLRUxZKCFpc0NlbGwoKSkpIHsKKyAg
ICAgICAgcHV0VG9QcmltaXRpdmUoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSlNDZWxsKiBjZWxsID0gYXNDZWxsKCk7CisgICAg
YXV0byBwdXRNZXRob2QgPSBjZWxsLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHV0OworICAg
IGlmIChMSUtFTFkocHV0TWV0aG9kID09IEpTT2JqZWN0OjpwdXQpKSB7CisgICAgICAgIEpTT2Jq
ZWN0OjpwdXRJbnRlcm5hbChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFB1dFByb3BlcnR5U2xvdCBvdGhlclNsb3Qg
PSBzbG90OworICAgIHB1dE1ldGhvZChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBv
dGhlclNsb3QpOworICAgIHNsb3QgPSBvdGhlclNsb3Q7Cit9CisKIGlubGluZSB2b2lkIEpTVmFs
dWU6OnB1dEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFpc0Nl
bGwoKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDE5NDExMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDgxICszNzIsNyBAQCBib29sIEpTT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAvLyBFQ01BIDguNi4yLjIKIHZvaWQgSlNP
YmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewotICAg
IEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNT
RVJUKHZhbHVlKTsKLSAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgCi0gICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVk
IGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVydHkgbmFtZXMgdGhhdCBhcHBl
YXIgbGlrZQotICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZlciBsb29rIGluIHRoZSBuYW1l
ZCBwcm9wZXJ0eSBzdG9yYWdlLgotICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKLSAgICAgICAgcHV0QnlJbmRleCh0aGlzT2JqZWN0
LCBleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1vZGUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBz
ZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgotICAgIEpTVmFsdWUgcHJv
dG90eXBlOwotICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLnVu
ZGVyc2NvcmVQcm90bykgewotICAgICAgICBmb3IgKEpTT2JqZWN0KiBvYmogPSB0aGlzT2JqZWN0
OyAhb2JqLT5zdHJ1Y3R1cmUodm0pLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGll
c0V4Y2x1ZGluZ1Byb3RvKCk7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKLSAgICAgICAg
ICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7Ci0gICAgICAgICAgICBpZiAocHJvdG90
eXBlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwg
cHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkK
LSAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFk
b25seVByb3BlcnR5V3JpdGVFcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEpTT2JqZWN0KiBvYmo7Ci0gICAgZm9y
IChvYmogPSB0aGlzT2JqZWN0OyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKLSAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
b2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKLSAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwotICAgICAgICAgICAgICAg
IGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgICAgICBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9iai0+
Z2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIoKSkg
ewotICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywgY2VsbCwgZ3MsIHZhbHVlLCBzbG90
LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGUpOwotICAgICAgICAg
ICAgICAgIGlmICghdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQotICAg
ICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGdz
LmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKLSAgICAgICAgICAgICAgICBjYWxsQ3VzdG9tU2V0
dGVyKGV4ZWMsIGdzLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZhbHVlKTsKLSAgICAgICAgICAg
ICAgICBzbG90LnNldEN1c3RvbVByb3BlcnR5KG9iaiwganNDYXN0PEN1c3RvbUdldHRlclNldHRl
cio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCghKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikp
OwotCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHByb3BlcnR5IG9uIHRo
ZSBvYmplY3Qgb3Igb25lIG9mIGl0cyAKLSAgICAgICAgICAgIC8vIHByb3RvdHlwZXMgaXQgc2hv
dWxkIGJlIHJlcGxhY2VkLCBzbyBicmVhayBoZXJlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gb2JqLT5jbGFzc0luZm8oKTsK
LSAgICAgICAgaWYgKGluZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKCkp
IHsKLSAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBvYmotPmZp
bmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFvYmotPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB8fCAhKGVudHJ5LT5hdHRyaWJ1dGVzKCkg
JiBCdWlsdGluT3JGdW5jdGlvbk9yQWNjZXNzb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1
dEVudHJ5KGV4ZWMsIGVudHJ5LCBvYmosIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7Ci0gICAg
ICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0g
dGhpc09iamVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRN
b2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkgJiYgc2xvdC5pc1N0cmlj
dE1vZGUoKSkKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwotICAgIHJldHVybjsKKyAgICBwdXRJ
bnRlcm5hbChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAogdm9p
ZCBKU09iamVjdDo6cHV0QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxOTQx
MTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAsNyArMTQwLDkgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS5nZXQodGhpcyktPnZlY3Rvckxlbmd0aCgpOwog
ICAgIH0KLSAgICAgICAgCisgICAgCisgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoSlNDZWxs
KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
KyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAg
ICAgICAgIApAQCAtODU2LDcgKzg1OCw3IEBAIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVu
c2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBTdHJ1Y3R1cmUmKTsKIAot
ICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBmaW5kUHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlO
YW1lKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBIYXNoVGFibGVWYWx1ZSog
ZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIAogICAg
IHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSos
IGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3BlcnR5RGVzY3JpcHRvciYgb2xkKTsKICAg
ICAgICAgCkBAIC0xMDkwLDEzICsxMDkyLDIzIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVj
dDo6aW5saW5lR2V0T3cKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSlNWYWx1ZSB2YWx1
ZSA9IGdldERpcmVjdChvZmZzZXQpOwotICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgIGZpbGxHZXR0
ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgdmFsdWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7Ci0gICAgZWxz
ZSBpZiAoc3RydWN0dXJlLmhhc0N1c3RvbUdldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1
ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKQotICAgICAgICBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVy
dHlTbG90KHNsb3QsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmUpOwotICAgIGVsc2UKLSAg
ICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBhdHRyaWJ1dGVzLCB2YWx1ZSwgb2Zmc2V0KTsKLQor
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICBBU1NFUlQodmFsdWUpOworICAgICAg
ICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsKKyAgICAgICAgSlNUeXBlIHR5cGUgPSBj
ZWxsLT50eXBlKCk7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdldHRl
clNldHRlclR5cGU6CisgICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgQ3VzdG9tR2V0dGVyU2V0dGVyVHlwZToKKyAgICAgICAgICAgIGZpbGxDdXN0b21H
ZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgdmFsdWUsIGF0dHJpYnV0ZXMsIHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNsb3Quc2V0VmFsdWUodGhpcywgYXR0
cmlidXRlcywgdmFsdWUsIG9mZnNldCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTExODcs
NyArMTE5OSw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0K
IAogdGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9kZT4KLWlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
K0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBB
U1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3Ip
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVy
aWNAd2Via2l0Lm9yZykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gK
KyNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVk
ZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJMb29r
dXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEVDTUEgOC42LjIuMgorQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0OjpwdXRJbnRlcm5hbChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFs
dWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0
LiBUaGlzIGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVy
dHkgbmFtZXMgdGhhdCBhcHBlYXIgbGlrZQorICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZl
ciBsb29rIGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIGlmIChPcHRpb25hbDx1
aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgcHV0
QnlJbmRleCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0
cmljdE1vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ2hlY2sg
aWYgdGhlcmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFp
bgorICAgIEpTVmFsdWUgcHJvdG90eXBlOworICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgeworICAgICAgICBmb3IgKEpTT2JqZWN0
KiBvYmogPSB0aGlzT2JqZWN0OyAhb2JqLT5zdHJ1Y3R1cmUodm0pLT5oYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCk7IG9iaiA9IGFzT2JqZWN0KHByb3Rv
dHlwZSkpIHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CisgICAg
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgMCwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5pc1N0cmljdE1v
ZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEpTT2Jq
ZWN0KiBvYmo7CisgICAgZm9yIChvYmogPSB0aGlzT2JqZWN0OyA7IG9iaiA9IGFzT2JqZWN0KHBy
b3RvdHlwZSkpIHsKKyAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcyk7CisgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNl
cHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3Qp
OworICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
SlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CisgICAgICAgICAgICBpZiAoZ3Mu
aXNHZXR0ZXJTZXR0ZXIoKSkgeworICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywgY2Vs
bCwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmlj
dE1vZGUpOworICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlz
RGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRl
cihvYmosIG9mZnNldCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGdzLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYWxsQ3VzdG9tU2V0dGVyKGV4ZWMsIGdzLCBvYmosIHNsb3QudGhpc1ZhbHVlKCksIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBzbG90LnNldEN1c3RvbVByb3BlcnR5KG9iaiwganNDYXN0
PEN1c3RvbUdldHRlclNldHRlcio+KGdzLmFzQ2VsbCgpKS0+c2V0dGVyKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVCghKGF0dHJp
YnV0ZXMgJiBBY2Nlc3NvcikpOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGV4aXN0
aW5nIHByb3BlcnR5IG9uIHRoZSBvYmplY3Qgb3Igb25lIG9mIGl0cyAKKyAgICAgICAgICAgIC8v
IHByb3RvdHlwZXMgaXQgc2hvdWxkIGJlIHJlcGxhY2VkLCBzbyBicmVhayBoZXJlLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0g
b2JqLT5jbGFzc0luZm8oKTsKKyAgICAgICAgaWYgKGluZm8tPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1
ZSogZW50cnkgPSBvYmotPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFvYmotPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSB8fCAhKGVu
dHJ5LT5hdHRyaWJ1dGVzKCkgJiBCdWlsdGluT3JGdW5jdGlvbk9yQWNjZXNzb3IpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHB1dEVudHJ5KGV4ZWMsIGVudHJ5LCBvYmosIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByb3RvdHlwZSA9IG9iai0+
cHJvdG90eXBlKCk7CisgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUo
dm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVy
dHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOworICAg
IHJldHVybjsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU09iamVjdElu
bGluZXNfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267475</attachid>
            <date>2015-12-16 11:17:57 -0800</date>
            <delta_ts>2015-12-16 12:50:25 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50811</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE1LTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBKU09iamVjdDo6cHV0IHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgYmVuY2htYXJrIGNhbGxl
ZCBkeW5iZW5jaCwgd2hpY2gganVzdCB1c2VzIHRoZSBDKysgQVBJIHRvIGNyZWF0ZSwgbW9kaWZ5
LCBhbmQKKyAgICAgICAgcXVlcnkgb2JqZWN0cy4gVGhpcyBhbHNvIGFkZHMgc29tZSBvcHRpbWl6
YXRpb25zIHRvIG1ha2UgdGhlIEpTT2JqZWN0OjpwdXQgY29kZSBmYXN0ZXIgYnkgbWFraW5nCisg
ICAgICAgIGl0IGlubGluYWJsZSBpbiBwbGFjZXMgdGhhdCByZWFsbHkgbmVlZCB0aGUgcGVyZm9y
bWFuY2UsIGxpa2UgSklUT3BlcmF0aW9ucyBhbmQgTExJbnRTbG93UGF0aHMuCisKKyAgICAgICAg
VGhpcyBpcyB1cCB0byBhIDIwJSBpbXByb3ZlbWVudCBmb3IgSlNPYmplY3Q6OnB1dCBjYWxscyB0
aGF0IGdldCBpbmxpbmVkIGFsbCB0aGUgd2F5IChsaWtlIGZyb20KKyAgICAgICAgSklUT3BlcmF0
aW9ucyBhbmQgdGhlIG5ldyBiZW5jaG1hcmspIGFuZCBpdCdzIGFsc28gYSBzcGVlZC11cCwgYWxi
ZWl0IGEgc21hbGxlciBvbmUsIGZvcgorICAgICAgICBKU09iamVjdDo6cHV0IGNhbGxzIHRoYXQg
ZG9uJ3QgZ2V0IGlubGluZWQgKGkuZS4gdGhvc2UgZnJvbSB0aGUgRE9NIGFuZCB0aGUgSlNDIEMr
KyBsaWJyYXJ5IGNvZGUpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkeW5iZW5jaC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpiZW5jaG1hcmtJbXBsKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGppdC9DYWxs
RnJhbWVTaHVmZmxlcjMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2
NC5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGxsaW50
L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFU
SF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoSlNDOjpD
bGFzc0luZm86Omhhc1N0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29s
ZUNsaWVudC5jcHA6CisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmFkZEVycm9ySW5mb0FuZEdl
dEJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRl
ci5oOgorICAgICAgICAoSlNDOjphc0dldHRlclNldHRlcik6CisgICAgICAgICogcnVudGltZS9K
U0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgICog
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXQp
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKwogMjAxNS0xMi0xNiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmsgYXJvdW5kIGEgYnVn
IGluIExMVk0gYnkgZmxpcHBpbmcgdGhlIHVuaWZpY2F0aW9uIG9yZGVyCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9keW5iZW5jaC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZHluYmVuY2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiVk0uaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIHsKKworU3RhdGljTG9jayBjcmFzaExvY2s7Citjb25zdCBjaGFyKiBuYW1l
RmlsdGVyOwordW5zaWduZWQgcmVxdWVzdGVkSXRlcmF0aW9uQ291bnQ7CisKKyNkZWZpbmUgQ0hF
Q0soeCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hM
b2NrLmxvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFjaz4KK05FVkVSX0lOTElORSB2
b2lkIGJlbmNobWFya0ltcGwoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgaXRlcmF0aW9uQ291
bnQsIGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobmFtZUZpbHRlciAmJiAh
c3RyY2FzZXN0cihuYW1lLCBuYW1lRmlsdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50KQorICAgICAgICBpdGVyYXRpb25Db3VudCA9IHJlcXVl
c3RlZEl0ZXJhdGlvbkNvdW50OworICAgIAorICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGNhbGxiYWNrKGl0ZXJhdGlvbkNvdW50KTsKKyAg
ICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGRh
dGFMb2cobmFtZSwgIjogIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMuXG4iKTsKK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBpZiAoYXJnYyA+PSAyKSB7CisgICAgICAgIGlmIChhcmd2WzFdWzBdID09ICctJykgewor
ICAgICAgICAgICAgZGF0YUxvZygiVXNhZ2U6IGR5bmJlbmNoIFs8ZmlsdGVyPiBbPGl0ZXJhdGlv
biBjb3VudD5dXVxuIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAg
ICAgIG5hbWVGaWx0ZXIgPSBhcmd2WzFdOworCisgICAgICAgIGlmIChhcmdjID49IDMpIHsKKyAg
ICAgICAgICAgIGlmIChzc2NhbmYoYXJndlsyXSwgIiV1IiwgJnJlcXVlc3RlZEl0ZXJhdGlvbkNv
dW50KSAhPSAxKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ291bGQgbm90IHBhcnNlIGl0
ZXJhdGlvbiBjb3VudCAiLCBhcmd2WzJdLCAiXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXVEY6OmluaXRp
YWxpemVNYWluVGhyZWFkKCk7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAg
ICBWTSogdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICB7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPQorICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSkpOworICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKworICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImYiKTsKKyAg
ICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJn
Iik7CisKKyAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUgPQorICAgICAgICAgICAg
SlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5
bmFtaWMgZ2V0IGJ5IGlkOgorICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6
OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJ
ZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRGLCBqc051bWJl
cig0MiksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Cisg
ICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRHLCBqc051bWJlcig0Myks
IHNsb3QpOworICAgICAgICB9CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAi
Tm9uIFN0cmljdCBEeW5hbWljIEdldCBCeSBJZCIsCisgICAgICAgICAgICAxMDAwMDAwLAorICAg
ICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgeworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0LmdldChleGVjLCBpZGVudEYpOworICAgICAg
ICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gb2JqZWN0LmdldChleGVjLCBpZGVudEcpOworICAgICAgICAgICAg
ICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDMpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5
IGlkIHJlcGxhY2U6CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0s
IG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAg
ICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3Qp
OworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBv
YmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAg
ICAgICB9CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBE
eW5hbWljIFB1dCBCeSBJZCBSZXBsYWNlIiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisgICAgICAg
ICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9w
ZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElu
dGVybmFsKGV4ZWMsIGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8g
Tm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCB0cmFuc2l0aW9uIHdpdGggb2JqZWN0IGFsbG9j
YXRpb246CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBE
eW5hbWljIEFsbG9jYXRpb24gYW5kIFB1dCBCeSBJZCBUcmFuc2l0aW9uIiwKKyAgICAgICAgICAg
IDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVh
dGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1
dEludGVybmFsKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0
QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywg
aWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5
bmFtaWMgZ2V0IGJ5IGlkIHdpdGggZHluYW1pYyBzdG9yZSBjb250ZXh0OgorICAgICAgICBvYmpl
Y3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAg
ICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAg
ICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwg
c2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhl
YywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIGJlbmNo
bWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIEdldCBCeSBJZCBXaXRo
IER5bmFtaWMgU3RvcmUgQ29udGV4dCIsCisgICAgICAgICAgICAxMDAwMDAwLAorICAgICAgICAg
ICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgeworICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0LmdldChleGVjLCBpZGVudEYpOworICAgICAgICAgICAg
ICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gb2JqZWN0LmdldChleGVjLCBpZGVudEcpOworICAgICAgICAgICAgICAgICAg
ICBDSEVDSyhyZXN1bHQgPT0ganNOdW1iZXIoNDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJl
cGxhY2Ugd2l0aCBkeW5hbWljIHN0b3JlIGNvbnRleHQ6CisgICAgICAgIG9iamVjdCA9IEpTRmlu
YWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAgICAg
b2JqZWN0LnB1dEludGVybmFsKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAg
ICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmpl
Y3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBpZGVudEcs
IGpzTnVtYmVyKDQzKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgK
KyAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFtaWMgUHV0IEJ5IElkIFJlcGxhY2UgV2l0aCBE
eW5hbWljIFN0b3JlIENvbnRleHQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAg
IFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbnRlcm5hbChleGVjLCBp
ZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJ
bnRlcm5hbChleGVjLCBpZGVudEcsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8v
IE5vbi1zdHJpY3QgZHluYW1pYyBwdXQgYnkgaWQgdHJhbnNpdGlvbiB3aXRoIG9iamVjdCBhbGxv
Y2F0aW9uIHdpdGggZHluYW1pYyBzdG9yZSBjb250ZXh0OgorICAgICAgICBiZW5jaG1hcmtJbXBs
KAorICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1pYyBBbGxvY2F0aW9uIGFuZCBQdXQgQnkg
SWQgVHJhbnNpdGlvbiBXaXRoIER5bmFtaWMgU3RvcmUgQ29udGV4dCIsCisgICAgICAgICAgICAx
MDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgeworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRl
KCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhlYywgaWRlbnRGLCBqc051
bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW50ZXJuYWwoZXhl
YywgaWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBjcmFzaExvY2su
bG9jaygpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgK
KwkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
QEAgLTQ4Miw2ICs0ODMsMTAgQEAKIAkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTE5RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdE
IC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTE5RDI3MTU4NTY3NzAwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgKi87
IH07CiAJCTBGOTMyNzREMUMxRjY2QUEwMENGNjU2NCAvKiBHUFJJbmZvLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzRDMUMxRjY2QUEwMENG
NjU2NCAvKiBHUFJJbmZvLmNwcCAqLzsgfTsKKwkJMEY5MzI3NTIxQzIwQkNCQTAwQ0Y2NTY0IC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRjkzMjc1MzFDMjBCQ0JBMDBDRjY1NjQgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEY5MzI3NUIxQzIwQkNERjAwQ0Y2NTY0IC8qIGR5bmJlbmNoLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVBMUMyMEJD
REYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgKi87IH07CisJCTBGOTMyNzVGMUMyMUVGN0YwMENG
NjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGlu
ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTMxNENBN0RDMTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY5MzMyOUUxNENBN0RDNTAwODVG
M0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkz
MzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYg
LyogR2V0QnlJZFN0YXR1cy5jcHAgKi87IH07CkBAIC0yMDU3LDYgKzIwNjIsMTMgQEAKIC8qIEVu
ZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLworCQkwRjkzMjc1QzFDMjBCRjNBMDBDRjY1NjQgLyogUEJYQ29udGFpbmVy
SXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29u
dGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY5MzI3
NEUxQzIwQkNCQTAwQ0Y2NTY0OworCQkJcmVtb3RlSW5mbyA9IGR5bmJlbmNoOworCQl9OwogCQkw
RkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewog
CQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtMjU5NCw2ICsy
NjA2LDkgQEAKIAkJMEY5MTlEMjMxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hwb2ludC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQyNzE1ODU2NzcwMDA0QTRFN0QgLyogU3ltYm9sVGFibGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sVGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMjc0QzFDMUY2NkFBMDBDRjY1NjQg
LyogR1BSSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFJJ
bmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzI3NTkxQzIwQkNCQTAw
Q0Y2NTY0IC8qIGR5bmJlbmNoICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBkeW5iZW5jaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
KwkJMEY5MzI3NUExQzIwQkNERjAwQ0Y2NTY0IC8qIGR5bmJlbmNoLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGR5bmJlbmNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09iamVjdElubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENh
bGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTQx
NENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRCeUlkU3RhdHVzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1Miw2ICs0MjY3LDE1IEBACiAvKiBFbmQgUEJYRmls
ZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KKwkJMEY5MzI3NTExQzIwQkNCQTAwQ0Y2NTY0IC8qIEZyYW1ld29ya3MgKi8g
PSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjkzMjc1MjFDMjBCQ0JBMDBDRjY1
NjQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRjkzMjc1
MzFDMjBCQ0JBMDBDRjY1NjQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CisJCX07CiAJCTBGQ0VGQUIzMTgwNUQ2MTYwMDQ3MkNFNCAvKiBGcmFtZXdvcmtzICovID0gewog
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpAQCAtNDMzOSw2ICs0MzYzLDcgQEAKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBC
QUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVz
dGIzICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAor
CQkJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywKIAkJCSk7CiAJCQlu
YW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNDM0OCwxNCAr
NDM3MywxNSBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogSmF2YVNjcmlwdENvcmUg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTY1MjlGQjMw
MThCMkQ2MzkwMEM2MTEwMiAvKiBnZW5lcmF0ZS1ieXRlY29kZS1maWxlcyAqLywKIAkJCQk4NjA0
RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdlTG9nICovLAorCQkJCUY2OEVCQjhDMDI1NUQ0
QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKIAkJCQlGNjkyQTg1NDAyNTU1OTdEMDFGRjYwRjcg
LyogY3JlYXRlX2hhc2hfdGFibGUgKi8sCiAJCQkJQTcxOEY4MjExMTc4RUI0QjAwMjQ2NUE3IC8q
IGNyZWF0ZV9yZWdleF90YWJsZXMgKi8sCi0JCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8q
IGpzYy5jcHAgKi8sCi0JCQkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3IC8qIGNvbmZpZy5oICov
LAotCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5o
ICovLAogCQkJCTkzN0I2M0NDMDlFNzY2RDIwMEE2NzFERCAvKiBEZXJpdmVkU291cmNlcy5tYWtl
ICovLAorCQkJCTBGOTMyNzVBMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgKi8sCisJ
CQkJNjUyOUZCMzAxOEIyRDYzOTAwQzYxMTAyIC8qIGdlbmVyYXRlLWJ5dGVjb2RlLWZpbGVzICov
LAorCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5o
ICovLAorCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUE3
QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5ICovLAog
CQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCiAJCQkJOTY4OENCMTIwRUQx
MkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKQEAgLTQzNjQsOSArNDM5MCwxMiBAQAogCQkJ
CUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLywKIAkJCQk5NjlBMDc4RjBF
RDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCiAJCQkJN0UzOUQ4MUQwRUMzOEVGQTAwM0FG
MTFBIC8qIGJ5dGVjb21waWxlciAqLywKKwkJCQkxQzkwNTEzRTBCQTlFODgzMDA4MUU5RDAgLyog
Q29uZmlndXJhdGlvbnMgKi8sCiAJCQkJMTQ4MERCOUEwRERDMjIzMTAwM0NGREYyIC8qIGRlYnVn
Z2VyICovLAorCQkJCTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMg
Ki8sCiAJCQkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLywKIAkJCQkwRkY0Mjcy
RTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1ibGVyICovLAorCQkJCTA4NjdENjlBRkU4NDAy
OEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICovLAogCQkJCTBGRUEwOUZDMTcwNTEzN0YwMEJCNzIy
QyAvKiBmdGwgKi8sCiAJCQkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8sCiAJ
CQkJQTVCQTE1REYxODIzNDA5MjAwQTgyRTY5IC8qIGluc3BlY3RvciAqLywKQEAgLTQzNzUsMTkg
KzQ0MDQsMTYgQEAKIAkJCQkwRjQ2ODA5QzE0QkE3RjREMDBCRkUyNzIgLyogbGxpbnQgKi8sCiAJ
CQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8qIGxsdm0gKi8sCiAJCQkJN0UzOUQ4MzcwRUMz
QTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKKwkJCQkwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIg
LyogUHJvZHVjdHMgKi8sCiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVy
ICovLAogCQkJCTk5RTQ1QTBDMThBMDFFOTMwMDI2RDg4RiAvKiByZXBsYXkgKi8sCisJCQkJOTMy
RkMzQzIwODI0QkI3MDAwNUIzQzc1IC8qIFJlc291cmNlcyAqLywKIAkJCQk3RUY2RTBCQjBFQjdB
MUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKKwkJCQk5OTU5RTkyNTFCRDE3RjFFMDAxQUE0MTMg
LyogU2NyaXB0cyAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2MDA0ODAyNTUgLyogdGVzdHMgKi8s
CiAJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRvb2xzICovLAogCQkJCTdCOThEMTMz
MUI2MENEMUUwMDIzQjFBNCAvKiB3YXNtICovLAogCQkJCTg2RUFDNDhDMEY5M0U4QjkwMDhFQzk0
OCAvKiB5YXJyICovLAotCQkJCTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1NCAvKiBEZXJpdmVkIFNv
dXJjZXMgKi8sCi0JCQkJOTMyRkMzQzIwODI0QkI3MDAwNUIzQzc1IC8qIFJlc291cmNlcyAqLywK
LQkJCQk5OTU5RTkyNTFCRDE3RjFFMDAxQUE0MTMgLyogU2NyaXB0cyAqLywKLQkJCQkwODY3RDY5
QUZFODQwMjhGQzAyQUFDMDcgLyogRnJhbWV3b3JrcyAqLywKLQkJCQkwMzQ3NjhERkZGMzhBNTA0
MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCi0JCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8q
IENvbmZpZ3VyYXRpb25zICovLAogCQkJKTsKIAkJCW5hbWUgPSBKYXZhU2NyaXB0Q29yZTsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01NTIzLDkgKzU1NDksOSBAQAogCQkJCUUxNzg2
MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCiAJCQkJRTM1
RTAzNUQxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5j
cHAgKi8sCiAJCQkJRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbk9iamVjdC5oICovLAorCQkJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQ4
QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MTZBcnJheS5o
ICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQzMkFycmF5LmggKi8sCi0J
CQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLAogCQkJCUJDOUJC
OTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzEx
NjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCUExQjlF
MjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3IuY3BwICovLApAQCAtNTYxNCw5ICs1
NjQwLDkgQEAKIAkJCQlBNTk0NTU5MTE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3RE
ZWJ1Z2dhYmxlLmggKi8sCiAJCQkJQkM3NTZGQzYwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFs
T2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlCQzc1NkZDNzBFMjAzMUIyMDBERTdEMTIgLyog
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywKKwkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQkwRjJCNjZDQTE3QjZCNUFCMDBBN0FFM0YgLyog
SlNJbnQxNkFycmF5LmggKi8sCiAJCQkJMEYyQjY2Q0IxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50
MzJBcnJheS5oICovLAotCQkJCTBGMkI2NkM5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDhBcnJh
eS5oICovLAogCQkJCUUzM0Y1MDdFMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlz
ZS5jcHAgKi8sCiAJCQkJRTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9t
aXNlLmggKi8sCiAJCQkJRTMzRjUwNzYxQjg0MjI1NzAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9t
aXNlQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTY0Nyw2ICs1NjczLDcgQEAKIAkJCQlBNzI3MDA3
NzBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5oICovLAogCQkJCUJDMjJBMzk4MEUx
NkUxNDgwMEFGMjFDOCAvKiBKU09iamVjdC5jcHAgKi8sCiAJCQkJQkMyMkEzOTkwRTE2RTE0ODAw
QUYyMUM4IC8qIEpTT2JqZWN0LmggKi8sCisJCQkJMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0IC8q
IEpTT2JqZWN0SW5saW5lcy5oICovLAogCQkJCUE3Rjk5MzVFMEZENzMyNTEwMEEwQjJEMCAvKiBK
U09OT2JqZWN0LmNwcCAqLywKIAkJCQlBN0Y5OTM1RDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9i
amVjdC5oICovLAogCQkJCTdDMTg0RTE4MTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuY3Bw
ICovLApAQCAtNTY5NCwxMCArNTcyMSwxMCBAQAogCQkJCTUzRjI1NkUxMUI4N0UyODAwMEI0Qjc2
OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLywKIAkJCQk1MzkxN0U3QzFCNzkx
MTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovLAogCQkJCTY1MDdE
Mjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8sCi0JCQkJMEYyQjY2RDQxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLywKLQkJCQkwRjJCNjZENTE3QjZCNUFC
MDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICovLAogCQkJCTBGMkI2NkQyMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKIAkJCQkwRjJCNjZEMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAorCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQlBN0NBM0FFMTE3REE0MUFFMDA2NTM4QUYgLyogSlNX
ZWFrTWFwLmNwcCAqLywKIAkJCQlBN0NBM0FFMjE3REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFw
LmggKi8sCiAJCQkJNzA5RkI4NjExQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgKi8s
CkBAIC01ODcxLDExICs1ODk4LDExIEBACiAJCQkJMEYyRDRERTAxOTgzMkQ5MTAwN0Q0QjE5IC8q
IFR5cGVQcm9maWxlckxvZy5oICovLAogCQkJCTBGMkQ0REUzMTk4MzJEOTEwMDdENEIxOSAvKiBU
eXBlU2V0LmNwcCAqLywKIAkJCQkwRjJENERFNDE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5o
ICovLAorCQkJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCisJ
CQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJ
CQkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQxNkFycmF5LmggKi8sCiAJCQkJODY2
NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhGcmFjdGlvbi5oICovLAogCQkJCUE3
QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjMw
MTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8sCi0JCQkJQTdBOEFGMzExN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJMEZFMDUwMjMxQUE5MDk1
NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgKi8sCiAJCQkJMEZFMDUwMjQxQUE5MDk1NjAwRDMz
QjMzIC8qIFZhck9mZnNldC5oICovLAogCQkJCUUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBW
TS5jcHAgKi8sCkBAIC03NzUyLDYgKzc3NzksNyBAQAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFF
NzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAz
MUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3
REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5MzI3
NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2lu
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTUwLDYgKzc5NzgsMjIgQEAKIC8qIEVuZCBQQlhIZWFk
ZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0
aW9uICovCisJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLyA9IHsKKwkJ
CWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRjkz
Mjc1NDFDMjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhO
YXRpdmVUYXJnZXQgImR5bmJlbmNoIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGOTMy
NzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovLAorCQkJCTBGOTMyNzUxMUMyMEJDQkEw
MENGNjU2NCAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkp
OworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSBkeW5iZW5jaDsKKwkJCXBy
b2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRjkzMjc1OTFDMjBC
Q0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUu
cHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyog
bGx2bUZvckpTQyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAwRkNFRkFCNzE4MDVENjE2MDA0NzJDRTQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxsdm1Gb3JKU0MiICovOwpAQCAtODE0
MCw2ICs4MTg0LDcgQEAKIAkJCQk2NTExMjJGNzE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4
cCAqLywKIAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVE
NkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAorCQkJCTBGOTMyNzRFMUMy
MEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJv
amVjdCBzZWN0aW9uICovCkBAIC04Mzc2LDYgKzg0MjEsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNj
cmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFz
ZSBzZWN0aW9uICovCisJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovID0g
eworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5MzI3NUIxQzIwQkNERjAwQ0Y2NTY0IC8q
IGR5bmJlbmNoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkNFRkFCMjE4MDVENjE2MDA0NzJDRTQg
LyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTkyMzUsNiArOTI4OCwxMSBAQAogLyogRW5k
IFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVw
ZW5kZW5jeSBzZWN0aW9uICovCisJCTBGOTMyNzVEMUMyMEJGM0EwMENGNjU2NCAvKiBQQlhUYXJn
ZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRh
cmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLzsKKwkJCXRhcmdl
dFByb3h5ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKKwkJfTsKIAkJMEZDRUZBQkQxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0g
MEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi87CkBAIC05MzQxLDYgKzkz
OTksMzQgQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY5MzI3NTUx
QzIwQkNCQTAwQ0Y2NTY0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMw
MEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRjkzMjc1NjFDMjBCQ0JBMDBD
RjY1NjQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwor
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0Njcg
LyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
fTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRjkzMjc1NzFDMjBCQ0JBMDBDRjY1NjQg
LyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
YXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBU
b29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9Owor
CQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEY5MzI3NTgxQzIwQkNCQTAwQ0Y2NTY0IC8q
IFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRv
b2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJ
CQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZDRUZBQjgxODA1RDYxNjAwNDcyQ0U0IC8q
IERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4NjkwMDQ3MkNFNCAvKiBMTFZNRm9y
SlNDLnhjY29uZmlnICovOwpAQCAtOTc0Miw2ICs5ODI4LDE3IEBACiAJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOwogCQl9OworCQkwRjkzMjc1NDFDMjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImR5bmJlbmNoIiAqLyA9IHsKKwkJCWlz
YSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJ
CTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRjkzMjc1NjFDMjBC
Q0JBMDBDRjY1NjQgLyogUmVsZWFzZSAqLywKKwkJCQkwRjkzMjc1NzFDMjBCQ0JBMDBDRjY1NjQg
LyogUHJvZmlsaW5nICovLAorCQkJCTBGOTMyNzU4MUMyMEJDQkEwMENGNjU2NCAvKiBQcm9kdWN0
aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJ
CWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGQ0VGQUI3
MTgwNUQ2MTYwMDQ3MkNFNCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAibGx2bUZvckpTQyIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0
OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTk0
MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVy
NjQuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Nh
bGxGcmFtZVNodWZmbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCi0jaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNyBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgCiAgICAgSWRlbnRp
ZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSwgdHJ1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSkucHV0KGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CisgICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXRJbnRlcm5hbChleGVjLCBp
ZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTI2
MCw3ICsyNjAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAg
ICAgCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7
CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSwg
ZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0
SW50ZXJuYWwoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90
KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWRTdHJpYwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dEludGVybmFsKGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNz
VHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC0zMjIsNyAr
MzIyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdAogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVl
LmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKnZtKSA6IG51bGxwdHI7
ICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBi
YXNlVmFsdWUucHV0SW50ZXJuYWwoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKICAgICAKICAg
ICBpZiAoYWNjZXNzVHlwZSAhPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+YWNj
ZXNzVHlwZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMiw3ICs0MjIsNyBAQCBzdGF0aWMgdm9p
ZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Ns
b3dQYXRoID0gdHJ1ZTsKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgIGJhc2VWYWx1ZS5wdXQo
Y2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgIGJhc2VWYWx1ZS5wdXRJbnRl
cm5hbChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHN0YXRpYyB2b2lk
IGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZv
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjAsNyArNjIwLDcgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgIGlmIChwY1s4XS51LnB1dEJ5
SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKICAgICAgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+
cHV0RGlyZWN0KHZtLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOwogICAg
IGVsc2UKLSAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwgTExJTlRfT1BfQygzKS5q
c1ZhbHVlKCksIHNsb3QpOworICAgICAgICBiYXNlVmFsdWUucHV0SW50ZXJuYWwoZXhlYywgaWRl
bnQsIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBzbG90KTsKICAgICBMTElOVF9DSEVDS19FWENF
UFRJT04oKTsKICAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDE5NDE2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgc3RydWN0IENsYXNzSW5mbyB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQ
cm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0OwogCiAgICAgY29uc3QgSGFzaFRhYmxl
KiBzdGF0aWNQcm9wSGFzaFRhYmxlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25zb2xlQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb25zb2xl
Q2xpZW50LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0dGVyIG1fc2V0dGVy
OwogfTsKIAotdm9pZCBjYWxsQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgY3VzdG9t
R2V0dGVyU2V0dGVyLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUg
dmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWxsQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0
ZSosIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB0
aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAJKHJl
dmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNTAgKzEyOCw2IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9pbmRleDsKIH07CiAKLXN0YXRpYyBib29sIGFkZEVycm9ySW5mb0FuZEdl
dEJ5dGVjb2RlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU09iamVjdCogb2JqLCBi
b29sIHVzZUN1cnJlbnRGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCB1bnNpZ25lZCAmYnl0
ZWNvZGVPZmZzZXQpCi17Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJhY2UgPSBWZWN0
b3I8U3RhY2tGcmFtZT4oKTsKLQotICAgIGlmIChleGVjICYmIHN0YWNrVHJhY2UuaXNFbXB0eSgp
KQotICAgICAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1RyYWNlKTsKLQot
ICAgIGlmICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsKLQotICAgICAgICBBU1NFUlQoZXhlYyA9
PSB2bS50b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
Pmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+Z2xv
YmFsRXhlYygpKTsKLQotICAgICAgICBTdGFja0ZyYW1lKiBzdGFja0ZyYW1lOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIHN0YWNrRnJhbWUgPSAmc3RhY2tUcmFjZS5hdChpKTsKLSAgICAgICAgICAgIGlmIChz
dGFja0ZyYW1lLT5ieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgewotICAgICAgICAgICAgRmluZEZp
cnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMpOwotICAgICAg
ICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwotICAgICAgICAgICAgY2Fs
bEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwotICAgICAgICAgICAgdW5zaWduZWQg
c3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKLSAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0
ID0gc3RhY2tUcmFjZS5hdChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGluZTsKLSAgICAgICAgdW5zaWduZWQgY29sdW1u
OwotICAgICAgICBzdGFja0ZyYW1lLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4p
OwotICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGluZSwganNO
dW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIG9iai0+cHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVtbiksIFJlYWRP
bmx5IHwgRG9udERlbGV0ZSk7Ci0KLSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLT5zb3VyY2VVUkwu
aXNFbXB0eSgpKQotICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzdGFja0ZyYW1lLT5zb3VyY2VVUkwpLCBSZWFk
T25seSB8IERvbnREZWxldGUpOwotICAgIAotICAgICAgICBpZiAoIXVzZUN1cnJlbnRGcmFtZSkK
LSAgICAgICAgICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgICAgICBvYmotPnB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5zdGFja1RyYWNl
QXNTdHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0pOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgRXJy
b3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7CiAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2V0
dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcg
QEAgaW5saW5lIEdldHRlclNldHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYQogfQogCiBKU1ZhbHVl
IGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdldHRlclNldHRl
cik7Ci12b2lkIGNhbGxTZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdl
dHRlclNldHRlciwgSlNWYWx1ZSwgRUNNQU1vZGUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBj
YWxsU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIs
IEpTVmFsdWUsIEVDTUFNb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDE5NDE2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJWaWV3SW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlv
bklubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNsdWRlICJKU1By
b3h5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lv
biAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBnZXRQ
cm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25z
dDsKIAogICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0
UHJvcGVydHlTbG90Jik7CisgICAgdm9pZCBwdXRJbnRlcm5hbChFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgcHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQ
dXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHB1dFRvUHJpbWl0
aXZlQnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJv
b2wgc2hvdWxkVGhyb3cpOwogICAgIHZvaWQgcHV0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25l
ZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCShyZXZp
c2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCkBAIC03NTEsNiArNzUyLDI0
IEBAIGlubGluZSB2b2lkIEpTVmFsdWU6OnB1dChFeGVjU3RhdGUqIGV4ZWMKICAgICBhc0NlbGwo
KS0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPnB1dChhc0NlbGwoKSwgZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgc2xvdCk7CiB9CiAKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1ZhbHVlOjpwdXRJ
bnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWlz
Q2VsbCgpKSkgeworICAgICAgICBwdXRUb1ByaW1pdGl2ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBKU0NlbGwqIGNlbGwgPSBh
c0NlbGwoKTsKKyAgICBhdXRvIHB1dE1ldGhvZCA9IGNlbGwtPm1ldGhvZFRhYmxlKGV4ZWMtPnZt
KCkpLT5wdXQ7CisgICAgaWYgKExJS0VMWShwdXRNZXRob2QgPT0gSlNPYmplY3Q6OnB1dCkpIHsK
KyAgICAgICAgSlNPYmplY3Q6OnB1dEludGVybmFsKGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUHV0UHJvcGVydHlT
bG90IG90aGVyU2xvdCA9IHNsb3Q7CisgICAgcHV0TWV0aG9kKGNlbGwsIGV4ZWMsIHByb3BlcnR5
TmFtZSwgdmFsdWUsIG90aGVyU2xvdCk7CisgICAgc2xvdCA9IG90aGVyU2xvdDsKK30KKwogaW5s
aW5lIHZvaWQgSlNWYWx1ZTo6cHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBpZiAo
VU5MSUtFTFkoIWlzQ2VsbCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsODEgKzM3Miw3
IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgKIC8vIEVDTUEgOC42
LjIuMgogdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
IHNsb3QpCiB7Ci0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihj
ZWxsKTsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkg
fHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzT2JqZWN0KSk7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAgICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRo
aXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBu
YW1lcyB0aGF0IGFwcGVhciBsaWtlCi0gICAgLy8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxv
b2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9wdGlvbmFsPHVpbnQz
Ml90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAgICAgICBwdXRCeUlu
ZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0
TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBDaGVjayBpZiB0
aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCi0g
ICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSAhPSBleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIGZvciAoSlNPYmplY3QqIG9i
aiA9IHRoaXNPYmplY3Q7ICFvYmotPnN0cnVjdHVyZSh2bSktPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKTsgb2JqID0gYXNPYmplY3QocHJvdG90eXBl
KSkgewotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKLSAgICAgICAg
ICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXRo
aXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
byhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNP
YmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCAwLCBzbG90KQotICAgICAgICAgICAgICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgp
KQotICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgSlNPYmplY3Qq
IG9iajsKLSAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNPYmplY3QocHJvdG90
eXBlKSkgewotICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKLSAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBKU1Zh
bHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKLSAgICAgICAgICAgIGlmIChncy5pc0dl
dHRlclNldHRlcigpKSB7Ci0gICAgICAgICAgICAgICAgY2FsbFNldHRlcihleGVjLCBjZWxsLCBn
cywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9k
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0
aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9i
aiwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAg
IGNhbGxDdXN0b21TZXR0ZXIoZXhlYywgZ3MsIG9iaiwgc2xvdC50aGlzVmFsdWUoKSwgdmFsdWUp
OwotICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tUHJvcGVydHkob2JqLCBqc0Nhc3Q8Q3Vz
dG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIoKSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKCEoYXR0cmlidXRl
cyAmIEFjY2Vzc29yKSk7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gZXhpc3Rpbmcg
cHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAotICAgICAgICAgICAgLy8gcHJv
dG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIGJyZWFrIGhlcmUuCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjb25zdCBDbGFzc0luZm8qIGluZm8gPSBvYmot
PmNsYXNzSW5mbygpOwotICAgICAgICBpZiAoaW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25s
eVByb3BlcnRpZXMoKSkgewotICAgICAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBl
bnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoIW9iai0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpIHx8ICEoZW50cnkt
PmF0dHJpYnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0aW9uT3JBY2Nlc3NvcikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHV0RW50cnkoZXhlYywgZW50cnksIG9iaiwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgc2xvdCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90
b3R5cGUoKTsKLSAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSkt
PnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5h
bWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVj
dEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSAm
JiBzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgcmV0
dXJuOworICAgIHB1dEludGVybmFsKGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVj
dG9yTGVuZ3RoKCk7CiAgICAgfQotICAgICAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwdXRJ
bnRlcm5hbChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOworICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNo
b3VsZFRocm93KTsKICAgICAgICAgCkBAIC04NTYsNyArODU4LDcgQEAgcHJpdmF0ZToKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90
JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGZpbGxDdXN0
b21HZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFN0
cnVjdHVyZSYpOwogCi0gICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0eUhhc2hF
bnRyeShQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEhh
c2hUYWJsZVZhbHVlKiBmaW5kUHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lKSBjb25zdDsK
ICAgICAgICAgCiAgICAgdm9pZCBwdXRJbmRleGVkRGVzY3JpcHRvcihFeGVjU3RhdGUqLCBTcGFy
c2VBcnJheUVudHJ5KiwgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiwgUHJvcGVydHlEZXNjcmlw
dG9yJiBvbGQpOwogICAgICAgICAKQEAgLTEwOTAsMTMgKzEwOTIsMjMgQEAgQUxXQVlTX0lOTElO
RSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPdwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGlyZWN0KG9mZnNldCk7Ci0gICAgaWYgKHN0cnVjdHVyZS5o
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKLSAg
ICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCB2YWx1ZSwgYXR0cmlidXRlcywgb2Zm
c2V0KTsKLSAgICBlbHNlIGlmIChzdHJ1Y3R1cmUuaGFzQ3VzdG9tR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpICYmIHZhbHVlLmlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkpCi0gICAgICAgIGZpbGxDdXN0
b21HZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgdmFsdWUsIGF0dHJpYnV0ZXMsIHN0cnVjdHVyZSk7
Ci0gICAgZWxzZQotICAgICAgICBzbG90LnNldFZhbHVlKHRoaXMsIGF0dHJpYnV0ZXMsIHZhbHVl
LCBvZmZzZXQpOwotCisgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgIEFTU0VSVCh2
YWx1ZSk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworICAgICAgICBK
U1R5cGUgdHlwZSA9IGNlbGwtPnR5cGUoKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgR2V0dGVyU2V0dGVyVHlwZToKKyAgICAgICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0
eVNsb3Qoc2xvdCwgdmFsdWUsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBlOgorICAgICAgICAg
ICAgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChzbG90LCB2YWx1ZSwgYXR0cmlidXRlcywg
c3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2xvdC5zZXRW
YWx1ZSh0aGlzLCBhdHRyaWJ1dGVzLCB2YWx1ZSwgb2Zmc2V0KTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTE4Nyw3ICsxMTk5LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChF
eGVjU3RhdGUqIAogfQogCiB0ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQorQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQo
dmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRl
bkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3Qu
Y29tKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAyMDEyLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBF
cmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBKU09i
amVjdElubGluZXNfaAorI2RlZmluZSBKU09iamVjdElubGluZXNfaAorCisjaW5jbHVkZSAiRXJy
b3IuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
I2luY2x1ZGUgIkxvb2t1cC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gRUNNQSA4LjYuMi4y
CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnB1dEludGVybmFsKEpTQ2VsbCogY2VsbCwg
RXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlQodmFsdWUpOworICAgIEFTU0VSVCgh
SGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlz
T2JqZWN0KSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAKKyAgICAvLyBUcnkgaW5k
ZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBs
b2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCisgICAgLy8gdmFsaWQgaW5k
aWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCisgICAg
aWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkg
eworICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LnZhbHVlKCksIHZh
bHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUg
cHJvdG90eXBlIGNoYWluCisgICAgSlNWYWx1ZSBwcm90b3R5cGU7CisgICAgaWYgKHByb3BlcnR5
TmFtZSAhPSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7CisgICAgICAg
IGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXNPYmplY3Q7ICFvYmotPnN0cnVjdHVyZSh2bSktPmhh
c1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKTsgb2JqID0g
YXNPYmplY3QocHJvdG90eXBlKSkgeworICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90
b3R5cGUoKTsKKyAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWlu
TWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KQorICAgICAgICAgICAgICAgICAgICAmJiBz
bG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgSlNPYmplY3QqIG9iajsKKyAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2Jq
ID0gYXNPYmplY3QocHJvdG90eXBlKSkgeworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwor
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkgeworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVD
aGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmog
PT0gdGhpc09iamVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
CisgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAg
ICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7CisgICAgICAgICAgICAgICAgY2FsbFNl
dHRlcihleGVjLCBjZWxsLCBncywgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RN
b2RlIDogTm90U3RyaWN0TW9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNsb3Quc2V0
Q2FjaGVhYmxlU2V0dGVyKG9iaiwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ3MuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSkg
eworICAgICAgICAgICAgICAgIGNhbGxDdXN0b21TZXR0ZXIoZXhlYywgZ3MsIG9iaiwgc2xvdC50
aGlzVmFsdWUoKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHNsb3Quc2V0Q3VzdG9tUHJvcGVy
dHkob2JqLCBqc0Nhc3Q8Q3VzdG9tR2V0dGVyU2V0dGVyKj4oZ3MuYXNDZWxsKCkpLT5zZXR0ZXIo
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKCEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRo
ZXJlJ3MgYW4gZXhpc3RpbmcgcHJvcGVydHkgb24gdGhlIG9iamVjdCBvciBvbmUgb2YgaXRzIAor
ICAgICAgICAgICAgLy8gcHJvdG90eXBlcyBpdCBzaG91bGQgYmUgcmVwbGFjZWQsIHNvIGJyZWFr
IGhlcmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBDbGFz
c0luZm8qIGluZm8gPSBvYmotPmNsYXNzSW5mbygpOworICAgICAgICBpZiAoaW5mby0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0
IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IG9iai0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3Bl
cnR5TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW9iai0+c3RhdGljRnVuY3Rpb25zUmVp
ZmllZCgpIHx8ICEoZW50cnktPmF0dHJpYnV0ZXMoKSAmIEJ1aWx0aW5PckZ1bmN0aW9uT3JBY2Nl
c3NvcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcHV0RW50cnkoZXhlYywgZW50cnksIG9iaiwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJv
dG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKKyAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIXRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKKyAgICBpZiAoIXRo
aXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0
ZUVycm9yKSk7CisgICAgcmV0dXJuOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTT2JqZWN0SW5saW5lc19oCisK
</data>
<flag name="review"
          id="292517"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267484</attachid>
            <date>2015-12-16 12:50:25 -0800</date>
            <delta_ts>2015-12-16 13:07:14 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48702</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE1LTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBKU09iamVjdDo6cHV0IHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgYmVuY2htYXJrIGNhbGxl
ZCBkeW5iZW5jaCwgd2hpY2gganVzdCB1c2VzIHRoZSBDKysgQVBJIHRvIGNyZWF0ZSwgbW9kaWZ5
LCBhbmQKKyAgICAgICAgcXVlcnkgb2JqZWN0cy4gVGhpcyBhbHNvIGFkZHMgc29tZSBvcHRpbWl6
YXRpb25zIHRvIG1ha2UgdGhlIEpTT2JqZWN0OjpwdXQgY29kZSBmYXN0ZXIgYnkgbWFraW5nCisg
ICAgICAgIGl0IGlubGluYWJsZSBpbiBwbGFjZXMgdGhhdCByZWFsbHkgbmVlZCB0aGUgcGVyZm9y
bWFuY2UsIGxpa2UgSklUT3BlcmF0aW9ucyBhbmQgTExJbnRTbG93UGF0aHMuCisKKyAgICAgICAg
VGhpcyBpcyB1cCB0byBhIDIwJSBpbXByb3ZlbWVudCBmb3IgSlNPYmplY3Q6OnB1dCBjYWxscyB0
aGF0IGdldCBpbmxpbmVkIGFsbCB0aGUgd2F5IChsaWtlIGZyb20KKyAgICAgICAgSklUT3BlcmF0
aW9ucyBhbmQgdGhlIG5ldyBiZW5jaG1hcmspIGFuZCBpdCdzIGFsc28gYSBzcGVlZC11cCwgYWxi
ZWl0IGEgc21hbGxlciBvbmUsIGZvcgorICAgICAgICBKU09iamVjdDo6cHV0IGNhbGxzIHRoYXQg
ZG9uJ3QgZ2V0IGlubGluZWQgKGkuZS4gdGhvc2UgZnJvbSB0aGUgRE9NIGFuZCB0aGUgSlNDIEMr
KyBsaWJyYXJ5IGNvZGUpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkeW5iZW5jaC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpiZW5jaG1hcmtJbXBsKToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIGppdC9DYWxs
RnJhbWVTaHVmZmxlcjMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2
NC5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGxsaW50
L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFU
SF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5oOgorICAgICAgICAoSlNDOjpD
bGFzc0luZm86Omhhc1N0YXRpY1Byb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvQ29uc29s
ZUNsaWVudC5jcHA6CisgICAgICAgICogcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIuaDoKKyAg
ICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpFcnJvcklu
c3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmFkZEVycm9ySW5mb0FuZEdl
dEJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0dldHRlclNldHRl
ci5oOgorICAgICAgICAoSlNDOjphc0dldHRlclNldHRlcik6CisgICAgICAgICogcnVudGltZS9K
U0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgICog
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXQp
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dEJ5
SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKwogMjAxNS0xMi0xNiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFdvcmsgYXJvdW5kIGEgYnVn
IGluIExMVk0gYnkgZmxpcHBpbmcgdGhlIHVuaWZpY2F0aW9uIG9yZGVyCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9keW5iZW5jaC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZHluYmVuY2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIK
KyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiVk0uaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIHsKKworU3RhdGljTG9jayBjcmFzaExvY2s7Citjb25zdCBjaGFyKiBuYW1l
RmlsdGVyOwordW5zaWduZWQgcmVxdWVzdGVkSXRlcmF0aW9uQ291bnQ7CisKKyNkZWZpbmUgQ0hF
Q0soeCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3Jhc2hM
b2NrLmxvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShfX0ZJTEVfXywgX19MSU5FX18s
IFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsgXAorICAgICAgICBDUkFTSCgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFjaz4KK05FVkVSX0lOTElORSB2
b2lkIGJlbmNobWFya0ltcGwoY29uc3QgY2hhciogbmFtZSwgdW5zaWduZWQgaXRlcmF0aW9uQ291
bnQsIGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobmFtZUZpbHRlciAmJiAh
c3RyY2FzZXN0cihuYW1lLCBuYW1lRmlsdGVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50KQorICAgICAgICBpdGVyYXRpb25Db3VudCA9IHJlcXVl
c3RlZEl0ZXJhdGlvbkNvdW50OworICAgIAorICAgIGRvdWJsZSBiZWZvcmUgPSBtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGNhbGxiYWNrKGl0ZXJhdGlvbkNvdW50KTsKKyAg
ICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGRh
dGFMb2cobmFtZSwgIjogIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMuXG4iKTsKK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBpZiAoYXJnYyA+PSAyKSB7CisgICAgICAgIGlmIChhcmd2WzFdWzBdID09ICctJykgewor
ICAgICAgICAgICAgZGF0YUxvZygiVXNhZ2U6IGR5bmJlbmNoIFs8ZmlsdGVyPiBbPGl0ZXJhdGlv
biBjb3VudD5dXVxuIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAg
ICAgIG5hbWVGaWx0ZXIgPSBhcmd2WzFdOworCisgICAgICAgIGlmIChhcmdjID49IDMpIHsKKyAg
ICAgICAgICAgIGlmIChzc2NhbmYoYXJndlsyXSwgIiV1IiwgJnJlcXVlc3RlZEl0ZXJhdGlvbkNv
dW50KSAhPSAxKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ291bGQgbm90IHBhcnNlIGl0
ZXJhdGlvbiBjb3VudCAiLCBhcmd2WzJdLCAiXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBXVEY6OmluaXRp
YWxpemVNYWluVGhyZWFkKCk7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAg
ICBWTSogdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKyAgICB7CisgICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPQorICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIEpT
R2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051bGwoKSkpOworICAgICAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKworICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImYiKTsKKyAg
ICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKGV4ZWMsICJn
Iik7CisKKyAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1cmUgPQorICAgICAgICAgICAg
SlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5
bmFtaWMgZ2V0IGJ5IGlkOgorICAgICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6
OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJ
ZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIo
NDIpLCBzbG90KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAg
ICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcsIGpzTnVtYmVyKDQzKSwgc2xv
dCk7CisgICAgICAgIH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgKKyAgICAgICAgICAgICJOb24g
U3RyaWN0IER5bmFtaWMgR2V0IEJ5IElkIiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisgICAgICAg
ICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlkZW50Rik7CisgICAgICAgICAg
ICAgICAgICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0MikpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlkZW50Ryk7CisgICAgICAgICAgICAgICAg
ICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0MykpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBwdXQgYnkgaWQg
cmVwbGFjZToKKyAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp2bSwgb2Jq
ZWN0U3RydWN0dXJlKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgICAg
IG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAg
ICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVj
dCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3Qu
cHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKKyAgICAgICAgfQor
ICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1pYyBQ
dXQgQnkgSWQgUmVwbGFjZSIsCisgICAgICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZd
ICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2Us
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6
UHV0QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMs
IGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBk
eW5hbWljIHB1dCBieSBpZCB0cmFuc2l0aW9uIHdpdGggb2JqZWN0IGFsbG9jYXRpb246CisgICAg
ICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIEFsbG9j
YXRpb24gYW5kIFB1dCBCeSBJZCBUcmFuc2l0aW9uIiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisg
ICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmpl
Y3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcsIGpzTnVtYmVy
KGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworCisgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1pYyBnZXQgYnkgaWQg
d2l0aCBkeW5hbWljIHN0b3JlIGNvbnRleHQ6CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmpl
Y3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAgICAgb2JqZWN0
LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CisgICAgICAgIH0K
KyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxz
ZSk7CisgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIo
NDMpLCBzbG90KTsKKyAgICAgICAgfQorICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAg
ICAgIk5vbiBTdHJpY3QgRHluYW1pYyBHZXQgQnkgSWQgV2l0aCBEeW5hbWljIFN0b3JlIENvbnRl
eHQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaXRl
cmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVyYXRp
b25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG9i
amVjdC5nZXQoZXhlYywgaWRlbnRGKTsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0socmVzdWx0
ID09IGpzTnVtYmVyKDQyKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iamVjdC5n
ZXQoZXhlYywgaWRlbnRHKTsKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0socmVzdWx0ID09IGpz
TnVtYmVyKDQzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBsYWNlIHdpdGggZHluYW1pYyBz
dG9yZSBjb250ZXh0OgorICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZt
LCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhl
YywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIHsKKyAg
ICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAg
ICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcsIGpzTnVtYmVyKDQzKSwgc2xvdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgKKyAgICAgICAgICAgICJOb24gU3RyaWN0
IER5bmFtaWMgUHV0IEJ5IElkIFJlcGxhY2UgV2l0aCBEeW5hbWljIFN0b3JlIENvbnRleHQiLAor
ICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAgIFsmXSAodW5zaWduZWQgaXRlcmF0aW9u
Q291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVyYXRpb25Db3Vu
dDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1i
ZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBp
ZCB0cmFuc2l0aW9uIHdpdGggb2JqZWN0IGFsbG9jYXRpb24gd2l0aCBkeW5hbWljIHN0b3JlIGNv
bnRleHQ6CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBE
eW5hbWljIEFsbG9jYXRpb24gYW5kIFB1dCBCeSBJZCBUcmFuc2l0aW9uIFdpdGggRHluYW1pYyBT
dG9yZSBDb250ZXh0IiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVu
c2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBv
YmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5w
dXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgfQorCisgICAgY3Jhc2hMb2NrLmxvY2soKTsKKyAgICByZXR1cm4gMDsKK30KKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJ
CSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY5MzI3NUQxQzIwQkYzQTAwQ0Y2NTY0IC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8q
IFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00ODIsNiArNDgzLDEwIEBACiAJCTBGOTE5RDI2
MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQyMzE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hw
b2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQyNzE1ODU2NzcwMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQkwRjkzMjc0RDFDMUY2NkFBMDBDRjY1NjQg
LyogR1BSSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjkzMjc0QzFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgKi87IH07CisJCTBG
OTMyNzUyMUMyMEJDQkEwMENGNjU2NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIw
MEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY5MzI3NTMxQzIwQkNC
QTAwQ0Y2NTY0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGOTMyNzVCMUMyMEJDREYwMENG
NjU2NCAvKiBkeW5iZW5jaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkzMjc1QTFDMjBCQ0RGMDBDRjY1NjQgLyogZHluYmVuY2guY3BwICovOyB9
OworCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1RTFDMjFFRjdG
MDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi87IH07
CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTQxNENBN0RDMTAw
ODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUYxNENBN0RDQTAwODVGM0M2IC8qIEdldEJ5SWRT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwICovOyB9OwpAQCAt
MjA1Nyw2ICsyMDYyLDEzIEBACiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyog
QmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KKwkJMEY5MzI3NUMxQzIwQkYz
QTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7CisJCQlyZW1v
dGVHbG9iYWxJRFN0cmluZyA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NDsKKwkJCXJlbW90ZUlu
Zm8gPSBkeW5iZW5jaDsKKwkJfTsKIAkJMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENv
bnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsK
IAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0
IG9iamVjdCAqLzsKQEAgLTI1OTQsNiArMjYwNiw5IEBACiAJCTBGOTE5RDIzMTU4NTNDREUwMDRB
NEU3RCAvKiBXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
dGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMjcxNTg1Njc3
MDAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY5MzI3NEMxQzFGNjZBQTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR1BSSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVj
dXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gZHluYmVuY2g7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGOTMyNzVBMUMyMEJDREYwMENGNjU2NCAvKiBk
eW5iZW5jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBkeW5iZW5j
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMyNzVFMUMyMUVGN0YwMENG
NjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNPYmplY3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMz
MjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NTE0Q0E3REMxMDA4NUYzQzYgLyog
R2V0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
ZXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyNTIsNiAr
NDI2NywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTMyNzUxMUMyMEJDQkEw
MENGNjU2NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJMEY5MzI3NTIxQzIwQkNCQTAwQ0Y2NTY0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCisJCQkJMEY5MzI3NTMxQzIwQkNCQTAwQ0Y2NTY0IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkNFRkFCMzE4MDVENjE2MDA0NzJD
RTQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTQzMzksNiArNDM2Myw3IEBA
CiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJMEZFQzg1
QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAy
QjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyog
ZHluYmVuY2ggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTQzNDgsMTQgKzQzNzMsMTUgQEAKIAkJMDg2N0Q2OTFGRTg0MDI4RkMw
MkFBQzA3IC8qIEphdmFTY3JpcHRDb3JlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKLQkJCQk2NTI5RkIzMDE4QjJENjM5MDBDNjExMDIgLyogZ2VuZXJhdGUtYnl0
ZWNvZGUtZmlsZXMgKi8sCiAJCQkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENoYW5nZUxv
ZyAqLywKKwkJCQlGNjhFQkI4QzAyNTVENEM2MDFGRjYwRjcgLyogY29uZmlnLmggKi8sCiAJCQkJ
RjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovLAogCQkJCUE3
MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhfdGFibGVzICovLAotCQkJCTQ1
RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAotCQkJCUY2OEVCQjhDMDI1NUQ0
QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKLQkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0Eg
LyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLywKIAkJCQk5MzdCNjNDQzA5RTc2NkQyMDBBNjcx
REQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKKwkJCQkwRjkzMjc1QTFDMjBCQ0RGMDBDRjY1
NjQgLyogZHluYmVuY2guY3BwICovLAorCQkJCTY1MjlGQjMwMThCMkQ2MzkwMEM2MTEwMiAvKiBn
ZW5lcmF0ZS1ieXRlY29kZS1maWxlcyAqLywKKwkJCQlGNUMyOTBFNjAyODRGOThFMDE4NjM1Q0Eg
LyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLywKKwkJCQk0NUUxMkQ4ODA2QTQ5QjBGMDBFOURG
ODQgLyoganNjLmNwcCAqLywKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2NjIgLyogS2V5d29y
ZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyog
QVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBhc3NlbWJsZXIgKi8sCkBA
IC00MzY0LDkgKzQzOTAsMTIgQEAKIAkJCQlBN0Q4MDE5RjE4ODBENjZFMDAyNkMzOUIgLyogYnVp
bHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovLAog
CQkJCTdFMzlEODFEMEVDMzhFRkEwMDNBRjExQSAvKiBieXRlY29tcGlsZXIgKi8sCisJCQkJMUM5
MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJCTE0ODBEQjlB
MEREQzIyMzEwMDNDRkRGMiAvKiBkZWJ1Z2dlciAqLywKKwkJCQk2NTBGREY4RDA5RDBGQ0E3MDA3
NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFE
NyAvKiBkZmcgKi8sCiAJCQkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxl
ciAqLywKKwkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFDMDcgLyogRnJhbWV3b3JrcyAqLywKIAkJ
CQkwRkVBMDlGQzE3MDUxMzdGMDBCQjcyMkMgLyogZnRsICovLAogCQkJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovLAogCQkJCUE1QkExNURGMTgyMzQwOTIwMEE4MkU2OSAvKiBp
bnNwZWN0b3IgKi8sCkBAIC00Mzc1LDE5ICs0NDA0LDE2IEBACiAJCQkJMEY0NjgwOUMxNEJBN0Y0
RDAwQkZFMjcyIC8qIGxsaW50ICovLAogCQkJCTBGQ0VGQUFEMTgwNUNBNDQwMDQ3MkNFNCAvKiBs
bHZtICovLAogCQkJCTdFMzlEODM3MEVDM0EzODgwMDNBRjExQSAvKiBwYXJzZXIgKi8sCisJCQkJ
MDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovLAogCQkJCTk1QUI4MzFBMERB
NDJDNjkwMEJDODNGMyAvKiBwcm9maWxlciAqLywKIAkJCQk5OUU0NUEwQzE4QTAxRTkzMDAyNkQ4
OEYgLyogcmVwbGF5ICovLAorCQkJCTkzMkZDM0MyMDgyNEJCNzAwMDVCM0M3NSAvKiBSZXNvdXJj
ZXMgKi8sCiAJCQkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8sCisJCQkJ
OTk1OUU5MjUxQkQxN0YxRTAwMUFBNDEzIC8qIFNjcmlwdHMgKi8sCiAJCQkJMTQxMjExMDAwQTQ4
NzcyNjAwNDgwMjU1IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYwMTRDNzUzRUYwMEFFNTlFMyAv
KiB0b29scyAqLywKIAkJCQk3Qjk4RDEzMzFCNjBDRDFFMDAyM0IxQTQgLyogd2FzbSAqLywKIAkJ
CQk4NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywKLQkJCQk2NTBGREY4RDA5RDBG
Q0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovLAotCQkJCTkzMkZDM0MyMDgyNEJCNzAw
MDVCM0M3NSAvKiBSZXNvdXJjZXMgKi8sCi0JCQkJOTk1OUU5MjUxQkQxN0YxRTAwMUFBNDEzIC8q
IFNjcmlwdHMgKi8sCi0JCQkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFBQzA3IC8qIEZyYW1ld29ya3Mg
Ki8sCi0JCQkJMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICovLAotCQkJCTFD
OTA1MTNFMEJBOUU4ODMwMDgxRTlEMCAvKiBDb25maWd1cmF0aW9ucyAqLywKIAkJCSk7CiAJCQlu
YW1lID0gSmF2YVNjcmlwdENvcmU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNTUy
Myw5ICs1NTQ5LDkgQEAKIAkJCQlFMTc4NjMzRjBEOUJFQzAwMDBENzRFNzUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5oICovLAogCQkJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwICovLAogCQkJCUUzNUUwMzVFMUI3QUI0M0UwMDcz
QUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuaCAqLywKKwkJCQlBN0E4QUYy
QjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkMxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyRDE3QURCNUYzMDA1QUIx
NzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjJCMTdBREI1RjMwMDVBQjE3NCAvKiBJ
bnQ4QXJyYXkuaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxG
dW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFs
RnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIzMzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxh
dG9yLmNwcCAqLywKQEAgLTU2MTQsOSArNTY0MCw5IEBACiAJCQkJQTU5NDU1OTExODI0NzQ0NzAw
Q0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oICovLAogCQkJCUJDNzU2RkM2MEUy
MDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJQkM3
NTZGQzcwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmggKi8sCisJ
CQkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFycmF5LmggKi8sCiAJCQkJMEYy
QjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5oICovLAogCQkJCTBGMkI2NkNC
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywKLQkJCQkwRjJCNjZDOTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQlFMzNGNTA3RTFCODQyOUE0MDA0
MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwICovLAogCQkJCUUzM0Y1MDdGMUI4NDI5QTQw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oICovLAogCQkJCUUzM0Y1MDc2MUI4NDIyNTcw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTU2NDcs
NiArNTY3Myw3IEBACiAJCQkJQTcyNzAwNzcwREFDNjA1NjAwRTU0OEQ3IC8qIEpTTm90QW5PYmpl
Y3QuaCAqLywKIAkJCQlCQzIyQTM5ODBFMTZFMTQ4MDBBRjIxQzggLyogSlNPYmplY3QuY3BwICov
LAogCQkJCUJDMjJBMzk5MEUxNkUxNDgwMEFGMjFDOCAvKiBKU09iamVjdC5oICovLAorCQkJCTBG
OTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLywKIAkJCQlBN0Y5
OTM1RTBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgKi8sCiAJCQkJQTdGOTkzNUQw
RkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCAqLywKIAkJCQk3QzE4NEUxODE3QkVEQkQz
MDA3Q0I2M0EgLyogSlNQcm9taXNlLmNwcCAqLywKQEAgLTU2OTQsMTAgKzU3MjEsMTAgQEAKIAkJ
CQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5j
cHAgKi8sCiAJCQkJNTM5MTdFN0MxQjc5MTEwNjAwMEVCRDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5m
by5oICovLAotCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5Lmgg
Ki8sCi0JCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywK
IAkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OEFycmF5LmggKi8sCiAJCQkJ
MEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFtcGVkQXJyYXkuaCAqLywKKwkJ
CQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZBcnJheS5oICovLAorCQkJCTBG
MkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5LmggKi8sCiAJCQkJQTdDQTNB
RTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAgKi8sCiAJCQkJQTdDQTNBRTIxN0RB
NDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICovLAogCQkJCTcwOUZCODYxMUFFMzM1QzYwMDM5
RDA2OSAvKiBKU1dlYWtTZXQuY3BwICovLApAQCAtNTg3MSwxMSArNTg5OCwxMSBAQAogCQkJCTBG
MkQ0REUwMTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCAqLywKIAkJCQkwRjJE
NERFMzE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5jcHAgKi8sCiAJCQkJMEYyRDRERTQxOTgz
MkQ5MTAwN0Q0QjE5IC8qIFR5cGVTZXQuaCAqLywKKwkJCQlBN0E4QUYzMDE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhBcnJheS5oICovLAorCQkJCUE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50MTZBcnJheS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEwMDIzRDg3QyAvKiBVaW50MTZX
aXRoRnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYzMDA1QUIxNzQgLyogVWludDMy
QXJyYXkuaCAqLywKLQkJCQlBN0E4QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5o
ICovLAotCQkJCUE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5o
ICovLAogCQkJCTBGRTA1MDIzMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwICovLAog
CQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuaCAqLywKIAkJCQlFMThF
M0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLApAQCAtNzc1Miw2ICs3Nzc5LDcgQEAK
IAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQ
dXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJG
MUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUx
NEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLApAQCAtNzk1MCw2ICs3
OTc4LDIyIEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1
NjQgLyogZHluYmVuY2ggKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWls
ZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi87CisJCQli
dWlsZFBoYXNlcyA9ICgKKwkJCQkwRjkzMjc0RjFDMjBCQ0JBMDBDRjY1NjQgLyogU291cmNlcyAq
LywKKwkJCQkwRjkzMjc1MTFDMjBCQ0JBMDBDRjY1NjQgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7
CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJ
CQluYW1lID0gZHluYmVuY2g7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0
UmVmZXJlbmNlID0gMEY5MzI3NTkxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovOworCQkJ
cHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMEZD
RUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi8gPSB7CiAJCQlpc2EgPSBQQlhO
YXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZDRUZBQjcxODA1RDYx
NjAwNDcyQ0U0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJsbHZtRm9ySlNDIiAqLzsKQEAgLTgxNDAsNiArODE4NCw3IEBACiAJCQkJNjUxMTIyRjcxNDA0
NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEZFQzg1OTQxQkRCNUNGMTAwODBG
Rjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyogVGVzdCBU
b29scyAqLywKKwkJCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCiAJ
CQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwpAQCAtODM3Niw2ICs4NDIx
LDE0IEBACiAvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyog
QmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjkzMjc0RjFDMjBCQ0JB
MDBDRjY1NjQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNl
OworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBG
OTMyNzVCMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJ
MEZDRUZBQjIxODA1RDYxNjAwNDcyQ0U0IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC05
MjM1LDYgKzkyODgsMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQkwRjkzMjc1RDFD
MjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBC
WFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQg
LyogZHluYmVuY2ggKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTMyNzVDMUMyMEJGM0EwMENGNjU2
NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGQ0VGQUJEMTgwNUQ2NjMw
MDQ3MkNFNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0
RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsbHZt
Rm9ySlNDICovOwpAQCAtOTM0MSw2ICs5Mzk5LDM0IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07CisJCTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25m
aWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJ
fTsKKwkJMEY5MzI3NTYxQzIwQkNCQTAwQ0Y2NTY0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
QkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwor
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJ
MEY5MzI3NTcxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
OTMyNzU4MUMyMEJDQkEwMENGNjU2NCAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBG
Q0VGQUI4MTgwNUQ2MTYwMDQ3MkNFNCAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSAwRkNFRkFCRTE4
MDVEODY5MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2NvbmZpZyAqLzsKQEAgLTk3NDIsNiArOTgy
OCwxNyBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEY5MzI3NTQxQzIwQkNC
QTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJkeW5iZW5jaCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwRjkzMjc1NTFDMjBCQ0JBMDBDRjY1NjQgLyogRGVi
dWcgKi8sCisJCQkJMEY5MzI3NTYxQzIwQkNCQTAwQ0Y2NTY0IC8qIFJlbGVhc2UgKi8sCisJCQkJ
MEY5MzI3NTcxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRjkzMjc1ODFD
MjBCQ0JBMDBDRjY1NjQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogCQkwRkNFRkFCNzE4MDVENjE2MDA0NzJDRTQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxsdm1Gb3JKU0MiICovID0gewogCQkJ
aXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIzMl82NC5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRhdGFGb3JtYXQu
aCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNpb24gMTk0MTY1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5j
bHVkZSAiRGF0YUZvcm1hdC5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpYwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlk
KHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSksIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAg
ICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVjLCBpZGVudCwgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSkucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRp
Zmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRD
b250ZXh0KCkpOwotICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0KGV4ZWMsIGlk
ZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsKLSAgICBiYXNlVmFs
dWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElubGlu
ZShleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9
IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkTm9uU3QKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBl
eGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCp2bSkgOiBudWxscHRyOyAgICAKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2
YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgdmFsdWUs
IHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIyLDcgKzQy
Miw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW0KICAgICAgICAg
YnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7Ci0g
ICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAg
YmFzZVZhbHVlLnB1dElubGluZShjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9
CiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09i
amVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjAsNyAr
NjIwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZAogICAgIGlm
IChwY1s4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdCkKICAgICAgICAgYXNPYmpl
Y3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHZtLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVl
KCksIHNsb3QpOwogICAgIGVsc2UKLSAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBpZGVudCwg
TExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOworICAgICAgICBiYXNlVmFsdWUucHV0SW5s
aW5lKGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CiAgICAgTExJ
TlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNT
X1NMT1cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShy
ZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0lu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIHN0cnVjdCBDbGFzc0luZm8g
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBoYXNTdGF0aWNTZXR0
ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgaGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdDsKIAogICAgIGNv
bnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hUYWJsZTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAJKHJldmlzaW9uIDE5NDE2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQ29uc29sZUNsaWVudC5oIgogCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2lu
Y2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCShyZXZpc2lvbiAxOTQx
NjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DdXN0b21HZXR0ZXJTZXR0ZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIEN1c3RvbVNl
dHRlciBtX3NldHRlcjsKIH07CiAKLXZvaWQgY2FsbEN1c3RvbVNldHRlcihFeGVjU3RhdGUqLCBK
U1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdGhpc1Zh
bHVlLCBKU1ZhbHVlIHZhbHVlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FsbEN1c3RvbVNl
dHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgSlNPYmplY3QqIGJh
c2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5zdGFuY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Vycm9ySW5z
dGFuY2UuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDUwICsxMjgsNiBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwogCi1zdGF0aWMgYm9vbCBhZGRF
cnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNP
YmplY3QqIG9iaiwgYm9vbCB1c2VDdXJyZW50RnJhbWUsIENhbGxGcmFtZSomIGNhbGxGcmFtZSwg
dW5zaWduZWQgJmJ5dGVjb2RlT2Zmc2V0KQotewotICAgIFZlY3RvcjxTdGFja0ZyYW1lPiBzdGFj
a1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCk7Ci0KLSAgICBpZiAoZXhlYyAmJiBzdGFja1Ry
YWNlLmlzRW1wdHkoKSkKLSAgICAgICAgdm0uaW50ZXJwcmV0ZXItPmdldFN0YWNrVHJhY2Uoc3Rh
Y2tUcmFjZSk7Ci0KLSAgICBpZiAoIXN0YWNrVHJhY2UuaXNFbXB0eSgpKSB7Ci0KLSAgICAgICAg
QVNTRVJUKGV4ZWMgPT0gdm0udG9wQ2FsbEZyYW1lIHx8IGV4ZWMgPT0gZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkgfHwgZXhlYyA9PSBleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0KLSAgICAgICAgU3RhY2tGcmFtZSogc3RhY2tGcmFt
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBzdGFja1RyYWNlLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lID0gJnN0YWNrVHJhY2UuYXQoaSk7Ci0gICAg
ICAgICAgICBpZiAoc3RhY2tGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnl0ZWNvZGVPZmZzZXQpIHsKLSAgICAg
ICAgICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9ja0Z1bmN0b3IgZnVuY3Rvcihl
eGVjKTsKLSAgICAgICAgICAgIHZtLnRvcENhbGxGcmFtZS0+aXRlcmF0ZShmdW5jdG9yKTsKLSAg
ICAgICAgICAgIGNhbGxGcmFtZSA9IGZ1bmN0b3IuZm91bmRDYWxsRnJhbWUoKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBmdW5jdG9yLmluZGV4KCk7Ci0gICAgICAgICAgICBi
eXRlY29kZU9mZnNldCA9IHN0YWNrVHJhY2UuYXQoc3RhY2tJbmRleCkuYnl0ZWNvZGVPZmZzZXQ7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGxpbmU7Ci0gICAgICAgIHVu
c2lnbmVkIGNvbHVtbjsKLSAgICAgICAgc3RhY2tGcmFtZS0+Y29tcHV0ZUxpbmVBbmRDb2x1bW4o
bGluZSwgY29sdW1uKTsKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgICAg
ICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y29sdW1uLCBqc051bWJlcihj
b2x1bW4pLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotCi0gICAgICAgIGlmICghc3RhY2tGcmFt
ZS0+c291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2bSwgc3RhY2tGcmFtZS0+c291
cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAKLSAgICAgICAgaWYgKCF1c2VD
dXJyZW50RnJhbWUpCi0gICAgICAgICAgICBzdGFja1RyYWNlLnJlbW92ZSgwKTsKLSAgICAgICAg
b2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0YWNrLCB2bS5pbnRlcnByZXRl
ci0+c3RhY2tUcmFjZUFzU3RyaW5nKHZtLnRvcENhbGxGcmFtZSwgc3RhY2tUcmFjZSksIERvbnRF
bnVtKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wgdXNlQ3VycmVudEZyYW1lKQogewog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQ0LDcgKzE0NCw3IEBAIGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFzR2V0dGVyU2V0dGVyKEpTVmEK
IH0KIAogSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1
ZSBnZXR0ZXJTZXR0ZXIpOwotdm9pZCBjYWxsU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFz
ZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpTVmFsdWUsIEVDTUFNb2RlKTsKK0pTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY2FsbFNldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGJhc2UsIEpTVmFsdWUg
Z2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBFQ01BTW9kZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZp
c2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyVmlld0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmplY3RJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiArMjc3LDcgQEAgcHVibGljOgog
ICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JikgY29uc3Q7CiAKICAgICB2b2lkIHB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZvaWQgcHV0SW5saW5lKEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
cHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgdm9pZCBwdXRCeUluZGV4KEV4ZWNTdGF0
ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKQEAgLTc1
MSw2ICs3NTIsMjQgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZTo6cHV0KEV4ZWNTdGF0ZSogZXhlYwog
ICAgIGFzQ2VsbCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+cHV0KGFzQ2VsbCgpLCBleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAorQUxXQVlTX0lOTElORSB2b2lkIEpT
VmFsdWU6OnB1dElubGluZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBpZiAoVU5M
SUtFTFkoIWlzQ2VsbCgpKSkgeworICAgICAgICBwdXRUb1ByaW1pdGl2ZShleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBKU0NlbGwq
IGNlbGwgPSBhc0NlbGwoKTsKKyAgICBhdXRvIHB1dE1ldGhvZCA9IGNlbGwtPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5wdXQ7CisgICAgaWYgKExJS0VMWShwdXRNZXRob2QgPT0gSlNPYmplY3Q6
OnB1dCkpIHsKKyAgICAgICAgSlNPYmplY3Q6OnB1dElubGluZShjZWxsLCBleGVjLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFB1dFBy
b3BlcnR5U2xvdCBvdGhlclNsb3QgPSBzbG90OworICAgIHB1dE1ldGhvZChjZWxsLCBleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBvdGhlclNsb3QpOworICAgIHNsb3QgPSBvdGhlclNsb3Q7Cit9
CisKIGlubGluZSB2b2lkIEpTVmFsdWU6OnB1dEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNp
Z25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7CiAg
ICAgaWYgKFVOTElLRUxZKCFpc0NlbGwoKSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcyLDQw
ICszNzIsMjAgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleAogLy8g
RUNNQSA4LjYuMi4yCiB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU09i
amVjdCo+KGNlbGwpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXNPYmplY3QpKTsK
KyAgICBwdXRJbmxpbmUoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9
CisKK3ZvaWQgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAgICAvLyBUcnkgaW5kZXhlZCBw
dXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzLCBzaW5jZSBsb2FkcyBv
biBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCi0gICAgLy8gdmFsaWQgaW5kaWNlcyB3
aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0b3JhZ2UuCi0gICAgaWYgKE9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4LnZhbHVlKCksIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAv
LyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0dGVycyBpbiB0aGUgcHJvdG90
eXBlIGNoYWluCi0gICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSAh
PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3RvKSB7Ci0gICAgICAgIGZvciAo
SlNPYmplY3QqIG9iaiA9IHRoaXNPYmplY3Q7ICFvYmotPnN0cnVjdHVyZSh2bSktPmhhc1JlYWRP
bmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKTsgb2JqID0gYXNPYmpl
Y3QocHJvdG90eXBlKSkgewotICAgICAgICAgICAgcHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUo
KTsKLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KQotICAgICAgICAgICAgICAgICAgICAmJiBzbG90Lmlz
U3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBB
U0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQogCi0g
ICAgSlNPYmplY3QqIG9iajsKLSAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNP
YmplY3QocHJvdG90eXBlKSkgeworICAgIEpTT2JqZWN0KiBvYmogPSB0aGlzOworICAgIGZvciAo
OzspIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcyk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpcyk7CiAg
ICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDEzLDggKzM5Myw4IEBAIHZvaWQgSlNPYmplY3Q6
OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogICAgICAgICAgICAgSlNWYWx1ZSBncyA9IG9i
ai0+Z2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAoZ3MuaXNHZXR0ZXJTZXR0ZXIo
KSkgewotICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywgY2VsbCwgZ3MsIHZhbHVlLCBz
bG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGUpOwotICAgICAg
ICAgICAgICAgIGlmICghdGhpc09iamVjdC0+c3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQor
ICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywgdGhpcywgZ3MsIHZhbHVlLCBzbG90Lmlz
U3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1vZGUpOworICAgICAgICAgICAg
ICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQogICAgICAgICAgICAgICAgICAg
ICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNDM4LDE1ICs0MTgsMTUgQEAgdm9pZCBKU09iamVj
dDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUgPSBvYmotPnByb3RvdHlwZSgpOwor
ICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CiAgICAgICAgIGlm
IChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgb2JqID0g
YXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKCF0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+
dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0gICAgaWYgKCF0aGlz
T2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgMCwgc2xvdCkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICBBU1NFUlQoIXN0cnVj
dHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBw
cm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKKyAgICBpZiAoIXB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSAmJiBzbG90Lmlz
U3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7Ci0gICAgcmV0dXJuOwogfQog
CiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9u
IDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0aGlzKS0+dmVjdG9yTGVuZ3Ro
KCk7CiAgICAgfQotICAgICAgICAKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBwdXRJbmxpbmUoSlND
ZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKKyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXQoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUluZGV4KEpTQ2VsbCosIEV4ZWNT
dGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7
CiAgICAgICAgIApAQCAtODUyLDExICs4NTQsMTMgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQ
dXRNb2RlPgogICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgTkVWRVJfSU5MSU5FIHZvaWQgcHV0SW5saW5lU2xvdyhFeGVjU3RhdGUqLCBQcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworCiAgICAgYm9vbCBpbmxpbmVH
ZXRPd25Qcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xv
dChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwogICAg
IHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVl
LCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CiAKLSAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogZmlu
ZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0
eU5hbWUpIGNvbnN0OwogICAgICAgICAKICAgICB2b2lkIHB1dEluZGV4ZWREZXNjcmlwdG9yKEV4
ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBQ
cm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CiAgICAgICAgIApAQCAtMTA5MCwxMyArMTA5NCwyMyBA
QCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93CiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3Qob2Zmc2V0KTsKLSAgICBp
ZiAoc3RydWN0dXJlLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0dldHRl
clNldHRlcigpKQotICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIHZhbHVlLCBh
dHRyaWJ1dGVzLCBvZmZzZXQpOwotICAgIGVsc2UgaWYgKHN0cnVjdHVyZS5oYXNDdXN0b21HZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNDdXN0b21HZXR0ZXJTZXR0ZXIoKSkKLSAg
ICAgICAgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChzbG90LCB2YWx1ZSwgYXR0cmlidXRl
cywgc3RydWN0dXJlKTsKLSAgICBlbHNlCi0gICAgICAgIHNsb3Quc2V0VmFsdWUodGhpcywgYXR0
cmlidXRlcywgdmFsdWUsIG9mZnNldCk7Ci0KKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAg
ICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxs
KCk7CisgICAgICAgIEpTVHlwZSB0eXBlID0gY2VsbC0+dHlwZSgpOworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBHZXR0ZXJTZXR0ZXJUeXBlOgorICAgICAgICAgICAgZmls
bEdldHRlclByb3BlcnR5U2xvdChzbG90LCB2YWx1ZSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEN1c3RvbUdldHRlclNldHRlclR5
cGU6CisgICAgICAgICAgICBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIHZhbHVl
LCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBzbG90LnNldFZhbHVlKHRoaXMsIGF0dHJpYnV0ZXMsIHZhbHVlLCBvZmZzZXQpOwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0xMTg3LDcgKzEyMDEsNyBAQCBpbmxpbmUgSlNWYWx1ZSBK
U09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2Rl
IG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQog
ewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkg
PT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOCwgMjAw
OSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKKyNkZWZpbmUgSlNPYmplY3RJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IEVDTUEgOC42LjIuMgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpwdXRJbmxpbmUoSlND
ZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpT
VmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU09iamVjdCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVCh2YWx1ZSk7Cisg
ICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFw
OjpoZWFwKHRoaXNPYmplY3QpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAg
IC8vIFRyeSBpbmRleGVkIHB1dCBmaXJzdC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5l
c3MsIHNpbmNlIGxvYWRzIG9uIHByb3BlcnR5IG5hbWVzIHRoYXQgYXBwZWFyIGxpa2UKKyAgICAv
LyB2YWxpZCBpbmRpY2VzIHdpbGwgbmV2ZXIgbG9vayBpbiB0aGUgbmFtZWQgcHJvcGVydHkgc3Rv
cmFnZS4KKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9w
ZXJ0eU5hbWUpKSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgu
dmFsdWUoKSwgdmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0
ZXJzIGluIHRoZSBwcm90b3R5cGUgY2hhaW4KKyAgICBKU1ZhbHVlIHByb3RvdHlwZTsKKyAgICBp
ZiAocHJvcGVydHlOYW1lICE9IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8p
IHsKKyAgICAgICAgZm9yIChKU09iamVjdCogb2JqID0gdGhpc09iamVjdDsgIW9iai0+c3RydWN0
dXJlKHZtKS0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
bygpOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CisgICAgICAgICAgICBwcm90b3R5cGUg
PSBvYmotPnByb3RvdHlwZSgpOworICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkp
OworICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpCisgICAgICAgICAgICAg
ICAgICAgICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdy
aXRlRXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEpTT2JqZWN0SW5saW5lc19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267485</attachid>
            <date>2015-12-16 13:07:14 -0800</date>
            <delta_ts>2015-12-16 13:13:48 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49184</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDE1LTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBKU09iamVjdDo6cHV0IHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgYmVuY2htYXJrIGNhbGxl
ZCBkeW5iZW5jaCwgd2hpY2gganVzdCB1c2VzIHRoZSBDKysgQVBJIHRvIGNyZWF0ZSwgbW9kaWZ5
LCBhbmQKKyAgICAgICAgcXVlcnkgb2JqZWN0cy4gVGhpcyBhbHNvIGFkZHMgc29tZSBvcHRpbWl6
YXRpb25zIHRvIG1ha2UgdGhlIEpTT2JqZWN0OjpwdXQgY29kZSBmYXN0ZXIgYnkgbWFraW5nCisg
ICAgICAgIGl0IGlubGluYWJsZSBpbiBwbGFjZXMgdGhhdCByZWFsbHkgbmVlZCB0aGUgcGVyZm9y
bWFuY2UsIGxpa2UgSklUT3BlcmF0aW9ucyBhbmQgTExJbnRTbG93UGF0aHMuCisKKyAgICAgICAg
VGhpcyBpcyB1cCB0byBhIDIwJSBpbXByb3ZlbWVudCBmb3IgSlNPYmplY3Q6OnB1dCBjYWxscyB0
aGF0IGdldCBpbmxpbmVkIGFsbCB0aGUgd2F5IChsaWtlIGZyb20KKyAgICAgICAgSklUT3BlcmF0
aW9ucyBhbmQgdGhlIG5ldyBiZW5jaG1hcmspIGFuZCBpdCdzIGFsc28gYSBzcGVlZC11cCwgYWxi
ZWl0IGEgc21hbGxlciBvbmUsIGZvcgorICAgICAgICBKU09iamVjdDo6cHV0IGNhbGxzIHRoYXQg
ZG9uJ3QgZ2V0IGlubGluZWQgKGkuZS4gdGhvc2UgZnJvbSB0aGUgRE9NIGFuZCB0aGUgSlNDIEMr
KyBsaWJyYXJ5IGNvZGUpLgorICAgICAgICBTcGVjaWZpYyBzcGVlZC11cHMgYXJlIGFzIGZvbGxv
d3MuIE5vdGUgdGhhdCAiZHluYW1pYyBjb250ZXh0IiBtZWFucyB0aGF0IHdlIHRvbGQgUHV0UHJv
cGVydHlTbG90CisgICAgICAgIHRoYXQgd2UncmUgbm90IGEgc3RhdGljIHB1dF9ieV9pZCwgd2hp
Y2ggdHVybnMgb2ZmIHNvbWUgdHlwZSBpbmZlcmVuY2UuCisKKyAgICAgICAgR2V0IEJ5IElkOiAy
JSBmYXN0ZXIKKyAgICAgICAgUHV0IEJ5IElkIFJlcGxhY2U6IDIzJSBmYXN0ZXIKKyAgICAgICAg
UHV0IEJ5IElkIFRyYW5zaXRpb24gKyBvYmplY3QgYWxsb2NhdGlvbjogMTElIGZhc3RlcgorICAg
ICAgICBHZXQgQnkgSWQgdy8gZHluYW1pYyBjb250ZXh0OiA1JSBmYXN0ZXIKKyAgICAgICAgUHV0
IEJ5IElkIFJlcGxhY2Ugdy8gZHluYW1pYyBjb250ZXh0OiAyNSUgZmFzdGVyCisgICAgICAgIFB1
dCBCeSBJZCBUcmFuc2l0aW9uICsgb2JqZWN0IGFsbG9jYXRpb24gdy8gZHluYW1pYyBjb250ZXh0
OiAxMCUgZmFzdGVyCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGR5bmJlbmNoLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OmJlbmNobWFya0ltcGwpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0L0NhbGxGcmFt
ZVNodWZmbGVyMzJfNjQuY3BwOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNw
cDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgIChKU0M6OkNsYXNz
SW5mbzo6aGFzU3RhdGljUHJvcGVydGllcyk6CisgICAgICAgICogcnVudGltZS9Db25zb2xlQ2xp
ZW50LmNwcDoKKyAgICAgICAgKiBydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHA6CisgICAgICAgIChKU0M6OkVycm9ySW5zdGFu
Y2U6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6YWRkRXJyb3JJbmZvQW5kR2V0Qnl0
ZWNvZGVPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmg6
CisgICAgICAgIChKU0M6OmFzR2V0dGVyU2V0dGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0lu
bGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dCk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dEludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNWYWx1
ZTo6cHV0QnlJbmRleCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0QnlJbmRl
eCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6Z2V0VmVjdG9yTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdldE93
blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXQpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorCiAyMDE1LTEyLTE2ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV29yayBhcm91bmQgYSBidWcgaW4g
TExWTSBieSBmbGlwcGluZyB0aGUgdW5pZmljYXRpb24gb3JkZXIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9keW5iZW5jaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2R5bmJlbmNoLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
eW5iZW5jaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAi
SlNPYmplY3QuaCIKKyNpbmNsdWRlICJWTS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitu
YW1lc3BhY2UgeworCitTdGF0aWNMb2NrIGNyYXNoTG9jazsKK2NvbnN0IGNoYXIqIG5hbWVGaWx0
ZXI7Cit1bnNpZ25lZCByZXF1ZXN0ZWRJdGVyYXRpb25Db3VudDsKKworI2RlZmluZSBDSEVDSyh4
KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBpZiAoISEoeCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjcmFzaExvY2su
bG9jaygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI3gpOyBcCisgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisKK3RlbXBsYXRlPHR5cGVuYW1lIENhbGxiYWNrPgorTkVWRVJfSU5MSU5FIHZvaWQg
YmVuY2htYXJrSW1wbChjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBpdGVyYXRpb25Db3VudCwg
Y29uc3QgQ2FsbGJhY2smIGNhbGxiYWNrKQoreworICAgIGlmIChuYW1lRmlsdGVyICYmICFzdHJj
YXNlc3RyKG5hbWUsIG5hbWVGaWx0ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVx
dWVzdGVkSXRlcmF0aW9uQ291bnQpCisgICAgICAgIGl0ZXJhdGlvbkNvdW50ID0gcmVxdWVzdGVk
SXRlcmF0aW9uQ291bnQ7CisgICAgCisgICAgZG91YmxlIGJlZm9yZSA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZU1TKCk7CisgICAgY2FsbGJhY2soaXRlcmF0aW9uQ291bnQpOworICAgIGRv
dWJsZSBhZnRlciA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CisgICAgZGF0YUxv
ZyhuYW1lLCAiOiAiLCBhZnRlciAtIGJlZm9yZSwgIiBtcy5cbiIpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAg
IGlmIChhcmdjID49IDIpIHsKKyAgICAgICAgaWYgKGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJVc2FnZTogZHluYmVuY2ggWzxmaWx0ZXI+IFs8aXRlcmF0aW9uIGNv
dW50Pl1dXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAg
bmFtZUZpbHRlciA9IGFyZ3ZbMV07CisKKyAgICAgICAgaWYgKGFyZ2MgPj0gMykgeworICAgICAg
ICAgICAgaWYgKHNzY2FuZihhcmd2WzJdLCAiJXUiLCAmcmVxdWVzdGVkSXRlcmF0aW9uQ291bnQp
ICE9IDEpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb3VsZCBub3QgcGFyc2UgaXRlcmF0
aW9uIGNvdW50ICIsIGFyZ3ZbMl0sICJcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIFdURjo6aW5pdGlhbGl6
ZU1haW5UaHJlYWQoKTsKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKworICAgIFZN
KiB2bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworICAgIHsKKyAgICAgICAg
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlKCp2bSwgSlNHbG9i
YWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdm0sIGpzTnVsbCgpKSk7CisgICAgICAgIEV4ZWNT
dGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworCisgICAgICAgIElkZW50
aWZpZXIgaWRlbnRGID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhleGVjLCAiZiIpOworICAgICAg
ICBJZGVudGlmaWVyIGlkZW50RyA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcoZXhlYywgImciKTsK
KworICAgICAgICBTdHJ1Y3R1cmUqIG9iamVjdFN0cnVjdHVyZSA9CisgICAgICAgICAgICBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCksIDIpOworCisgICAgICAgIC8vIE5vbi1zdHJpY3QgZHluYW1p
YyBnZXQgYnkgaWQ6CisgICAgICAgIEpTVmFsdWUgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsK
KyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcig0Miks
IHNsb3QpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAg
ICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsK
KyAgICAgICAgfQorICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAgICAgIk5vbiBTdHJp
Y3QgRHluYW1pYyBHZXQgQnkgSWQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAg
IFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRGKTsKKyAgICAgICAgICAgICAg
ICAgICAgQ0hFQ0socmVzdWx0ID09IGpzTnVtYmVyKDQyKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRHKTsKKyAgICAgICAgICAgICAgICAgICAg
Q0hFQ0socmVzdWx0ID09IGpzTnVtYmVyKDQzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBs
YWNlOgorICAgICAgICBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RT
dHJ1Y3R1cmUpOworICAgICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChv
YmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAgICAgb2Jq
ZWN0LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CisgICAgICAg
IH0KKyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBm
YWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJ
bmxpbmUoZXhlYywgaWRlbnRHLCBqc051bWJlcig0MyksIHNsb3QpOworICAgICAgICB9CisgICAg
ICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0cmljdCBEeW5hbWljIFB1dCBC
eSBJZCBSZXBsYWNlIiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVu
c2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5w
dXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRl
bnRHLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFt
aWMgcHV0IGJ5IGlkIHRyYW5zaXRpb24gd2l0aCBvYmplY3QgYWxsb2NhdGlvbjoKKyAgICAgICAg
YmVuY2htYXJrSW1wbCgKKyAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFtaWMgQWxsb2NhdGlv
biBhbmQgUHV0IEJ5IElkIFRyYW5zaXRpb24iLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAg
ICAgICAgIFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0
cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0
QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlk
ZW50RiwganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoaSks
IHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIGdldCBieSBpZCB3aXRo
IGR5bmFtaWMgc3RvcmUgY29udGV4dDoKKyAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICBvYmplY3QucHV0
SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAgICAgICAgfQorICAg
ICAgICB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsK
KyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRHLCBqc051bWJlcig0Myks
IHNsb3QpOworICAgICAgICB9CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAi
Tm9uIFN0cmljdCBEeW5hbWljIEdldCBCeSBJZCBXaXRoIER5bmFtaWMgU3RvcmUgQ29udGV4dCIs
CisgICAgICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRp
b25Db3VudCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNv
dW50OyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gb2JqZWN0
LmdldChleGVjLCBpZGVudEYpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0g
anNOdW1iZXIoNDIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqZWN0LmdldChl
eGVjLCBpZGVudEcpOworICAgICAgICAgICAgICAgICAgICBDSEVDSyhyZXN1bHQgPT0ganNOdW1i
ZXIoNDMpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKworICAgICAgICAv
LyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHJlcGxhY2Ugd2l0aCBkeW5hbWljIHN0b3Jl
IGNvbnRleHQ6CisgICAgICAgIG9iamVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9i
amVjdFN0cnVjdHVyZSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBp
ZGVudEYsIGpzTnVtYmVyKDQyKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICBv
YmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKKyAgICAg
ICAgfQorICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHlu
YW1pYyBQdXQgQnkgSWQgUmVwbGFjZSBXaXRoIER5bmFtaWMgU3RvcmUgQ29udGV4dCIsCisgICAg
ICAgICAgICAxMDAwMDAwLAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3Vu
dCkgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRHLCBqc051bWJlcihp
KSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgcHV0IGJ5IGlkIHRy
YW5zaXRpb24gd2l0aCBvYmplY3QgYWxsb2NhdGlvbiB3aXRoIGR5bmFtaWMgc3RvcmUgY29udGV4
dDoKKyAgICAgICAgYmVuY2htYXJrSW1wbCgKKyAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFt
aWMgQWxsb2NhdGlvbiBhbmQgUHV0IEJ5IElkIFRyYW5zaXRpb24gV2l0aCBEeW5hbWljIFN0b3Jl
IENvbnRleHQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAgIFsmXSAodW5zaWdu
ZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
dGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIG9iamVj
dCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElu
bGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRHLCBqc051bWJlcihpKSwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBjcmFzaExvY2subG9jaygpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsK
IAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTQ4Miw2ICs0ODMsMTAgQEAKIAkJMEY5MTlEMjYxNTg1
M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5
MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDI3MTU4NTY3NzAwMDRBNEU3RCAv
KiBTeW1ib2xUYWJsZS5jcHAgKi87IH07CiAJCTBGOTMyNzREMUMxRjY2QUEwMENGNjU2NCAvKiBH
UFJJbmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTMyNzRDMUMxRjY2QUEwMENGNjU2NCAvKiBHUFJJbmZvLmNwcCAqLzsgfTsKKwkJMEY5MzI3
NTIxQzIwQkNCQTAwQ0Y2NTY0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZE
RjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRjkzMjc1MzFDMjBCQ0JBMDBD
RjY1NjQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEY5MzI3NUIxQzIwQkNERjAwQ0Y2NTY0
IC8qIGR5bmJlbmNoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTMyNzVBMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgKi87IH07CisJ
CTBGOTMyNzVGMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMyNzVFMUMyMUVGN0YwMENG
NjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtT
dGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOTMxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLzsgfTsKIAkJ
MEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMzI5NDE0Q0E3REMxMDA4NUYz
QzYgLyogQ2FsbExpbmtTdGF0dXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjkzMzI5RjE0Q0E3RENBMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkz
MzI5NTE0Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi87IH07CkBAIC0yMDU3
LDYgKzIwNjIsMTMgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjkzMjc1QzFDMjBCRjNBMDBD
RjY1NjQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUds
b2JhbElEU3RyaW5nID0gMEY5MzI3NEUxQzIwQkNCQTAwQ0Y2NTY0OworCQkJcmVtb3RlSW5mbyA9
IGR5bmJlbmNoOworCQl9OwogCQkwRkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJ
Y29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2Jq
ZWN0ICovOwpAQCAtMjU5NCw2ICsyNjA2LDkgQEAKIAkJMEY5MTlEMjMxNTg1M0NERTAwNEE0RTdE
IC8qIFdhdGNocG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2F0Y2hw
b2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQyNzE1ODU2NzcwMDA0
QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU3ltYm9sVGFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkz
Mjc0QzFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHUFJJbmZvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5MzI3NTkxQzIwQkNCQTAwQ0Y2NTY0IC8qIGR5bmJlbmNoICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFi
bGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBkeW5iZW5jaDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJMEY5MzI3NUExQzIwQkNERjAwQ0Y2NTY0IC8qIGR5bmJl
bmNoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGR5bmJlbmNoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5MzI3NUUxQzIxRUY3RjAwQ0Y2NTY0
IC8qIEpTT2JqZWN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U09iamVjdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzMyOTMx
NENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxMaW5rU3RhdHVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk1MTRDQTdEQzEwMDg1RjNDNiAvKiBHZXRC
eUlkU3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdldEJ5
SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDI1Miw2ICs0MjY3
LDE1IEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5MzI3NTExQzIwQkNCQTAwQ0Y2
NTY0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkw
RjkzMjc1MjFDMjBCQ0JBMDBDRjY1NjQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLywKKwkJCQkwRjkzMjc1MzFDMjBCQ0JBMDBDRjY1NjQgLyogSmF2YVNjcmlwdENvcmUu
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCTBGQ0VGQUIzMTgwNUQ2MTYwMDQ3MkNFNCAv
KiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNDMzOSw2ICs0MzYzLDcgQEAKIAkJ
CQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVDODVBRDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAx
RCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5i
ZW5jaCAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtNDM0OCwxNCArNDM3MywxNSBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFD
MDcgLyogSmF2YVNjcmlwdENvcmUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAotCQkJCTY1MjlGQjMwMThCMkQ2MzkwMEM2MTEwMiAvKiBnZW5lcmF0ZS1ieXRlY29k
ZS1maWxlcyAqLywKIAkJCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1RjUgLyogQ2hhbmdlTG9nICov
LAorCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKIAkJCQlGNjky
QTg1NDAyNTU1OTdEMDFGRjYwRjcgLyogY3JlYXRlX2hhc2hfdGFibGUgKi8sCiAJCQkJQTcxOEY4
MjExMTc4RUI0QjAwMjQ2NUE3IC8qIGNyZWF0ZV9yZWdleF90YWJsZXMgKi8sCi0JCQkJNDVFMTJE
ODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8sCi0JCQkJRjY4RUJCOEMwMjU1RDRDNjAx
RkY2MEY3IC8qIGNvbmZpZy5oICovLAotCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBK
YXZhU2NyaXB0Q29yZVByZWZpeC5oICovLAogCQkJCTkzN0I2M0NDMDlFNzY2RDIwMEE2NzFERCAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLAorCQkJCTBGOTMyNzVBMUMyMEJDREYwMENGNjU2NCAv
KiBkeW5iZW5jaC5jcHAgKi8sCisJCQkJNjUyOUZCMzAxOEIyRDYzOTAwQzYxMTAyIC8qIGdlbmVy
YXRlLWJ5dGVjb2RlLWZpbGVzICovLAorCQkJCUY1QzI5MEU2MDI4NEY5OEUwMTg2MzVDQSAvKiBK
YXZhU2NyaXB0Q29yZVByZWZpeC5oICovLAorCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAv
KiBqc2MuY3BwICovLAogCQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9v
a3VwR2VuZXJhdG9yLnB5ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkg
Ki8sCiAJCQkJOTY4OENCMTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKQEAgLTQz
NjQsOSArNDM5MCwxMiBAQAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlu
cyAqLywKIAkJCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCiAJCQkJ
N0UzOUQ4MUQwRUMzOEVGQTAwM0FGMTFBIC8qIGJ5dGVjb21waWxlciAqLywKKwkJCQkxQzkwNTEz
RTBCQTlFODgzMDA4MUU5RDAgLyogQ29uZmlndXJhdGlvbnMgKi8sCiAJCQkJMTQ4MERCOUEwRERD
MjIzMTAwM0NGREYyIC8qIGRlYnVnZ2VyICovLAorCQkJCTY1MEZERjhEMDlEMEZDQTcwMDc2OUU1
NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8q
IGRmZyAqLywKIAkJCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1ibGVyICov
LAorCQkJCTA4NjdENjlBRkU4NDAyOEZDMDJBQUMwNyAvKiBGcmFtZXdvcmtzICovLAogCQkJCTBG
RUEwOUZDMTcwNTEzN0YwMEJCNzIyQyAvKiBmdGwgKi8sCiAJCQkJMTQyRTMxMkExMzRGRjBBNjAw
QUZBREI1IC8qIGhlYXAgKi8sCiAJCQkJQTVCQTE1REYxODIzNDA5MjAwQTgyRTY5IC8qIGluc3Bl
Y3RvciAqLywKQEAgLTQzNzUsMTkgKzQ0MDQsMTYgQEAKIAkJCQkwRjQ2ODA5QzE0QkE3RjREMDBC
RkUyNzIgLyogbGxpbnQgKi8sCiAJCQkJMEZDRUZBQUQxODA1Q0E0NDAwNDcyQ0U0IC8qIGxsdm0g
Ki8sCiAJCQkJN0UzOUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKKwkJCQkwMzQ3
NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCiAJCQkJOTVBQjgzMUEwREE0MkM2
OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTk5RTQ1QTBDMThBMDFFOTMwMDI2RDg4RiAv
KiByZXBsYXkgKi8sCisJCQkJOTMyRkMzQzIwODI0QkI3MDAwNUIzQzc1IC8qIFJlc291cmNlcyAq
LywKIAkJCQk3RUY2RTBCQjBFQjdBMUVDMDA3OUFGQUYgLyogcnVudGltZSAqLywKKwkJCQk5OTU5
RTkyNTFCRDE3RjFFMDAxQUE0MTMgLyogU2NyaXB0cyAqLywKIAkJCQkxNDEyMTEwMDBBNDg3NzI2
MDA0ODAyNTUgLyogdGVzdHMgKi8sCiAJCQkJODYwM0NFRjAxNEM3NTNFRjAwQUU1OUUzIC8qIHRv
b2xzICovLAogCQkJCTdCOThEMTMzMUI2MENEMUUwMDIzQjFBNCAvKiB3YXNtICovLAogCQkJCTg2
RUFDNDhDMEY5M0U4QjkwMDhFQzk0OCAvKiB5YXJyICovLAotCQkJCTY1MEZERjhEMDlEMEZDQTcw
MDc2OUU1NCAvKiBEZXJpdmVkIFNvdXJjZXMgKi8sCi0JCQkJOTMyRkMzQzIwODI0QkI3MDAwNUIz
Qzc1IC8qIFJlc291cmNlcyAqLywKLQkJCQk5OTU5RTkyNTFCRDE3RjFFMDAxQUE0MTMgLyogU2Ny
aXB0cyAqLywKLQkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFDMDcgLyogRnJhbWV3b3JrcyAqLywK
LQkJCQkwMzQ3NjhERkZGMzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCi0JCQkJMUM5MDUx
M0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25zICovLAogCQkJKTsKIAkJCW5hbWUg
PSBKYXZhU2NyaXB0Q29yZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC01NTIzLDkg
KzU1NDksOSBAQAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmggKi8sCiAJCQkJRTM1RTAzNUQxQjdBQjQzRTAwNzNBRDJBIC8qIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbk9iamVjdC5jcHAgKi8sCiAJCQkJRTM1RTAzNUUxQjdBQjQzRTAwNzNBRDJB
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5oICovLAorCQkJCUE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQzE3QURCNUYzMDA1
QUIxNzQgLyogSW50MTZBcnJheS5oICovLAogCQkJCUE3QThBRjJEMTdBREI1RjMwMDVBQjE3NCAv
KiBJbnQzMkFycmF5LmggKi8sCi0JCQkJQTdBOEFGMkIxN0FEQjVGMzAwNUFCMTc0IC8qIEludDhB
cnJheS5oICovLAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0
aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5j
dGlvbi5oICovLAogCQkJCUExQjlFMjMzMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3Iu
Y3BwICovLApAQCAtNTYxNCw5ICs1NjQwLDkgQEAKIAkJCQlBNTk0NTU5MTE4MjQ3NDQ3MDBDQzM4
NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dhYmxlLmggKi8sCiAJCQkJQkM3NTZGQzYwRTIwMzFC
MjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCAqLywKIAkJCQlCQzc1NkZD
NzBFMjAzMUIyMDBERTdEMTIgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCAqLywKKwkJCQkw
RjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQkwRjJCNjZD
QTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQxNkFycmF5LmggKi8sCiAJCQkJMEYyQjY2Q0IxN0I2
QjVBQjAwQTdBRTNGIC8qIEpTSW50MzJBcnJheS5oICovLAotCQkJCTBGMkI2NkM5MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0ludDhBcnJheS5oICovLAogCQkJCUUzM0Y1MDdFMUI4NDI5QTQwMDQxMzg1
NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgKi8sCiAJCQkJRTMzRjUwN0YxQjg0MjlBNDAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8sCiAJCQkJRTMzRjUwNzYxQjg0MjI1NzAwNDEz
ODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuY3BwICovLApAQCAtNTY0Nyw2ICs1
NjczLDcgQEAKIAkJCQlBNzI3MDA3NzBEQUM2MDU2MDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5o
ICovLAogCQkJCUJDMjJBMzk4MEUxNkUxNDgwMEFGMjFDOCAvKiBKU09iamVjdC5jcHAgKi8sCiAJ
CQkJQkMyMkEzOTkwRTE2RTE0ODAwQUYyMUM4IC8qIEpTT2JqZWN0LmggKi8sCisJCQkJMEY5MzI3
NUUxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5lcy5oICovLAogCQkJCUE3Rjk5MzVF
MEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmNwcCAqLywKIAkJCQlBN0Y5OTM1RDBGRDcz
MjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oICovLAogCQkJCTdDMTg0RTE4MTdCRURCRDMwMDdD
QjYzQSAvKiBKU1Byb21pc2UuY3BwICovLApAQCAtNTY5NCwxMCArNTcyMSwxMCBAQAogCQkJCTUz
RjI1NkUxMUI4N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAq
LywKIAkJCQk1MzkxN0U3QzFCNzkxMTA2MDAwRUJEMzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3Rv
dHlwZS5oICovLAogCQkJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmgg
Ki8sCi0JCQkJMEYyQjY2RDQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDE2QXJyYXkuaCAqLywK
LQkJCQkwRjJCNjZENTE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MzJBcnJheS5oICovLAogCQkJ
CTBGMkI2NkQyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQ4QXJyYXkuaCAqLywKIAkJCQkwRjJC
NjZEMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50OENsYW1wZWRBcnJheS5oICovLAorCQkJCTBG
MkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQxNkFycmF5LmggKi8sCisJCQkJMEYyQjY2
RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDMyQXJyYXkuaCAqLywKIAkJCQlBN0NBM0FFMTE3
REE0MUFFMDA2NTM4QUYgLyogSlNXZWFrTWFwLmNwcCAqLywKIAkJCQlBN0NBM0FFMjE3REE0MUFF
MDA2NTM4QUYgLyogSlNXZWFrTWFwLmggKi8sCiAJCQkJNzA5RkI4NjExQUUzMzVDNjAwMzlEMDY5
IC8qIEpTV2Vha1NldC5jcHAgKi8sCkBAIC01ODcxLDExICs1ODk4LDExIEBACiAJCQkJMEYyRDRE
RTAxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oICovLAogCQkJCTBGMkQ0REUz
MTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlU2V0LmNwcCAqLywKIAkJCQkwRjJENERFNDE5ODMyRDkx
MDA3RDRCMTkgLyogVHlwZVNldC5oICovLAorCQkJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAv
KiBVaW50OEFycmF5LmggKi8sCisJCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4
Q2xhbXBlZEFycmF5LmggKi8sCiAJCQkJQTdBOEFGMzIxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQx
NkFycmF5LmggKi8sCiAJCQkJODY2NzM5RDExM0JGREU3MTAwMjNEODdDIC8qIFVpbnQxNldpdGhG
cmFjdGlvbi5oICovLAogCQkJCUE3QThBRjMzMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJh
eS5oICovLAotCQkJCUE3QThBRjMwMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50OEFycmF5LmggKi8s
Ci0JCQkJQTdBOEFGMzExN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggKi8s
CiAJCQkJMEZFMDUwMjMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgKi8sCiAJCQkJ
MEZFMDUwMjQxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5oICovLAogCQkJCUUxOEUzQTU3
MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi8sCkBAIC03NzUyLDYgKzc3NzksNyBAQAogCQkJ
CTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY5MzI3NUYxQzIxRUY3RjAwQ0Y2NTY0IC8qIEpTT2JqZWN0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5
SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAg
LyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFC
NjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTUwLDYgKzc5Nzgs
MjIgQEAKIC8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAv
KiBkeW5iZW5jaCAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29u
ZmlndXJhdGlvbkxpc3QgPSAwRjkzMjc1NDFDMjBCQ0JBMDBDRjY1NjQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImR5bmJlbmNoIiAqLzsKKwkJCWJ1aWxk
UGhhc2VzID0gKAorCQkJCTBGOTMyNzRGMUMyMEJDQkEwMENGNjU2NCAvKiBTb3VyY2VzICovLAor
CQkJCTBGOTMyNzUxMUMyMEJDQkEwMENGNjU2NCAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJ
CWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5h
bWUgPSBkeW5iZW5jaDsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZl
cmVuY2UgPSAwRjkzMjc1OTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CisJCQlwcm9k
dWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRkNFRkFC
NTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2
ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkNFRkFCNzE4MDVENjE2MDA0
NzJDRTQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxs
dm1Gb3JKU0MiICovOwpAQCAtODE0MCw2ICs4MTg0LDcgQEAKIAkJCQk2NTExMjJGNzE0MDQ2QTRD
MDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKIAkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQg
LyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xz
ICovLAorCQkJCTBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBkeW5iZW5jaCAqLywKIAkJCSk7
CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC04Mzc2LDYgKzg0MjEsMTQg
QEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTMyNzRGMUMyMEJDQkEwMENG
NjU2NCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5MzI3
NUIxQzIwQkNERjAwQ0Y2NTY0IC8qIGR5bmJlbmNoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsK
KwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkNF
RkFCMjE4MDVENjE2MDA0NzJDRTQgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJj
ZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTkyMzUs
NiArOTI4OCwxMSBAQAogLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAog
LyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGOTMyNzVEMUMyMEJG
M0EwMENGNjU2NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFy
Z2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGOTMyNzRFMUMyMEJDQkEwMENGNjU2NCAvKiBk
eW5iZW5jaCAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8q
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEZDRUZBQkQxODA1RDY2MzAwNDcy
Q0U0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBl
bmRlbmN5OwogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JK
U0MgKi87CkBAIC05MzQxLDYgKzkzOTksMzQgQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKKwkJMEY5MzI3NTUxQzIwQkNCQTAwQ0Y2NTY0IC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAq
LzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9Owor
CQkwRjkzMjc1NjFDMjBCQ0JBMDBDRjY1NjQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRjkz
Mjc1NzFDMjBCQ0JBMDBDRjY1NjQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYy
MTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxk
U2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEY5MzI3
NTgxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZDRUZB
QjgxODA1RDYxNjAwNDcyQ0U0IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDBGQ0VGQUJFMTgwNUQ4
NjkwMDQ3MkNFNCAvKiBMTFZNRm9ySlNDLnhjY29uZmlnICovOwpAQCAtOTc0Miw2ICs5ODI4LDE3
IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29u
ZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRjkzMjc1NDFDMjBCQ0JBMDBD
RjY1NjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImR5
bmJlbmNoIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2NCAvKiBEZWJ1ZyAq
LywKKwkJCQkwRjkzMjc1NjFDMjBCQ0JBMDBDRjY1NjQgLyogUmVsZWFzZSAqLywKKwkJCQkwRjkz
Mjc1NzFDMjBCQ0JBMDBDRjY1NjQgLyogUHJvZmlsaW5nICovLAorCQkJCTBGOTMyNzU4MUMyMEJD
QkEwMENGNjU2NCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CisJCX07CiAJCTBGQ0VGQUI3MTgwNUQ2MTYwMDQ3MkNFNCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGx2bUZvckpTQyIgKi8gPSB7CiAJCQlpc2Eg
PSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMy
XzY0LmNwcAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBA
QAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgot
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CiBuYW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRl
ICJEYXRhRm9ybWF0LmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0OCw3ICsyNDgsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0
cmljCiAgICAgCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0s
IHVpZCk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0KGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBz
bG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCkBAIC0yNjAsNyArMjYwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWROb25TdAogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVy
Ojpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSksIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7Ci0gICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXQoZXhlYywgaWRlbnQs
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2UpLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAgICAgUHV0UHJvcGVydHlTbG90IHNs
b3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VW
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOwotICAgIGJhc2VWYWx1ZS5w
dXQoZXhlYywgaWRlbnQsIHZhbHVlLCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4
ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3Rh
dGljX2Nhc3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1
cm47CkBAIC0zMjIsNyArMzIyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWROb25TdAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMt
PmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKIAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gYmFzZVZhbHVlLmlzQ2VsbCgpID8gYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KnZtKSA6IG51bGxwdHI7ICAgIAotICAgIGJhc2VWYWx1ZS5wdXQoZXhlYywgaWRlbnQsIHZhbHVl
LCBzbG90KTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xv
dCk7CiAgICAgCiAgICAgaWYgKGFjY2Vzc1R5cGUgIT0gc3RhdGljX2Nhc3Q8QWNjZXNzVHlwZT4o
c3R1YkluZm8tPmFjY2Vzc1R5cGUpKQogICAgICAgICByZXR1cm47CkBAIC00MjIsNyArNDIyLDcg
QEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbQogICAgICAgICBieVZh
bEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKLSAgICBi
YXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKKyAgICBiYXNl
VmFsdWUucHV0SW5saW5lKGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAog
c3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZv
KiBieVZhbEluZm8pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyMCw3ICs2MjAs
NyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgaWYgKHBj
WzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElzRGlyZWN0KQogICAgICAgICBhc09iamVjdChi
YXNlVmFsdWUpLT5wdXREaXJlY3Qodm0sIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUoKSwg
c2xvdCk7CiAgICAgZWxzZQotICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCBMTElO
VF9PUF9DKDMpLmpzVmFsdWUoKSwgc2xvdCk7CisgICAgICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUo
ZXhlYywgaWRlbnQsIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBzbG90KTsKICAgICBMTElOVF9D
SEVDS19FWENFUFRJT04oKTsKICAgICAKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xP
VwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlz
aW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDcgQEAgc3RydWN0IENsYXNzSW5mbyB7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIGhhc1N0YXRpY1NldHRlck9y
UmVhZG9ubHlQcm9wZXJ0aWVzKCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBo
YXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0OwogCiAgICAgY29uc3Qg
SGFzaFRhYmxlKiBzdGF0aWNQcm9wSGFzaFRhYmxlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAkocmV2aXNpb24gMTk0MTY1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJDb25zb2xlQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
U2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ3VzdG9tR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE5NDE2NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgQ3VzdG9tU2V0dGVy
IG1fc2V0dGVyOwogfTsKIAotdm9pZCBjYWxsQ3VzdG9tU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFs
dWUgY3VzdG9tR2V0dGVyU2V0dGVyLCBKU09iamVjdCogYmFzZSwgSlNWYWx1ZSB0aGlzVmFsdWUs
IEpTVmFsdWUgdmFsdWUpOworSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjYWxsQ3VzdG9tU2V0dGVy
KEV4ZWNTdGF0ZSosIEpTVmFsdWUgY3VzdG9tR2V0dGVyU2V0dGVyLCBKU09iamVjdCogYmFzZSwg
SlNWYWx1ZSB0aGlzVmFsdWUsIEpTVmFsdWUgdmFsdWUpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3JJbnN0YW5j
ZS5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Vycm9ySW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNTAgKzEyOCw2IEBAIHBy
aXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleDsKIH07CiAKLXN0YXRpYyBib29sIGFkZEVycm9y
SW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU09iamVj
dCogb2JqLCBib29sIHVzZUN1cnJlbnRGcmFtZSwgQ2FsbEZyYW1lKiYgY2FsbEZyYW1lLCB1bnNp
Z25lZCAmYnl0ZWNvZGVPZmZzZXQpCi17Ci0gICAgVmVjdG9yPFN0YWNrRnJhbWU+IHN0YWNrVHJh
Y2UgPSBWZWN0b3I8U3RhY2tGcmFtZT4oKTsKLQotICAgIGlmIChleGVjICYmIHN0YWNrVHJhY2Uu
aXNFbXB0eSgpKQotICAgICAgICB2bS5pbnRlcnByZXRlci0+Z2V0U3RhY2tUcmFjZShzdGFja1Ry
YWNlKTsKLQotICAgIGlmICghc3RhY2tUcmFjZS5pc0VtcHR5KCkpIHsKLQotICAgICAgICBBU1NF
UlQoZXhlYyA9PSB2bS50b3BDYWxsRnJhbWUgfHwgZXhlYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKSB8fCBleGVjID09IGV4ZWMtPnZtRW50cnlHbG9iYWxPYmpl
Y3QoKS0+Z2xvYmFsRXhlYygpKTsKLQotICAgICAgICBTdGFja0ZyYW1lKiBzdGFja0ZyYW1lOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwIDsgaSA8IHN0YWNrVHJhY2Uuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIHN0YWNrRnJhbWUgPSAmc3RhY2tUcmFjZS5hdChpKTsKLSAgICAgICAg
ICAgIGlmIChzdGFja0ZyYW1lLT5ieXRlY29kZU9mZnNldCkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChieXRlY29kZU9mZnNldCkgewotICAgICAgICAg
ICAgRmluZEZpcnN0Q2FsbGVyRnJhbWVXaXRoQ29kZWJsb2NrRnVuY3RvciBmdW5jdG9yKGV4ZWMp
OwotICAgICAgICAgICAgdm0udG9wQ2FsbEZyYW1lLT5pdGVyYXRlKGZ1bmN0b3IpOwotICAgICAg
ICAgICAgY2FsbEZyYW1lID0gZnVuY3Rvci5mb3VuZENhbGxGcmFtZSgpOwotICAgICAgICAgICAg
dW5zaWduZWQgc3RhY2tJbmRleCA9IGZ1bmN0b3IuaW5kZXgoKTsKLSAgICAgICAgICAgIGJ5dGVj
b2RlT2Zmc2V0ID0gc3RhY2tUcmFjZS5hdChzdGFja0luZGV4KS5ieXRlY29kZU9mZnNldDsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGluZTsKLSAgICAgICAgdW5zaWdu
ZWQgY29sdW1uOwotICAgICAgICBzdGFja0ZyYW1lLT5jb21wdXRlTGluZUFuZENvbHVtbihsaW5l
LCBjb2x1bW4pOwotICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
bGluZSwganNOdW1iZXIobGluZSksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0gICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jb2x1bW4sIGpzTnVtYmVyKGNvbHVt
biksIFJlYWRPbmx5IHwgRG9udERlbGV0ZSk7Ci0KLSAgICAgICAgaWYgKCFzdGFja0ZyYW1lLT5z
b3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnNvdXJjZVVSTCwganNTdHJpbmcoJnZtLCBzdGFja0ZyYW1lLT5zb3VyY2VV
UkwpLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotICAgIAotICAgICAgICBpZiAoIXVzZUN1cnJl
bnRGcmFtZSkKLSAgICAgICAgICAgIHN0YWNrVHJhY2UucmVtb3ZlKDApOwotICAgICAgICBvYmot
PnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+c3RhY2ssIHZtLmludGVycHJldGVyLT5z
dGFja1RyYWNlQXNTdHJpbmcodm0udG9wQ2FsbEZyYW1lLCBzdGFja1RyYWNlKSwgRG9udEVudW0p
OwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
IHZvaWQgRXJyb3JJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgYm9vbCB1c2VDdXJyZW50RnJhbWUpCiB7CiAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2V0dGVyU2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NyArMTQ0LDcgQEAgaW5saW5lIEdldHRlclNldHRlciogYXNHZXR0ZXJTZXR0ZXIoSlNWYQogfQog
CiBKU1ZhbHVlIGNhbGxHZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSBiYXNlLCBKU1ZhbHVlIGdl
dHRlclNldHRlcik7Ci12b2lkIGNhbGxTZXR0ZXIoRXhlY1N0YXRlKiwgSlNWYWx1ZSBiYXNlLCBK
U1ZhbHVlIGdldHRlclNldHRlciwgSlNWYWx1ZSwgRUNNQU1vZGUpOworSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjYWxsU2V0dGVyKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0
ZXJTZXR0ZXIsIEpTVmFsdWUsIEVDTUFNb2RlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9u
IDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbklubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdElubGluZXMuaCIKICNpbmNs
dWRlICJKU1Byb3h5LmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5o
CShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Nyw2ICsyNzcsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKSBjb25zdDsKIAogICAgIHZvaWQgcHV0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgdm9pZCBwdXRJbmxpbmUoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIHB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwdXRU
b1ByaW1pdGl2ZUJ5SW5kZXgoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCBib29sIHNob3VsZFRocm93KTsKICAgICB2b2lkIHB1dEJ5SW5kZXgoRXhlY1N0YXRlKiwg
dW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMu
aAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNG
dW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIApAQCAtNzUxLDYg
Kzc1MiwyNCBAQCBpbmxpbmUgdm9pZCBKU1ZhbHVlOjpwdXQoRXhlY1N0YXRlKiBleGVjCiAgICAg
YXNDZWxsKCktPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXQoYXNDZWxsKCksIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNWYWx1
ZTo6cHV0SW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIGlmIChVTkxJS0VM
WSghaXNDZWxsKCkpKSB7CisgICAgICAgIHB1dFRvUHJpbWl0aXZlKGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEpTQ2VsbCogY2Vs
bCA9IGFzQ2VsbCgpOworICAgIGF1dG8gcHV0TWV0aG9kID0gY2VsbC0+bWV0aG9kVGFibGUoZXhl
Yy0+dm0oKSktPnB1dDsKKyAgICBpZiAoTElLRUxZKHB1dE1ldGhvZCA9PSBKU09iamVjdDo6cHV0
KSkgeworICAgICAgICBKU09iamVjdDo6cHV0SW5saW5lKGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUHV0UHJvcGVy
dHlTbG90IG90aGVyU2xvdCA9IHNsb3Q7CisgICAgcHV0TWV0aG9kKGNlbGwsIGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIG90aGVyU2xvdCk7CisgICAgc2xvdCA9IG90aGVyU2xvdDsKK30KKwog
aW5saW5lIHZvaWQgSlNWYWx1ZTo6cHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIWlzQ2VsbCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsNDAgKzM3
MiwyMCBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4CiAvLyBFQ01B
IDguNi4yLjIKIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhl
YywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KQogewotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFs
dWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOworICAg
IHB1dElubGluZShjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKK30KKwor
dm9pZCBKU09iamVjdDo6cHV0SW5saW5lU2xvdyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sK
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIAotICAgIC8vIFRyeSBpbmRleGVkIHB1dCBm
aXJzdC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MsIHNpbmNlIGxvYWRzIG9uIHBy
b3BlcnR5IG5hbWVzIHRoYXQgYXBwZWFyIGxpa2UKLSAgICAvLyB2YWxpZCBpbmRpY2VzIHdpbGwg
bmV2ZXIgbG9vayBpbiB0aGUgbmFtZWQgcHJvcGVydHkgc3RvcmFnZS4KLSAgICBpZiAoT3B0aW9u
YWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7Ci0gICAgICAg
IHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSwgdmFsdWUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIC8vIENo
ZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRoZSBwcm90b3R5cGUg
Y2hhaW4KLSAgICBKU1ZhbHVlIHByb3RvdHlwZTsKLSAgICBpZiAocHJvcGVydHlOYW1lICE9IGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pIHsKLSAgICAgICAgZm9yIChKU09i
amVjdCogb2JqID0gdGhpc09iamVjdDsgIW9iai0+c3RydWN0dXJlKHZtKS0+aGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpOyBvYmogPSBhc09iamVjdChw
cm90b3R5cGUpKSB7Ci0gICAgICAgICAgICBwcm90b3R5cGUgPSBvYmotPnByb3RvdHlwZSgpOwot
ICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkgewotICAgICAgICAgICAgICAgIEFT
U0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNl
cHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkpOwotICAgICAgICAgICAgICAgIGlm
ICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIDAsIHNsb3QpCi0gICAgICAgICAgICAgICAgICAgICYmIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJ
TGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAKLSAgICBK
U09iamVjdCogb2JqOwotICAgIGZvciAob2JqID0gdGhpc09iamVjdDsgOyBvYmogPSBhc09iamVj
dChwcm90b3R5cGUpKSB7CisgICAgSlNPYmplY3QqIG9iaiA9IHRoaXM7CisgICAgZm9yICg7Oykg
ewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwogICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8o
ZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAgICAgICAg
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CkBAIC00MTMsOCArMzkzLDggQEAgdm9pZCBKU09iamVjdDo6cHV0
KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogCiAgICAgICAgICAgICBKU1ZhbHVlIGdzID0gb2JqLT5n
ZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgICAgIGlmIChncy5pc0dldHRlclNldHRlcigpKSB7
Ci0gICAgICAgICAgICAgICAgY2FsbFNldHRlcihleGVjLCBjZWxsLCBncywgdmFsdWUsIHNsb3Qu
aXNTdHJpY3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCisgICAg
ICAgICAgICAgICAgY2FsbFNldHRlcihleGVjLCB0aGlzLCBncywgdmFsdWUsIHNsb3QuaXNTdHJp
Y3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZSk7CisgICAgICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUoKS0+aXNEaWN0aW9uYXJ5KCkpCiAgICAgICAgICAgICAgICAgICAgIHNs
b3Quc2V0Q2FjaGVhYmxlU2V0dGVyKG9iaiwgb2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC00MzgsMTUgKzQxOCwxNSBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CisgICAg
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgaWYgKHBy
b3RvdHlwZS5pc051bGwoKSkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBvYmogPSBhc09i
amVjdChwcm90b3R5cGUpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0
cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgp
LCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKLSAgICBpZiAoIXRoaXNPYmpl
Y3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVl
LCAwLCBzbG90KSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgIEFTU0VSVCghc3RydWN0dXJl
KHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3Bl
cnR5TmFtZSkgfHwgb2JqID09IHRoaXMpOworICAgIGlmICghcHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpICYmIHNsb3QuaXNTdHJp
Y3RNb2RlKCkpCiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKLSAgICByZXR1cm47CiB9CiAKIHZv
aWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRUaHJvdykKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTk0
MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICByZXR1cm4gbV9idXR0ZXJmbHkuZ2V0KHRoaXMpLT52ZWN0b3JMZW5ndGgoKTsK
ICAgICB9Ci0gICAgICAgIAorICAgIAorICAgIHN0YXRpYyB2b2lkIHB1dElubGluZShKU0NlbGwq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwor
ICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dChKU0NlbGwqLCBFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHB1dEJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAg
ICAgICAgCkBAIC04NTIsMTEgKzg1NCwxMyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB1dE1v
ZGU+CiAgICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1
ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBORVZFUl9JTkxJTkUgdm9pZCBwdXRJbmxpbmVTbG93KEV4ZWNTdGF0ZSosIFByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisKICAgICBib29sIGlubGluZUdldE93
blByb3BlcnR5U2xvdChWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVydHlTbG90KFBy
b3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9p
ZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVu
c2lnbmVkLCBTdHJ1Y3R1cmUmKTsKIAotICAgIGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBmaW5kUHJv
cGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBjb25zdCBIYXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFt
ZSkgY29uc3Q7CiAgICAgICAgIAogICAgIHZvaWQgcHV0SW5kZXhlZERlc2NyaXB0b3IoRXhlY1N0
YXRlKiwgU3BhcnNlQXJyYXlFbnRyeSosIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYsIFByb3Bl
cnR5RGVzY3JpcHRvciYgb2xkKTsKICAgICAgICAgCkBAIC0xMDkwLDEzICsxMDk0LDIzIEBAIEFM
V0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3cKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdChvZmZzZXQpOwotICAgIGlmIChz
dHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0
dGVyKCkpCi0gICAgICAgIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgdmFsdWUsIGF0dHJp
YnV0ZXMsIG9mZnNldCk7Ci0gICAgZWxzZSBpZiAoc3RydWN0dXJlLmhhc0N1c3RvbUdldHRlclNl
dHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5pc0N1c3RvbUdldHRlclNldHRlcigpKQotICAgICAg
ICBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIHZhbHVlLCBhdHRyaWJ1dGVzLCBz
dHJ1Y3R1cmUpOwotICAgIGVsc2UKLSAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBhdHRyaWJ1
dGVzLCB2YWx1ZSwgb2Zmc2V0KTsKLQorICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkgeworICAgICAg
ICBBU1NFUlQodmFsdWUpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwoKTsK
KyAgICAgICAgSlNUeXBlIHR5cGUgPSBjZWxsLT50eXBlKCk7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEdldHRlclNldHRlclR5cGU6CisgICAgICAgICAgICBmaWxsR2V0
dGVyUHJvcGVydHlTbG90KHNsb3QsIHZhbHVlLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgQ3VzdG9tR2V0dGVyU2V0dGVyVHlwZToK
KyAgICAgICAgICAgIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3Qoc2xvdCwgdmFsdWUsIGF0
dHJpYnV0ZXMsIHN0cnVjdHVyZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHNsb3Quc2V0VmFsdWUodGhpcywgYXR0cmlidXRlcywgdmFsdWUsIG9mZnNldCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTExODcsNyArMTIwMSw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2Jq
ZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0KIAogdGVtcGxhdGU8SlNPYmplY3Q6OlB1dE1vZGUgbW9k
ZT4KLWlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK0FMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAh
IShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0
ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAo
cG1rQHBvc3QuY29tKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LCAyMDA5LCAy
MDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBKU09iamVjdElubGluZXNfaAorI2RlZmluZSBKU09iamVjdElubGluZXNfaAorCisjaW5j
bHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIkxvb2t1cC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gRUNNQSA4LjYuMi4yCitBTFdBWVNfSU5MSU5FIHZv
aWQgSlNPYmplY3Q6OnB1dElubGluZShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBz
bG90KQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Vs
bCk7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAodGhpc09iamVjdCkpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgLy8gVHJ5IGluZGV4ZWQgcHV0IGZpcnN0LiBUaGlz
IGlzIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcywgc2luY2UgbG9hZHMgb24gcHJvcGVydHkgbmFt
ZXMgdGhhdCBhcHBlYXIgbGlrZQorICAgIC8vIHZhbGlkIGluZGljZXMgd2lsbCBuZXZlciBsb29r
IGluIHRoZSBuYW1lZCBwcm9wZXJ0eSBzdG9yYWdlLgorICAgIGlmIChPcHRpb25hbDx1aW50MzJf
dD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgcHV0QnlJbmRl
eCh0aGlzT2JqZWN0LCBleGVjLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgc2xvdC5pc1N0cmljdE1v
ZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ2hlY2sgaWYgdGhl
cmUgYXJlIGFueSBzZXR0ZXJzIG9yIGdldHRlcnMgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgorICAg
IEpTVmFsdWUgcHJvdG90eXBlOworICAgIGlmIChwcm9wZXJ0eU5hbWUgIT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnVuZGVyc2NvcmVQcm90bykgeworICAgICAgICBmb3IgKEpTT2JqZWN0KiBvYmog
PSB0aGlzT2JqZWN0OyAhb2JqLT5zdHJ1Y3R1cmUodm0pLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCk7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkp
IHsKKyAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CisgICAgICAgICAg
ICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCF0aGlz
T2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8o
ZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzT2Jq
ZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1
ZSwgMCwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0
cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHRoaXNPYmplY3Qt
PnB1dElubGluZVNsb3coZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSlNPYmplY3RJbmxpbmVzX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>267486</attachid>
            <date>2015-12-16 13:13:48 -0800</date>
            <delta_ts>2015-12-16 13:13:48 -0800</delta_ts>
            <desc>one more time!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49980</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE1LTEyLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wcm92ZSBKU09iamVjdDo6cHV0IHBlcmZvcm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNDcKKworICAgICAgICBSZXZpZXdlZCBieSBH
ZW9mZnJleSBHYXJlbi4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgYmVuY2htYXJrIGNhbGxl
ZCBkeW5iZW5jaCwgd2hpY2gganVzdCB1c2VzIHRoZSBDKysgQVBJIHRvIGNyZWF0ZSwgbW9kaWZ5
LCBhbmQKKyAgICAgICAgcXVlcnkgb2JqZWN0cy4gVGhpcyBhbHNvIGFkZHMgc29tZSBvcHRpbWl6
YXRpb25zIHRvIG1ha2UgdGhlIEpTT2JqZWN0OjpwdXQgY29kZSBmYXN0ZXIgYnkgbWFraW5nCisg
ICAgICAgIGl0IGlubGluYWJsZSBpbiBwbGFjZXMgdGhhdCByZWFsbHkgbmVlZCB0aGUgcGVyZm9y
bWFuY2UsIGxpa2UgSklUT3BlcmF0aW9ucyBhbmQgTExJbnRTbG93UGF0aHMuCisgICAgICAgIElu
bGluaW5nIGl0IGlzIG9wdGlvbmFsIGJlY2F1c2UgdGhlIHB1dCgpIG1ldGhvZCBpcyBsYXJnZS4g
SWYgeW91IHdhbnQgaXQgaW5saW5lZCwgY2FsbAorICAgICAgICBwdXRJbmxpbmUoKS4gVGhlcmUn
cyBhIHB1dElubGluZSgpIHZhcmlhbnQgb2YgYm90aCBKU09iamVjdDo6cHV0KCkgYW5kIEpTVmFs
dWU6OnB1dCgpLgorCisgICAgICAgIFRoaXMgaXMgdXAgdG8gYSAyMCUgaW1wcm92ZW1lbnQgZm9y
IEpTT2JqZWN0OjpwdXQgY2FsbHMgdGhhdCBnZXQgaW5saW5lZCBhbGwgdGhlIHdheSAobGlrZSBm
cm9tCisgICAgICAgIEpJVE9wZXJhdGlvbnMgYW5kIHRoZSBuZXcgYmVuY2htYXJrKSBhbmQgaXQn
cyBhbHNvIGEgc3BlZWQtdXAsIGFsYmVpdCBhIHNtYWxsZXIgb25lLCBmb3IKKyAgICAgICAgSlNP
YmplY3Q6OnB1dCBjYWxscyB0aGF0IGRvbid0IGdldCBpbmxpbmVkIChpLmUuIHRob3NlIGZyb20g
dGhlIERPTSBhbmQgdGhlIEpTQyBDKysgbGlicmFyeSBjb2RlKS4KKyAgICAgICAgU3BlY2lmaWMg
c3BlZWQtdXBzIGFyZSBhcyBmb2xsb3dzLiBOb3RlIHRoYXQgImR5bmFtaWMgY29udGV4dCIgbWVh
bnMgdGhhdCB3ZSB0b2xkIFB1dFByb3BlcnR5U2xvdAorICAgICAgICB0aGF0IHdlJ3JlIG5vdCBh
IHN0YXRpYyBwdXRfYnlfaWQsIHdoaWNoIHR1cm5zIG9mZiBzb21lIHR5cGUgaW5mZXJlbmNlLgor
CisgICAgICAgIEdldCBCeSBJZDogMiUgZmFzdGVyCisgICAgICAgIFB1dCBCeSBJZCBSZXBsYWNl
OiAyMyUgZmFzdGVyCisgICAgICAgIFB1dCBCeSBJZCBUcmFuc2l0aW9uICsgb2JqZWN0IGFsbG9j
YXRpb246IDExJSBmYXN0ZXIKKyAgICAgICAgR2V0IEJ5IElkIHcvIGR5bmFtaWMgY29udGV4dDog
NSUgZmFzdGVyCisgICAgICAgIFB1dCBCeSBJZCBSZXBsYWNlIHcvIGR5bmFtaWMgY29udGV4dDog
MjUlIGZhc3RlcgorICAgICAgICBQdXQgQnkgSWQgVHJhbnNpdGlvbiArIG9iamVjdCBhbGxvY2F0
aW9uIHcvIGR5bmFtaWMgY29udGV4dDogMTAlIGZhc3RlcgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkeW5iZW5jaC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpiZW5jaG1hcmtJbXBsKToKKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcDoKKyAgICAgICAgKiBqaXQv
Q2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3Bw
OgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJ
bnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKiBydW50aW1lL0NsYXNzSW5mby5o
OgorICAgICAgICAoSlNDOjpDbGFzc0luZm86Omhhc1N0YXRpY1Byb3BlcnRpZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgICogcnVudGltZS9DdXN0b21H
ZXR0ZXJTZXR0ZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwOgorICAg
ICAgICAoSlNDOjpFcnJvckluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OmFkZEVycm9ySW5mb0FuZEdldEJ5dGVjb2RlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0dldHRlclNldHRlci5oOgorICAgICAgICAoSlNDOjphc0dldHRlclNldHRlcik6Cisg
ICAgICAgICogcnVudGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmg6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAo
SlNDOjpKU1ZhbHVlOjpwdXQpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dEJ5SW5kZXgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFZlY3Rvckxlbmd0aCk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToK
KwogMjAxNS0xMi0xNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFdvcmsgYXJvdW5kIGEgYnVnIGluIExMVk0gYnkgZmxpcHBpbmcgdGhlIHVuaWZpY2F0aW9uIG9y
ZGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9keW5iZW5jaC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZHluYmVuY2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTTG9jay5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiVk0uaCIKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIHsKKworU3RhdGljTG9jayBjcmFzaExvY2s7
Citjb25zdCBjaGFyKiBuYW1lRmlsdGVyOwordW5zaWduZWQgcmVxdWVzdGVkSXRlcmF0aW9uQ291
bnQ7CisKKyNkZWZpbmUgQ0hFQ0soeCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEhKHgpKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgY3Jhc2hMb2NrLmxvY2soKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShf
X0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICN4KTsgXAorICAgICAgICBD
UkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFj
az4KK05FVkVSX0lOTElORSB2b2lkIGJlbmNobWFya0ltcGwoY29uc3QgY2hhciogbmFtZSwgdW5z
aWduZWQgaXRlcmF0aW9uQ291bnQsIGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykKK3sKKyAgICBp
ZiAobmFtZUZpbHRlciAmJiAhc3RyY2FzZXN0cihuYW1lLCBuYW1lRmlsdGVyKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50KQorICAgICAgICBpdGVy
YXRpb25Db3VudCA9IHJlcXVlc3RlZEl0ZXJhdGlvbkNvdW50OworICAgIAorICAgIGRvdWJsZSBi
ZWZvcmUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWVNUygpOworICAgIGNhbGxiYWNrKGl0
ZXJhdGlvbkNvdW50KTsKKyAgICBkb3VibGUgYWZ0ZXIgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWVNUygpOworICAgIGRhdGFMb2cobmFtZSwgIjogIiwgYWZ0ZXIgLSBiZWZvcmUsICIgbXMu
XG4iKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICBpZiAoYXJnYyA+PSAyKSB7CisgICAgICAgIGlmIChhcmd2
WzFdWzBdID09ICctJykgeworICAgICAgICAgICAgZGF0YUxvZygiVXNhZ2U6IGR5bmJlbmNoIFs8
ZmlsdGVyPiBbPGl0ZXJhdGlvbiBjb3VudD5dXVxuIik7CisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgfQorCisgICAgICAgIG5hbWVGaWx0ZXIgPSBhcmd2WzFdOworCisgICAgICAgIGlm
IChhcmdjID49IDMpIHsKKyAgICAgICAgICAgIGlmIChzc2NhbmYoYXJndlsyXSwgIiV1IiwgJnJl
cXVlc3RlZEl0ZXJhdGlvbkNvdW50KSAhPSAxKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygi
Q291bGQgbm90IHBhcnNlIGl0ZXJhdGlvbiBjb3VudCAiLCBhcmd2WzJdLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CisgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CisKKyAgICBWTSogdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtS
ZWYoKTsKKyAgICB7CisgICAgICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworCisgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPQorICAgICAgICAgICAgSlNHbG9iYWxPYmpl
Y3Q6OmNyZWF0ZSgqdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnZtLCBqc051
bGwoKSkpOworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKTsKKworICAgICAgICBJZGVudGlmaWVyIGlkZW50RiA9IElkZW50aWZpZXI6OmZyb21TdHJp
bmcoZXhlYywgImYiKTsKKyAgICAgICAgSWRlbnRpZmllciBpZGVudEcgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKGV4ZWMsICJnIik7CisKKyAgICAgICAgU3RydWN0dXJlKiBvYmplY3RTdHJ1Y3R1
cmUgPQorICAgICAgICAgICAgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp2bSwgZ2xv
YmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCAyKTsKKworICAgICAg
ICAvLyBOb24tc3RyaWN0IGR5bmFtaWMgZ2V0IGJ5IGlkOgorICAgICAgICBKU1ZhbHVlIG9iamVj
dCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFBy
b3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMs
IGlkZW50RiwganNOdW1iZXIoNDIpLCBzbG90KTsKKyAgICAgICAgfQorICAgICAgICB7CisgICAg
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNs
b3Q6OlB1dEJ5SWQpOworICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcs
IGpzTnVtYmVyKDQzKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgK
KyAgICAgICAgICAgICJOb24gU3RyaWN0IER5bmFtaWMgR2V0IEJ5IElkIiwKKyAgICAgICAgICAg
IDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsK
KyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlk
ZW50Rik7CisgICAgICAgICAgICAgICAgICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0Mikp
OworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmplY3QuZ2V0KGV4ZWMsIGlkZW50Ryk7
CisgICAgICAgICAgICAgICAgICAgIENIRUNLKHJlc3VsdCA9PSBqc051bWJlcig0MykpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIE5vbi1zdHJpY3Qg
ZHluYW1pYyBwdXQgYnkgaWQgcmVwbGFjZToKKyAgICAgICAgb2JqZWN0ID0gSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKCp2bSwgb2JqZWN0U3RydWN0dXJlKTsKKyAgICAgICAgeworICAgICAgICAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSwgUHV0UHJvcGVydHlTbG90OjpQdXRC
eUlkKTsKKyAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJl
cig0MiksIHNsb3QpOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7Cisg
ICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoNDMpLCBz
bG90KTsKKyAgICAgICAgfQorICAgICAgICBiZW5jaG1hcmtJbXBsKAorICAgICAgICAgICAgIk5v
biBTdHJpY3QgRHluYW1pYyBQdXQgQnkgSWQgUmVwbGFjZSIsCisgICAgICAgICAgICAxMDAwMDAw
LAorICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpdGVyYXRpb25Db3VudCkgeworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXJhdGlvbkNvdW50OyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KG9iamVjdCwgZmFsc2UsIFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RiwganNOdW1iZXIoaSks
IHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2Us
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmpl
Y3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCB0cmFuc2l0aW9uIHdpdGggb2JqZWN0
IGFsbG9jYXRpb246CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAgICAgICAiTm9uIFN0
cmljdCBEeW5hbWljIEFsbG9jYXRpb24gYW5kIFB1dCBCeSBJZCBUcmFuc2l0aW9uIiwKKyAgICAg
ICAgICAgIDEwMDAwMDAsCisgICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50
KSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0
OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNl
LCBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlLCBQdXRQcm9wZXJ0eVNsb3Q6
OlB1dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVj
LCBpZGVudEcsIGpzTnVtYmVyKGkpLCBzbG90KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIE5vbi1zdHJpY3Qg
ZHluYW1pYyBnZXQgYnkgaWQgd2l0aCBkeW5hbWljIHN0b3JlIGNvbnRleHQ6CisgICAgICAgIG9i
amVjdCA9IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdm0sIG9iamVjdFN0cnVjdHVyZSk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwgZmFsc2UpOwor
ICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEYsIGpzTnVtYmVyKDQyKSwg
c2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3Qob2JqZWN0LCBmYWxzZSk7CisgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMs
IGlkZW50RywganNOdW1iZXIoNDMpLCBzbG90KTsKKyAgICAgICAgfQorICAgICAgICBiZW5jaG1h
cmtJbXBsKAorICAgICAgICAgICAgIk5vbiBTdHJpY3QgRHluYW1pYyBHZXQgQnkgSWQgV2l0aCBE
eW5hbWljIFN0b3JlIENvbnRleHQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAg
IFsmXSAodW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRGKTsKKyAgICAgICAgICAgICAg
ICAgICAgQ0hFQ0socmVzdWx0ID09IGpzTnVtYmVyKDQyKSk7CisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG9iamVjdC5nZXQoZXhlYywgaWRlbnRHKTsKKyAgICAgICAgICAgICAgICAgICAg
Q0hFQ0socmVzdWx0ID09IGpzTnVtYmVyKDQzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmljdCBkeW5hbWljIHB1dCBieSBpZCByZXBs
YWNlIHdpdGggZHluYW1pYyBzdG9yZSBjb250ZXh0OgorICAgICAgICBvYmplY3QgPSBKU0ZpbmFs
T2JqZWN0OjpjcmVhdGUoKnZtLCBvYmplY3RTdHJ1Y3R1cmUpOworICAgICAgICB7CisgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgIG9i
amVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcig0MiksIHNsb3QpOworICAgICAg
ICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCwg
ZmFsc2UpOworICAgICAgICAgICAgb2JqZWN0LnB1dElubGluZShleGVjLCBpZGVudEcsIGpzTnVt
YmVyKDQzKSwgc2xvdCk7CisgICAgICAgIH0KKyAgICAgICAgYmVuY2htYXJrSW1wbCgKKyAgICAg
ICAgICAgICJOb24gU3RyaWN0IER5bmFtaWMgUHV0IEJ5IElkIFJlcGxhY2UgV2l0aCBEeW5hbWlj
IFN0b3JlIENvbnRleHQiLAorICAgICAgICAgICAgMTAwMDAwMCwKKyAgICAgICAgICAgIFsmXSAo
dW5zaWduZWQgaXRlcmF0aW9uQ291bnQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpdGVyYXRpb25Db3VudDsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBq
c051bWJlcihpKSwgc2xvdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2Jq
ZWN0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4
ZWMsIGlkZW50RywganNOdW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gTm9uLXN0cmlj
dCBkeW5hbWljIHB1dCBieSBpZCB0cmFuc2l0aW9uIHdpdGggb2JqZWN0IGFsbG9jYXRpb24gd2l0
aCBkeW5hbWljIHN0b3JlIGNvbnRleHQ6CisgICAgICAgIGJlbmNobWFya0ltcGwoCisgICAgICAg
ICAgICAiTm9uIFN0cmljdCBEeW5hbWljIEFsbG9jYXRpb24gYW5kIFB1dCBCeSBJZCBUcmFuc2l0
aW9uIFdpdGggRHluYW1pYyBTdG9yZSBDb250ZXh0IiwKKyAgICAgICAgICAgIDEwMDAwMDAsCisg
ICAgICAgICAgICBbJl0gKHVuc2lnbmVkIGl0ZXJhdGlvbkNvdW50KSB7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gaXRlcmF0aW9uQ291bnQ7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBvYmplY3QgPSBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnZtLCBvYmpl
Y3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3QsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9iamVjdC5wdXRJbmxpbmUoZXhlYywgaWRlbnRGLCBqc051bWJlcihpKSwgc2xv
dCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Qob2JqZWN0LCBmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QucHV0SW5saW5lKGV4ZWMsIGlkZW50RywganNO
dW1iZXIoaSksIHNsb3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgY3Jhc2hMb2NrLmxvY2soKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQli
dWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY5MzI3NUQx
QzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJMEZFQzg1QjEx
QkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYx
NTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTEx
NTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCkBAIC00ODIsNiArNDgz
LDEwIEBACiAJCTBGOTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQyMzE1ODUzQ0RF
MDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJs
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkx
OUQyNzE1ODU2NzcwMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwICovOyB9OwogCQkwRjkzMjc0
RDFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc0QzFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5m
by5jcHAgKi87IH07CisJCTBGOTMyNzUyMUMyMEJDQkEwMENGNjU2NCAvKiBGb3VuZGF0aW9uLmZy
YW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsK
KwkJMEY5MzI3NTMxQzIwQkNCQTAwQ0Y2NTY0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5
MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBG
OTMyNzVCMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzMjc1QTFDMjBCQ0RGMDBDRjY1NjQgLyog
ZHluYmVuY2guY3BwICovOyB9OworCQkwRjkzMjc1RjFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmpl
Y3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjkzMjc1RTFDMjFFRjdGMDBDRjY1NjQgLyogSlNPYmplY3RJbmxpbmVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUQxNENBN0RD
MzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5jcHAgKi87IH07CiAJCTBGOTMzMjlFMTRDQTdEQzUwMDg1RjNDNiAvKiBDYWxsTGlu
a1N0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5MzMyOTQxNENBN0RDMTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MzMyOUYxNENBN0RDQTAw
ODVGM0M2IC8qIEdldEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOTUxNENBN0RDMTAwODVGM0M2IC8qIEdldEJ5SWRTdGF0
dXMuY3BwICovOyB9OwpAQCAtMjA1Nyw2ICsyMDYyLDEzIEBACiAvKiBFbmQgUEJYQnVpbGRGaWxl
IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8K
KwkJMEY5MzI3NUMxQzIwQkYzQTAwQ0Y2NTY0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9
IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9
IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5
VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGOTMyNzRFMUMyMEJDQkEwMENG
NjU2NDsKKwkJCXJlbW90ZUluZm8gPSBkeW5iZW5jaDsKKwkJfTsKIAkJMEZDRUZBQkMxODA1RDY2
MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1OTQsNiArMjYwNiw5IEBACiAJCTBG
OTE5RDIzMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhdGNocG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5MTlEMjcxNTg1Njc3MDAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbFRhYmxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MzI3NEMxQzFGNjZBQTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BSSW5mby5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTMyNzU5MUMyMEJDQkEwMENGNjU2NCAvKiBkeW5i
ZW5jaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNv
bXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gZHlu
YmVuY2g7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGOTMyNzVBMUMy
MEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBkeW5iZW5jaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
OTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGluZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPYmplY3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOTMzMjkzMTRDQTdEQzEwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsTGlua1N0YXR1cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTMzMjk0MTRDQTdEQzEwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxsTGlua1N0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkzMzI5NTE0
Q0E3REMxMDA4NUYzQzYgLyogR2V0QnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHZXRCeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTQyNTIsNiArNDI2NywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJ
CTBGOTMyNzUxMUMyMEJDQkEwMENGNjU2NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OworCQkJZmlsZXMgPSAoCisJCQkJMEY5MzI3NTIxQzIwQkNCQTAwQ0Y2NTY0IC8qIEZvdW5kYXRp
b24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY5MzI3NTMxQzIwQkNCQTAwQ0Y2
NTY0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsK
KwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkNF
RkFCMzE4MDVENjE2MDA0NzJDRTQgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZy
YW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAg
LTQzMzksNiArNDM2Myw3IEBACiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3Rh
cGkgKi8sCiAJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk2
NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRjkzMjc1OTFD
MjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3Rz
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTQzNDgsMTQgKzQzNzMsMTUgQEAKIAkJ
MDg2N0Q2OTFGRTg0MDI4RkMwMkFBQzA3IC8qIEphdmFTY3JpcHRDb3JlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2NTI5RkIzMDE4QjJENjM5MDBDNjEx
MDIgLyogZ2VuZXJhdGUtYnl0ZWNvZGUtZmlsZXMgKi8sCiAJCQkJODYwNEY0RjIxNDNBNkM0NDAw
QjI5NUY1IC8qIENoYW5nZUxvZyAqLywKKwkJCQlGNjhFQkI4QzAyNTVENEM2MDFGRjYwRjcgLyog
Y29uZmlnLmggKi8sCiAJCQkJRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNo
X3RhYmxlICovLAogCQkJCUE3MThGODIxMTE3OEVCNEIwMDI0NjVBNyAvKiBjcmVhdGVfcmVnZXhf
dGFibGVzICovLAotCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAot
CQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKLQkJCQlGNUMyOTBF
NjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLywKIAkJCQk5MzdC
NjNDQzA5RTc2NkQyMDBBNjcxREQgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKKwkJCQkwRjkz
Mjc1QTFDMjBCQ0RGMDBDRjY1NjQgLyogZHluYmVuY2guY3BwICovLAorCQkJCTY1MjlGQjMwMThC
MkQ2MzkwMEM2MTEwMiAvKiBnZW5lcmF0ZS1ieXRlY29kZS1maWxlcyAqLywKKwkJCQlGNUMyOTBF
NjAyODRGOThFMDE4NjM1Q0EgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCAqLywKKwkJCQk0NUUx
MkQ4ODA2QTQ5QjBGMDBFOURGODQgLyoganNjLmNwcCAqLywKIAkJCQlBN0MyMjVDQzEzOTk4MUYx
MDBGRjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBB
MzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAv
KiBhc3NlbWJsZXIgKi8sCkBAIC00MzY0LDkgKzQzOTAsMTIgQEAKIAkJCQlBN0Q4MDE5RjE4ODBE
NjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovLAogCQkJCTdFMzlEODFEMEVDMzhFRkEwMDNBRjExQSAvKiBieXRlY29t
cGlsZXIgKi8sCisJCQkJMUM5MDUxM0UwQkE5RTg4MzAwODFFOUQwIC8qIENvbmZpZ3VyYXRpb25z
ICovLAogCQkJCTE0ODBEQjlBMEREQzIyMzEwMDNDRkRGMiAvKiBkZWJ1Z2dlciAqLywKKwkJCQk2
NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovLAogCQkJCTg2RUM5
REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8sCiAJCQkJMEZGNDI3MkUxNThFQkNDRTAwNENC
OUZGIC8qIGRpc2Fzc2VtYmxlciAqLywKKwkJCQkwODY3RDY5QUZFODQwMjhGQzAyQUFDMDcgLyog
RnJhbWV3b3JrcyAqLywKIAkJCQkwRkVBMDlGQzE3MDUxMzdGMDBCQjcyMkMgLyogZnRsICovLAog
CQkJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICovLAogCQkJCUE1QkExNURGMTgy
MzQwOTIwMEE4MkU2OSAvKiBpbnNwZWN0b3IgKi8sCkBAIC00Mzc1LDE5ICs0NDA0LDE2IEBACiAJ
CQkJMEY0NjgwOUMxNEJBN0Y0RDAwQkZFMjcyIC8qIGxsaW50ICovLAogCQkJCTBGQ0VGQUFEMTgw
NUNBNDQwMDQ3MkNFNCAvKiBsbHZtICovLAogCQkJCTdFMzlEODM3MEVDM0EzODgwMDNBRjExQSAv
KiBwYXJzZXIgKi8sCisJCQkJMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFByb2R1Y3RzICov
LAogCQkJCTk1QUI4MzFBMERBNDJDNjkwMEJDODNGMyAvKiBwcm9maWxlciAqLywKIAkJCQk5OUU0
NUEwQzE4QTAxRTkzMDAyNkQ4OEYgLyogcmVwbGF5ICovLAorCQkJCTkzMkZDM0MyMDgyNEJCNzAw
MDVCM0M3NSAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8q
IHJ1bnRpbWUgKi8sCisJCQkJOTk1OUU5MjUxQkQxN0YxRTAwMUFBNDEzIC8qIFNjcmlwdHMgKi8s
CiAJCQkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1IC8qIHRlc3RzICovLAogCQkJCTg2MDNDRUYw
MTRDNzUzRUYwMEFFNTlFMyAvKiB0b29scyAqLywKIAkJCQk3Qjk4RDEzMzFCNjBDRDFFMDAyM0Ix
QTQgLyogd2FzbSAqLywKIAkJCQk4NkVBQzQ4QzBGOTNFOEI5MDA4RUM5NDggLyogeWFyciAqLywK
LQkJCQk2NTBGREY4RDA5RDBGQ0E3MDA3NjlFNTQgLyogRGVyaXZlZCBTb3VyY2VzICovLAotCQkJ
CTkzMkZDM0MyMDgyNEJCNzAwMDVCM0M3NSAvKiBSZXNvdXJjZXMgKi8sCi0JCQkJOTk1OUU5MjUx
QkQxN0YxRTAwMUFBNDEzIC8qIFNjcmlwdHMgKi8sCi0JCQkJMDg2N0Q2OUFGRTg0MDI4RkMwMkFB
QzA3IC8qIEZyYW1ld29ya3MgKi8sCi0JCQkJMDM0NzY4REZGRjM4QTUwNDExREI5QzhCIC8qIFBy
b2R1Y3RzICovLAotCQkJCTFDOTA1MTNFMEJBOUU4ODMwMDgxRTlEMCAvKiBDb25maWd1cmF0aW9u
cyAqLywKIAkJCSk7CiAJCQluYW1lID0gSmF2YVNjcmlwdENvcmU7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNTUyMyw5ICs1NTQ5LDkgQEAKIAkJCQlFMTc4NjMzRjBEOUJFQzAwMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5oICovLAogCQkJCUUzNUUwMzVEMUI3QUI0M0Uw
MDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QuY3BwICovLAogCQkJCUUz
NUUwMzVFMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3Qu
aCAqLywKKwkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCiAJ
CQkJQTdBOEFGMkMxN0FEQjVGMzAwNUFCMTc0IC8qIEludDE2QXJyYXkuaCAqLywKIAkJCQlBN0E4
QUYyRDE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oICovLAotCQkJCUE3QThBRjJCMTdB
REI1RjMwMDVBQjE3NCAvKiBJbnQ4QXJyYXkuaCAqLywKIAkJCQlCQzlCQjk1QjBFMTk2ODA2MDBE
Rjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQkMxMTY2N0EwRTE5OUMwNTAw
ODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQlBMUI5RTIzMzFCNEUwRDY3MDBC
QzdGRUQgLyogSW50bENvbGxhdG9yLmNwcCAqLywKQEAgLTU2MTQsOSArNTY0MCw5IEBACiAJCQkJ
QTU5NDU1OTExODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5oICov
LAogCQkJCUJDNzU2RkM2MEUyMDMxQjIwMERFN0QxMiAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAgKi8sCiAJCQkJQkM3NTZGQzcwRTIwMzFCMjAwREU3RDEyIC8qIEpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmggKi8sCisJCQkJMEYyQjY2QzkxN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50OEFy
cmF5LmggKi8sCiAJCQkJMEYyQjY2Q0ExN0I2QjVBQjAwQTdBRTNGIC8qIEpTSW50MTZBcnJheS5o
ICovLAogCQkJCTBGMkI2NkNCMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0ludDMyQXJyYXkuaCAqLywK
LQkJCQkwRjJCNjZDOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNJbnQ4QXJyYXkuaCAqLywKIAkJCQlF
MzNGNTA3RTFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwICovLAogCQkJ
CUUzM0Y1MDdGMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oICovLAogCQkJ
CUUzM0Y1MDc2MUI4NDIyNTcwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9y
LmNwcCAqLywKQEAgLTU2NDcsNiArNTY3Myw3IEBACiAJCQkJQTcyNzAwNzcwREFDNjA1NjAwRTU0
OEQ3IC8qIEpTTm90QW5PYmplY3QuaCAqLywKIAkJCQlCQzIyQTM5ODBFMTZFMTQ4MDBBRjIxQzgg
LyogSlNPYmplY3QuY3BwICovLAogCQkJCUJDMjJBMzk5MEUxNkUxNDgwMEFGMjFDOCAvKiBKU09i
amVjdC5oICovLAorCQkJCTBGOTMyNzVFMUMyMUVGN0YwMENGNjU2NCAvKiBKU09iamVjdElubGlu
ZXMuaCAqLywKIAkJCQlBN0Y5OTM1RTBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAg
Ki8sCiAJCQkJQTdGOTkzNUQwRkQ3MzI1MTAwQTBCMkQwIC8qIEpTT05PYmplY3QuaCAqLywKIAkJ
CQk3QzE4NEUxODE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQcm9taXNlLmNwcCAqLywKQEAgLTU2OTQs
MTAgKzU3MjEsMTAgQEAKIAkJCQk1M0YyNTZFMTFCODdFMjgwMDBCNEI3NjggLyogSlNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5jcHAgKi8sCiAJCQkJNTM5MTdFN0MxQjc5MTEwNjAwMEVCRDMzIC8q
IEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCAqLywKIAkJCQk2NTA3RDI5NzBFODcxRTRBMDBE
N0Q4OTYgLyogSlNUeXBlSW5mby5oICovLAotCQkJCTBGMkI2NkQ0MTdCNkI1QUIwMEE3QUUzRiAv
KiBKU1VpbnQxNkFycmF5LmggKi8sCi0JCQkJMEYyQjY2RDUxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
VWludDMyQXJyYXkuaCAqLywKIAkJCQkwRjJCNjZEMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50
OEFycmF5LmggKi8sCiAJCQkJMEYyQjY2RDMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTVWludDhDbGFt
cGVkQXJyYXkuaCAqLywKKwkJCQkwRjJCNjZENDE3QjZCNUFCMDBBN0FFM0YgLyogSlNVaW50MTZB
cnJheS5oICovLAorCQkJCTBGMkI2NkQ1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU1VpbnQzMkFycmF5
LmggKi8sCiAJCQkJQTdDQTNBRTExN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5jcHAgKi8s
CiAJCQkJQTdDQTNBRTIxN0RBNDFBRTAwNjUzOEFGIC8qIEpTV2Vha01hcC5oICovLAogCQkJCTcw
OUZCODYxMUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwICovLApAQCAtNTg3MSwxMSAr
NTg5OCwxMSBAQAogCQkJCTBGMkQ0REUwMTk4MzJEOTEwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJM
b2cuaCAqLywKIAkJCQkwRjJENERFMzE5ODMyRDkxMDA3RDRCMTkgLyogVHlwZVNldC5jcHAgKi8s
CiAJCQkJMEYyRDRERTQxOTgzMkQ5MTAwN0Q0QjE5IC8qIFR5cGVTZXQuaCAqLywKKwkJCQlBN0E4
QUYzMDE3QURCNUYzMDA1QUIxNzQgLyogVWludDhBcnJheS5oICovLAorCQkJCUE3QThBRjMxMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCUE3QThBRjMyMTdB
REI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLAogCQkJCTg2NjczOUQxMTNCRkRFNzEw
MDIzRDg3QyAvKiBVaW50MTZXaXRoRnJhY3Rpb24uaCAqLywKIAkJCQlBN0E4QUYzMzE3QURCNUYz
MDA1QUIxNzQgLyogVWludDMyQXJyYXkuaCAqLywKLQkJCQlBN0E4QUYzMDE3QURCNUYzMDA1QUIx
NzQgLyogVWludDhBcnJheS5oICovLAotCQkJCUE3QThBRjMxMTdBREI1RjMwMDVBQjE3NCAvKiBV
aW50OENsYW1wZWRBcnJheS5oICovLAogCQkJCTBGRTA1MDIzMUFBOTA5NTYwMEQzM0IzMyAvKiBW
YXJPZmZzZXQuY3BwICovLAogCQkJCTBGRTA1MDI0MUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZz
ZXQuaCAqLywKIAkJCQlFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovLApAQCAt
Nzc1Miw2ICs3Nzc5LDcgQEAKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5h
Ti5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5
SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTMyNzVGMUMyMUVGN0YwMENG
NjU2NCAvKiBKU09iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThC
OTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJz
ICovLApAQCAtNzk1MCw2ICs3OTc4LDIyIEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ug
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjkz
Mjc0RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRp
dmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5MzI3NTQxQzIwQkNCQTAw
Q0Y2NTY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJk
eW5iZW5jaCIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkwRjkzMjc0RjFDMjBCQ0JBMDBD
RjY1NjQgLyogU291cmNlcyAqLywKKwkJCQkwRjkzMjc1MTFDMjBCQ0JBMDBDRjY1NjQgLyogRnJh
bWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVu
Y2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gZHluYmVuY2g7CisJCQlwcm9kdWN0TmFtZSA9IHRl
c3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY5MzI3NTkxQzIwQkNCQTAwQ0Y2NTY0IC8q
IGR5bmJlbmNoICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50
b29sIjsKKwkJfTsKIAkJMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi8g
PSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMEZDRUZBQjcxODA1RDYxNjAwNDcyQ0U0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJsbHZtRm9ySlNDIiAqLzsKQEAgLTgxNDAsNiArODE4NCw3IEBA
CiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCiAJCQkJMEZF
Qzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3
MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKKwkJCQkwRjkzMjc0RTFDMjBCQ0JBMDBDRjY1NjQg
LyogZHluYmVuY2ggKi8sCiAJCQkpOwogCQl9OwogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAq
LwpAQCAtODM3Niw2ICs4NDIxLDE0IEBACiAvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwor
CQkwRjkzMjc0RjFDMjBCQ0JBMDBDRjY1NjQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTBGOTMyNzVCMUMyMEJDREYwMENGNjU2NCAvKiBkeW5iZW5jaC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKKwkJfTsKIAkJMEZDRUZBQjIxODA1RDYxNjAwNDcyQ0U0IC8qIFNvdXJjZXMgKi8g
PSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CkBAIC05MjM1LDYgKzkyODgsMTEgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVp
bGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlv
biAqLworCQkwRjkzMjc1RDFDMjBCRjNBMDBDRjY1NjQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAq
LyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjkzMjc0
RTFDMjBCQ0JBMDBDRjY1NjQgLyogZHluYmVuY2ggKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTMy
NzVDMUMyMEJGM0EwMENGNjU2NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJ
CTBGQ0VGQUJEMTgwNUQ2NjMwMDQ3MkNFNCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewog
CQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2
MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovOwpAQCAtOTM0MSw2ICs5Mzk5LDM0IEBACiAJCQl9
OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGOTMyNzU1MUMyMEJDQkEwMENGNjU2
NCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJ
CW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEY5MzI3NTYxQzIwQkNCQTAwQ0Y2NTY0IC8qIFJlbGVh
c2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRh
YmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCX07CisJCQluYW1lID0g
UmVsZWFzZTsKKwkJfTsKKwkJMEY5MzI3NTcxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2ZpbGluZyAq
LyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUu
eGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJfTsKKwkJCW5hbWUgPSBQcm9m
aWxpbmc7CisJCX07CisJCTBGOTMyNzU4MUMyMEJDQkEwMENGNjU2NCAvKiBQcm9kdWN0aW9uICov
ID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54
Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQl9OworCQkJbmFtZSA9IFByb2R1
Y3Rpb247CisJCX07CiAJCTBGQ0VGQUI4MTgwNUQ2MTYwMDQ3MkNFNCAvKiBEZWJ1ZyAqLyA9IHsK
IAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSAwRkNFRkFCRTE4MDVEODY5MDA0NzJDRTQgLyogTExWTUZvckpTQy54Y2NvbmZpZyAq
LzsKQEAgLTk3NDIsNiArOTgyOCwxNyBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2li
bGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsK
KwkJMEY5MzI3NTQxQzIwQkNCQTAwQ0Y2NTY0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJkeW5iZW5jaCIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwRjkzMjc1NTFDMjBC
Q0JBMDBDRjY1NjQgLyogRGVidWcgKi8sCisJCQkJMEY5MzI3NTYxQzIwQkNCQTAwQ0Y2NTY0IC8q
IFJlbGVhc2UgKi8sCisJCQkJMEY5MzI3NTcxQzIwQkNCQTAwQ0Y2NTY0IC8qIFByb2ZpbGluZyAq
LywKKwkJCQkwRjkzMjc1ODFDMjBCQ0JBMDBDRjY1NjQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7
CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkNFRkFCNzE4MDVENjE2MDA0NzJD
RTQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxsdm1G
b3JKU0MiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRhdGFGb3JtYXQuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNp
b24gMTk0MTY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgotI2luY2x1ZGUgIkpTQ0pTVmFs
dWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogICAgIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJ
ZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSksIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRC
eUlkQ29udGV4dCgpKTsKLSAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLnB1dChleGVj
LCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSkucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICAKICAgICBJZGVudGlm
aWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBmYWxzZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
QmFzZSkucHV0KGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CisgICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXRJbmxpbmUoZXhlYywgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0z
MDAsNyArMzAwLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwog
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
VmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVs
bHB0cjsKLSAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAg
YmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAg
IGlmIChhY2Nlc3NUeXBlICE9IHN0YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nl
c3NUeXBlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzIyLDcgKzMyMiw3IEBAIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChi
YXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAK
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRyOyAgICAKLSAgICBiYXNlVmFsdWUu
cHV0KGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElubGluZShl
eGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwogICAgIAogICAgIGlmIChhY2Nlc3NUeXBlICE9IHN0
YXRpY19jYXN0PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDIyLDcgKzQyMiw3IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSog
Y2FsbEZyYW0KICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogCiAgICAg
UHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSk7Ci0gICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2
YWx1ZSwgc2xvdCk7CisgICAgYmFzZVZhbHVlLnB1dElubGluZShjYWxsRnJhbWUsIHByb3BlcnR5
LCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpT
VmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MjAsNyArNjIwLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV9pZAogICAgIGlmIChwY1s4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVj
dCkKICAgICAgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KHZtLCBpZGVudCwgTExJ
TlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOwogICAgIGVsc2UKLSAgICAgICAgYmFzZVZhbHVl
LnB1dChleGVjLCBpZGVudCwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHNsb3QpOworICAgICAg
ICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBMTElOVF9PUF9DKDMpLmpzVmFsdWUo
KSwgc2xvdCk7CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CiAgICAgCiAgICAgaWYgKCFM
TElOVF9BTFdBWVNfQUNDRVNTX1NMT1cKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBA
IHN0cnVjdCBDbGFzc0luZm8gewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
Ym9vbCBoYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0OworICAgIEpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMo
KSBjb25zdDsKIAogICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hUYWJsZTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc29sZUNsaWVudC5j
cHAJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnNvbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29uc29sZUNsaWVudC5oIgogCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIlNjcmlwdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjcmlw
dENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0N1c3RvbUdldHRlclNldHRl
ci5oCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
dXN0b21HZXR0ZXJTZXR0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcml2
YXRlOgogICAgIEN1c3RvbVNldHRlciBtX3NldHRlcjsKIH07CiAKLXZvaWQgY2FsbEN1c3RvbVNl
dHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGN1c3RvbUdldHRlclNldHRlciwgSlNPYmplY3QqIGJh
c2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHZvaWQgY2FsbEN1c3RvbVNldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlIGN1c3RvbUdldHRlclNl
dHRlciwgSlNPYmplY3QqIGJhc2UsIEpTVmFsdWUgdGhpc1ZhbHVlLCBKU1ZhbHVlIHZhbHVlKTsK
IAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTI4LDUwICsxMjgsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9Owog
Ci1zdGF0aWMgYm9vbCBhZGRFcnJvckluZm9BbmRHZXRCeXRlY29kZU9mZnNldChFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgSlNPYmplY3QqIG9iaiwgYm9vbCB1c2VDdXJyZW50RnJhbWUsIENhbGxG
cmFtZSomIGNhbGxGcmFtZSwgdW5zaWduZWQgJmJ5dGVjb2RlT2Zmc2V0KQotewotICAgIFZlY3Rv
cjxTdGFja0ZyYW1lPiBzdGFja1RyYWNlID0gVmVjdG9yPFN0YWNrRnJhbWU+KCk7Ci0KLSAgICBp
ZiAoZXhlYyAmJiBzdGFja1RyYWNlLmlzRW1wdHkoKSkKLSAgICAgICAgdm0uaW50ZXJwcmV0ZXIt
PmdldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZSk7Ci0KLSAgICBpZiAoIXN0YWNrVHJhY2UuaXNFbXB0
eSgpKSB7Ci0KLSAgICAgICAgQVNTRVJUKGV4ZWMgPT0gdm0udG9wQ2FsbEZyYW1lIHx8IGV4ZWMg
PT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkgfHwgZXhlYyA9PSBl
eGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSk7Ci0KLSAgICAgICAgU3Rh
Y2tGcmFtZSogc3RhY2tGcmFtZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCA7IGkgPCBz
dGFja1RyYWNlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBzdGFja0ZyYW1lID0gJnN0YWNr
VHJhY2UuYXQoaSk7Ci0gICAgICAgICAgICBpZiAoc3RhY2tGcmFtZS0+Ynl0ZWNvZGVPZmZzZXQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYnl0ZWNv
ZGVPZmZzZXQpIHsKLSAgICAgICAgICAgIEZpbmRGaXJzdENhbGxlckZyYW1lV2l0aENvZGVibG9j
a0Z1bmN0b3IgZnVuY3RvcihleGVjKTsKLSAgICAgICAgICAgIHZtLnRvcENhbGxGcmFtZS0+aXRl
cmF0ZShmdW5jdG9yKTsKLSAgICAgICAgICAgIGNhbGxGcmFtZSA9IGZ1bmN0b3IuZm91bmRDYWxs
RnJhbWUoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSBmdW5jdG9yLmluZGV4
KCk7Ci0gICAgICAgICAgICBieXRlY29kZU9mZnNldCA9IHN0YWNrVHJhY2UuYXQoc3RhY2tJbmRl
eCkuYnl0ZWNvZGVPZmZzZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IGxpbmU7Ci0gICAgICAgIHVuc2lnbmVkIGNvbHVtbjsKLSAgICAgICAgc3RhY2tGcmFtZS0+Y29t
cHV0ZUxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKTsKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxpbmUsIGpzTnVtYmVyKGxpbmUpLCBSZWFkT25seSB8IERv
bnREZWxldGUpOwotICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+
Y29sdW1uLCBqc051bWJlcihjb2x1bW4pLCBSZWFkT25seSB8IERvbnREZWxldGUpOwotCi0gICAg
ICAgIGlmICghc3RhY2tGcmFtZS0+c291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG9i
ai0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5zb3VyY2VVUkwsIGpzU3RyaW5nKCZ2
bSwgc3RhY2tGcmFtZS0+c291cmNlVVJMKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKLSAgICAK
LSAgICAgICAgaWYgKCF1c2VDdXJyZW50RnJhbWUpCi0gICAgICAgICAgICBzdGFja1RyYWNlLnJl
bW92ZSgwKTsKLSAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPnN0
YWNrLCB2bS5pbnRlcnByZXRlci0+c3RhY2tUcmFjZUFzU3RyaW5nKHZtLnRvcENhbGxGcmFtZSwg
c3RhY2tUcmFjZSksIERvbnRFbnVtKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEVycm9ySW5zdGFuY2U6OmZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGJvb2wgdXNl
Q3VycmVudEZyYW1lKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dldHRlclNldHRlci5oCShyZXZpc2lvbiAx
OTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIGlubGluZSBHZXR0ZXJTZXR0ZXIqIGFz
R2V0dGVyU2V0dGVyKEpTVmEKIH0KIAogSlNWYWx1ZSBjYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpT
VmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIpOwotdm9pZCBjYWxsU2V0dGVyKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgYmFzZSwgSlNWYWx1ZSBnZXR0ZXJTZXR0ZXIsIEpTVmFsdWUsIEVDTUFN
b2RlKTsKK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgY2FsbFNldHRlcihFeGVjU3RhdGUqLCBKU1Zh
bHVlIGJhc2UsIEpTVmFsdWUgZ2V0dGVyU2V0dGVyLCBKU1ZhbHVlLCBFQ01BTW9kZSk7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSW5saW5lcy5oCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNp
bmNsdWRlICJKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb25JbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNP
YmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm94eS5oIgogI2luY2x1ZGUgIkpTU3RyaW5n
LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMTk0MTY1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiAr
Mjc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgZ2V0UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CiAKICAgICB2b2lkIHB1dChFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIHZvaWQg
cHV0SW5saW5lKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwdXRUb1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgcHV0VG9QcmltaXRpdmVCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2ln
bmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgdm9pZCBw
dXRCeUluZGV4KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CiAKQEAgLTc1MSw2ICs3NTIsMjQgQEAgaW5saW5lIHZvaWQgSlNWYWx1ZTo6cHV0
KEV4ZWNTdGF0ZSogZXhlYwogICAgIGFzQ2VsbCgpLT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+
cHV0KGFzQ2VsbCgpLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKIH0KIAorQUxX
QVlTX0lOTElORSB2b2lkIEpTVmFsdWU6OnB1dElubGluZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xv
dCkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWlzQ2VsbCgpKSkgeworICAgICAgICBwdXRUb1ByaW1p
dGl2ZShleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBKU0NlbGwqIGNlbGwgPSBhc0NlbGwoKTsKKyAgICBhdXRvIHB1dE1ldGhvZCA9
IGNlbGwtPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5wdXQ7CisgICAgaWYgKExJS0VMWShwdXRN
ZXRob2QgPT0gSlNPYmplY3Q6OnB1dCkpIHsKKyAgICAgICAgSlNPYmplY3Q6OnB1dElubGluZShj
ZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFB1dFByb3BlcnR5U2xvdCBvdGhlclNsb3QgPSBzbG90OworICAgIHB1dE1l
dGhvZChjZWxsLCBleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBvdGhlclNsb3QpOworICAgIHNs
b3QgPSBvdGhlclNsb3Q7Cit9CisKIGlubGluZSB2b2lkIEpTVmFsdWU6OnB1dEJ5SW5kZXgoRXhl
Y1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
c2hvdWxkVGhyb3cpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFpc0NlbGwoKSkpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE5NDE2
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcyLDQwICszNzIsMjAgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleAogLy8gRUNNQSA4LjYuMi4yCiB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxs
KiBjZWxsLCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAg
QVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpo
ZWFwKHRoaXNPYmplY3QpKTsKKyAgICBwdXRJbmxpbmUoY2VsbCwgZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgc2xvdCk7Cit9CisKK3ZvaWQgSlNPYmplY3Q6OnB1dElubGluZVNsb3coRXhlY1N0
YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAg
ICAvLyBUcnkgaW5kZXhlZCBwdXQgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Ru
ZXNzLCBzaW5jZSBsb2FkcyBvbiBwcm9wZXJ0eSBuYW1lcyB0aGF0IGFwcGVhciBsaWtlCi0gICAg
Ly8gdmFsaWQgaW5kaWNlcyB3aWxsIG5ldmVyIGxvb2sgaW4gdGhlIG5hbWVkIHByb3BlcnR5IHN0
b3JhZ2UuCi0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgewotICAgICAgICBwdXRCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGluZGV4
LnZhbHVlKCksIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNldHRlcnMgb3IgZ2V0
dGVycyBpbiB0aGUgcHJvdG90eXBlIGNoYWluCi0gICAgSlNWYWx1ZSBwcm90b3R5cGU7Ci0gICAg
aWYgKHByb3BlcnR5TmFtZSAhPSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudW5kZXJzY29yZVByb3Rv
KSB7Ci0gICAgICAgIGZvciAoSlNPYmplY3QqIG9iaiA9IHRoaXNPYmplY3Q7ICFvYmotPnN0cnVj
dHVyZSh2bSktPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8oKTsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewotICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqLT5wcm90b3R5cGUoKTsKLSAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1
dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KQotICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQotICAgICAgICAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlX
cml0ZUVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQogCi0gICAgSlNPYmplY3QqIG9iajsKLSAgICBmb3IgKG9iaiA9IHRoaXNP
YmplY3Q7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgeworICAgIEpTT2JqZWN0KiBvYmog
PSB0aGlzOworICAgIGZvciAoOzspIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09
IHRoaXNPYmplY3QpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUodm0pLT5wcm90
b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8
fCBvYmogPT0gdGhpcyk7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkp
CiAgICAgICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3Jl
YXRlVHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDEzLDggKzM5Myw4
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKIAogICAgICAgICAg
ICAgSlNWYWx1ZSBncyA9IG9iai0+Z2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgICAgICBpZiAo
Z3MuaXNHZXR0ZXJTZXR0ZXIoKSkgewotICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywg
Y2VsbCwgZ3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0
cmljdE1vZGUpOwotICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+c3RydWN0dXJlKCkt
PmlzRGljdGlvbmFyeSgpKQorICAgICAgICAgICAgICAgIGNhbGxTZXR0ZXIoZXhlYywgdGhpcywg
Z3MsIHZhbHVlLCBzbG90LmlzU3RyaWN0TW9kZSgpID8gU3RyaWN0TW9kZSA6IE5vdFN0cmljdE1v
ZGUpOworICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKCktPmlzRGljdGlvbmFyeSgpKQog
ICAgICAgICAgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZVNldHRlcihvYmosIG9mZnNldCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNDM4LDE1ICs0MTgs
MTUgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBwcm90b3R5cGUgPSBv
YmotPnByb3RvdHlwZSgpOworICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9IG9iai0+cHJvdG90
eXBlKCk7CiAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKTsKICAgICB9CiAgICAgCi0gICAg
QVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVj
dCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkK
KyAgICBBU1NFUlQoIXN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzKTsKKyAgICBpZiAo
IXB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90KSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7
Ci0gICAgcmV0dXJuOwogfQogCiB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IGJvb2wgc2hvdWxkVGhyb3cpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgJKHJldmlzaW9uIDE5NDE2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsOSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LmdldCh0
aGlzKS0+dmVjdG9yTGVuZ3RoKCk7CiAgICAgfQotICAgICAgICAKKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBwdXRJbmxpbmUoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmKTsKKyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCBwdXQoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQ
cm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBwdXRCeUlu
ZGV4KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
Ym9vbCBzaG91bGRUaHJvdyk7CiAgICAgICAgIApAQCAtODUyLDExICs4NTQsMTMgQEAgcHJpdmF0
ZToKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgogICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0m
LCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYp
OwogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgTkVWRVJfSU5MSU5FIHZvaWQgcHV0SW5saW5lU2xv
dyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwor
CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoVk0mLCBTdHJ1Y3R1cmUmLCBQcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmls
bEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJv
cGVydHlPZmZzZXQpOwogICAgIHZvaWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChQcm9w
ZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgU3RydWN0dXJlJik7CiAKLSAgICBjb25zdCBI
YXNoVGFibGVWYWx1ZSogZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgSGFzaFRhYmxlVmFsdWUqIGZpbmRQcm9wZXJ0
eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgICAgICAKICAgICB2b2lkIHB1dElu
ZGV4ZWREZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIFNwYXJzZUFycmF5RW50cnkqLCBjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImLCBQcm9wZXJ0eURlc2NyaXB0b3ImIG9sZCk7CiAgICAgICAgIApAQCAt
MTA5MCwxMyArMTA5NCwyMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdl
dE93CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJl
Y3Qob2Zmc2V0KTsKLSAgICBpZiAoc3RydWN0dXJlLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMo
KSAmJiB2YWx1ZS5pc0dldHRlclNldHRlcigpKQotICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlT
bG90KHNsb3QsIHZhbHVlLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwotICAgIGVsc2UgaWYgKHN0cnVj
dHVyZS5oYXNDdXN0b21HZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNDdXN0b21H
ZXR0ZXJTZXR0ZXIoKSkKLSAgICAgICAgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChzbG90
LCB2YWx1ZSwgYXR0cmlidXRlcywgc3RydWN0dXJlKTsKLSAgICBlbHNlCi0gICAgICAgIHNsb3Qu
c2V0VmFsdWUodGhpcywgYXR0cmlidXRlcywgdmFsdWUsIG9mZnNldCk7Ci0KKyAgICBpZiAodmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlKTsKKyAgICAgICAgSlNDZWxsKiBj
ZWxsID0gdmFsdWUuYXNDZWxsKCk7CisgICAgICAgIEpTVHlwZSB0eXBlID0gY2VsbC0+dHlwZSgp
OworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHZXR0ZXJTZXR0ZXJUeXBl
OgorICAgICAgICAgICAgZmlsbEdldHRlclByb3BlcnR5U2xvdChzbG90LCB2YWx1ZSwgYXR0cmli
dXRlcywgb2Zmc2V0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEN1
c3RvbUdldHRlclNldHRlclR5cGU6CisgICAgICAgICAgICBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVy
dHlTbG90KHNsb3QsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBzbG90LnNldFZhbHVlKHRoaXMsIGF0dHJpYnV0ZXMsIHZh
bHVlLCBvZmZzZXQpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTg3LDcgKzEyMDEsNyBA
QCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRl
PEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCitBTFdBWVNfSU5M
SU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJv
cGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNTRVJUKHZhbHVl
LmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDMtMjAwNiwgMjAwOCwgMjAwOSwgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9y
ZykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgSlNPYmplY3RJbmxpbmVzX2gKKyNkZWZpbmUgSlNP
YmplY3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNPYmplY3Qu
aCIKKyNpbmNsdWRlICJMb29rdXAuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEVDTUEgOC42
LjIuMgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0OjpwdXRJbmxpbmUoSlNDZWxsKiBjZWxs
LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFs
dWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVCh2YWx1ZSk7CisgICAgQVNTRVJU
KCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRo
aXNPYmplY3QpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIC8vIFRyeSBp
bmRleGVkIHB1dCBmaXJzdC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MsIHNpbmNl
IGxvYWRzIG9uIHByb3BlcnR5IG5hbWVzIHRoYXQgYXBwZWFyIGxpa2UKKyAgICAvLyB2YWxpZCBp
bmRpY2VzIHdpbGwgbmV2ZXIgbG9vayBpbiB0aGUgbmFtZWQgcHJvcGVydHkgc3RvcmFnZS4KKyAg
ICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgIHB1dEJ5SW5kZXgodGhpc09iamVjdCwgZXhlYywgaW5kZXgudmFsdWUoKSwg
dmFsdWUsIHNsb3QuaXNTdHJpY3RNb2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2V0dGVycyBvciBnZXR0ZXJzIGluIHRo
ZSBwcm90b3R5cGUgY2hhaW4KKyAgICBKU1ZhbHVlIHByb3RvdHlwZTsKKyAgICBpZiAocHJvcGVy
dHlOYW1lICE9IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS51bmRlcnNjb3JlUHJvdG8pIHsKKyAgICAg
ICAgZm9yIChKU09iamVjdCogb2JqID0gdGhpc09iamVjdDsgIW9iai0+c3RydWN0dXJlKHZtKS0+
aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpOyBvYmog
PSBhc09iamVjdChwcm90b3R5cGUpKSB7CisgICAgICAgICAgICBwcm90b3R5cGUgPSBvYmotPnBy
b3RvdHlwZSgpOworICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkgeworICAgICAg
ICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkpOworICAgICAg
ICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4o
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpCisgICAgICAgICAgICAgICAgICAgICYm
IHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3Ip
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0aGlzT2JqZWN0LT5wdXRJbmxpbmVTbG93KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dmFsdWUsIHNsb3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTT2Jq
ZWN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5oCShyZXZpc2lvbiAxOTQxNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDcgKzI1OCw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAg
ICAgICAgIAogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90eXBlIGNoYWluIGludGVyY2VwdCB0
aGlzIHByb3BlcnR5IGFjY2Vzcz8KLSAgICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0
U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBw
cm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
ICAgICAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAogICAgIHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>